ftp_get无法处理大文件

时间:2014-01-10 04:06:05

标签: php ftp

这是我的代码:

$con = ftp_connect('ftpserver.com');
ftp_login($con, 'username', 'password');
ftp_pasv($con, true);
ftp_set_option($con, FTP_TIMEOUT_SEC, 180);
ftp_get($con, './test.txt', '/path/to/file.txt', FTP_ASCII);
ftp_close($con);

脚本运行超过几分钟后,我收到此错误:

PHP Warning: ftp_get(): Opening ASCII mode data connection for /path/to/file.txt (6137508 bytes). In /path/to/script.php

当它正在运行时,我可以看到test.txt文件被创建,甚至一些数据显示在其中,但它突然停止下载大约23,135字节。在脚本抛出警告后,test.txt将被删除。

更新

我想出了一个解决方法。

function getFile() {
    $fh = fopen('test.txt', 'a');

    $con = ftp_connect('ftpserver.com');
    ftp_login($con, 'username', 'password');
    ftp_pasv($con, true);
    ftp_set_option($con, FTP_TIMEOUT_SEC, 1);

    if (file_exists('test.txt')) {
        $size  = ftp_size($con, '/path/to/file.txt');
        $size2 = filesize('test.txt');
        @ftp_fget($con, $fh, '/path/to/file.txt', FTP_ASCII, $size2);
        fclose($fh);
        clearstatcache();
        if (filesize('test.txt') !== $size) {
            getFile();
        }
    }
    else
        @ftp_fget($con, $fh, '/path/to/file.txt', FTP_ASCII);

    ftp_close($con);
}

getFile();

0 个答案:

没有答案