如何检查何时必须使用ftp_pasv?

时间:2016-02-22 18:53:25

标签: php ftp passive-mode

就像在this question中讨论过的那样,当我在本地开发环境中时,我遇到了ftp_fget从FTP下载文件的问题:

  

警告:ftp_fget():打开BINARY模式数据连接   myFile.csv

根据建议,使用ftp_pasv($conn_id, TRUE);工作得非常好,但我不想在生产服务器上使用FTP被动模式。

如何检查何时必须使用ftp_pasv

我试过了:

<?php

    $conn_id = ftp_connect(FTP_SERVER, FTP_PORT, 30);

    $handle = fopen(dirname(__FILE__).'/data/temp.csv', 'w');

    if (ftp_fget($conn_id, $handle, FTP_FILENAME, FTP_BINARY, 1)) {
          copy($handle,dirname(__FILE__).'/data/myFile.csv');
    }
    else {
        // Try with passive mode
        ftp_pasv($conn_id, TRUE);
        if (ftp_fget($conn_id, $handle, FTP_FILENAME, FTP_BINARY, 1)) {
            copy($handle,dirname(__FILE__).'/data/myFile.csv');
        }
        else {
            echo "Error downloading the file";
        }
    }

    ftp_close($conn_id);

但它给了我:

  

警告:ftp_fget():数据连接意外关闭,文件   转移/myFile.csv由客户端中止。

1 个答案:

答案 0 :(得分:0)

你无法检查。它基本上是您需要预先了解的会话信息(以及主机名,用户名和密码)的一部分。

虽然显然只有两种模式,但如果第一种模式失败,你可以尝试一种模式,然后回退到另一种模式。

我首先尝试被动(因为它往往更频繁地工作)并且回退到活动状态。