当前位置: 首页 > 知识库问答 >
问题:

使用一个连接读取FTP目录中每个文件的内容

姬天逸
2023-03-14

我的目标是连接到FTP帐户,读取特定文件夹中的文件,抓取内容并在屏幕上列出。

这就是我所拥有的:

// set up basic connection
$conn_id = ftp_connect('HOST_ADDRESS');

// login with username and password
$login_result = ftp_login($conn_id, 'USERNAME', 'PASSWORD');

if (!$login_result)
{
    exit();
}

// get contents of the current directory
$contents = ftp_nlist($conn_id, "DirectoryName");

$files = [];

foreach ($contents AS $content)
{
    $ignoreArray = ['.','..'];
    if ( ! in_array( $content , $ignoreArray) )
    {
        $files[] = $content;
    }
}

上述方法可以很好地获取获取内容所需的文件名。接下来,我想递归文件名数组,并将内容存储到一个变量中以供进一步处理。

我不知道如何做到这一点,但我可以想象它需要像这样:

foreach ($files AS $file )
{
    $handle = fopen($filename, "r");
    $contents = fread($conn_id, filesize($file));
    $content[$file] = $contents;
}

上面的想法来自这里:
PHP:我如何从FTP服务器读取一个. txt文件到一个变量?

虽然我不喜欢每次都要连接以获取文件内容的想法,但我更愿意在初始实例上进行连接。

共有1个答案

艾安和
2023-03-14

为了避免连接/登录每个文件,请使用ftp_get并重用连接ID($conn_id):

foreach ($files as $file)
{
    // Full path to a remote file
    $remote_path = "DirectoryName/$file";
    // Path to a temporary local copy of the remote file
    $temp_path = tempnam(sys_get_temp_dir(), "ftp");
    // Temporarily download the file
    ftp_get($conn_id, $temp_path, $remote_path, FTP_BINARY);
    // Read the contents of temporary copy
    $contents = file_get_contents($temp_path);
    $content[$file] = $contents;
    // Discard the temporary copy
    unlink($temp_path);
}

(您应该添加一些错误检查。)

 类似资料:
  • 问题内容: 如果我选择一个zip文件,然后右键单击“在此处提取”,则会创建一个包含zip文件名的文件夹,并将zip文件的全部内容提取到其中。 但是,我想通过外壳转换几个zip文件。但是当我这样做 该文件夹未创建,但所有文件都提取到当前目录中。 我看过参数,但是没有这样的参数。我也试过 但是2. $ zipfile和4. $ zipfile 的扩展名必须使用sed删除。如果我做 它不起作用。 如何正

  • /tmp/data/myfile1.csv,/tmp/data/myfile2.csv,/tmp/data.myfile3.csv,/tmp/datamyfile4.csv 我希望将这些文件读入Spark DataFrame或RDD,并且希望每个文件都是DataFrame的一个解析。我怎么能这么做?

  • 问题内容: 我正在尝试将webpack中的每个角度模块捆绑在一起。我的目标是拥有一个app.js,它将通过以下配置与webpack捆绑在一起: 我将这个捆绑脚本放到我的index.html中,这样它将成为我应用程序的入口。我的文件夹中也有很多模块。文件夹结构如下: 我已要求这样做,所以当我加载其所有需要的文件时,都将加载。问题是我有几个类似的组件,我想告诉webpack分别捆绑每个组件,并用其包含

  • 我需要从不是父目录或子目录的多个路径读取拼花地板文件。 例如, 从dir1\u 1和dir1\u 2读取拼花文件 现在,我正在读取每个目录并使用“unionAll”合并数据帧。有没有一种方法可以不使用unionAll从dir1\u 2和dir2\u 1读取拼花地板文件,或者有没有什么奇特的方法可以使用unionAll 谢谢

  • 我使用SSH SFTP采样器在jmeter中进行SFTP测试。我可以将文件从Ftp位置获取/Put到本地位置,反之亦然。但我无法将文件从同一FTP位置的一个目录移动到另一个目录。 请建议。

  • 我正在尝试创建一个列表,列出在FTP服务器上的文件夹中找到的所有文件名。完整目录与登录凭据一起保存在设置数据库表中。它连接到FTP区域很好,我可以上传/下载文件。 这是我从文件夹中获取文件的代码。 我遇到的问题是,当前我试图搜索的文件夹是空的,但它找到了2个文件。 为什么会这样? 中的值是 这是我在FileZilla中打开它时的文件夹-它肯定是一个空文件夹。 如何查看系统文件中的所有文件并将其放入

  • 问题内容: 我有一个图片目录,我想循环浏览并执行一些文件计算。可能只是缺乏睡眠,但是我将如何使用PHP在给定目录中查找,并使用某种for循环遍历每个文件? 谢谢! 问题答案: scandir: 或glob可能更适合您的需求:

  • 上面是我的根、目录和路径的结构。我想得到三样东西<代码>汽车,和。 是目录的名称 这是我的代码: 如您所见,我设法获得了和。现在我想得到每个文件的车名(directroy的名字)。。。最简单的方法是什么?