ftp_get() 损坏的大文件下载

Posted

技术标签:

【中文标题】ftp_get() 损坏的大文件下载【英文标题】:ftp_get() corrupt large file download 【发布时间】:2015-08-07 09:26:50 【问题描述】:

我必须使用 ftp 从服务器下载一个 .gz 格式的大文件(大约 -9mb)。我已经编写了一个完整且正确地下载文件的函数,但是当我将此代码放到网上时,文件已下载但文件已损坏。 这是我的代码:

function downloadFile($ftp_server, $username, $password, $server_file, $local_file)


// download server file
    $ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
    $login = ftp_login($ftp_conn, $username, $password);
    ftp_pasv($ftp_conn, true);
    if (ftp_get($ftp_conn, $local_file, $server_file, FTP_ASCII)) 
        echo "Successfully written to $local_file.";
        //   exit;

     else 
        echo "Error downloading $server_file.";
    


我是这样称呼它的

ini_set('max_execution_time', 0);
$username = "username";
$password = "password";
$xmlFile = __DIR__ . "/monster.xml.gz";
$local_file = __DIR__ . "/monster.xml";
$ftp_server = "ftp.monster.com";
$server_file = "/US~Partner~Sample Feed.xml.gz";


downloadFile($ftp_server,$username,$password,$server_file,$xmlFile);

必须下载该文件,然后我会将其转换为 XML 以进行进一步处理。 注意:文件在 localhost 上完美下载,这个问题是在我们把它放在实时服务器上时发生的。

【问题讨论】:

为什么要以 ASCII 模式下载压缩文件? 我使用它是因为它只包含文本。请指导我天气我应该以哪种模式下载它。 尝试将 ftp_get() 上的 modeFTP_ASCII 更改为 FTP_BINARY 这是一个压缩文件,因此即使内容只是文本,它们也不会只是 .gz 文件中的文本. 【参考方案1】:

GZ 文件中可能不仅有文本。所以你必须以二进制模式下载它,以便其中包含的任何内容都可以成功下载

if (ftp_get($ftp_conn, $local_file, $server_file, FTP_ASCII)) 
    echo "Successfully written to $local_file.";
    //   exit;

 else 
    echo "Error downloading $server_file.";

【讨论】:

以上是关于ftp_get() 损坏的大文件下载的主要内容,如果未能解决你的问题,请参考以下文章

ftp_get失败但未报告错误

本地xshell损坏了着急拷贝服务器上的大文件怎么办?有办法lrzsz来帮忙

PHP ftp使用

dnf体验服文件损坏6602怎么解决,卸载重装啥的都试过了,求有经验的大神啊

JSON 中的大整数被 Angular 而不是 CURL 损坏?

急!用U盘拷贝文件时出错,代码:0x80070570文件或目录损坏且无法读取。