使用ftp_get和ftp_nlist通过FTP获取多个文件

时间:2017-04-24 16:48:18

标签: php ftp

我正在尝试使用ftp_get和ftp_nlist从其他域获取多个文件。 ftp_nlist需要一个资源和一个字符串,但下面返回

  

ftp_nlist()期望参数1为资源,在

中给出null

  

为foreach()提供的参数无效

    <?php
// Connect and login to FTP server
$ftp_server = "hostname";
$ftp_username ="username";
$ftp_userpass = "password";
$includes = "/directory/";
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass);

// Get file list
    $contents = ftp_nlist($conn_id, $includes);

// Loop through for file 1
foreach ($contents as $file) {
   $local_file = '/path/to/file.php';
   $server_file = '/path/to/file.php';
   ftp_get($conn_id, $local_file, $server_file, FTP_BINARY);
}

// Loop through for file 2
foreach ($contents as $file) {
   $local_file = '/path/to/file.php';
   $server_file = '/path/to/file.php';
   ftp_get($conn_id, $local_file, $server_file, FTP_BINARY);
}

// close connection
ftp_close($ftp_conn);
?>

1 个答案:

答案 0 :(得分:2)

您传递给$conn_id的变量ftp_nlist()未定义。您需要在所有 $ftp_conn函数中传递ftp_*。 (在你的情况下ftp_get()

同时检查ftp_close(),确保您没有忘记关闭连接。

我建议使用ftp_函数的包装器(如https://github.com/dg/ftp-php)来简化调试。您将能够使用Exceptions并像这样抓住它们:

try {
    $ftp = new Ftp;
    $ftp->connect($ftp_server);
    $ftp->login($ftp_username, $ftp_userpass);
    $ftp->nlist($includes);

} catch (FtpException $e) {
    echo 'Error: ', $e->getMessage();
}