我的目标是连接到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: How do I read a .txt file from FTP server into a variable?
虽然我不喜欢每次都要连接以获取文件内容的想法,但是我更喜欢在初始实例上进行连接。
要避免为每个文件连接/登录,请使用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);
}
(您应该添加一些错误检查。)