1

就像在这个问题中讨论的那样,ftp_fget当我在本地开发环境中时,我无法从 FTP 下载文件:

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

正如建议的那样,使用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 被客户端中止。

4

1 回答 1

0

你不能检查那个。它基本上是您需要预先知道的会话信息(以及主机名、用户名和密码)的一部分。

尽管显然只有两种模式,但如果第一种模式失败,您可以尝试一种模式并回退到另一种模式。

我会先尝试被动(因为这往往会更频繁地工作)然后回退到主动。

于 2016-02-22T19:25:11.337 回答