ftp_get不具有大文件的工作(ftp_get not working with large fi

2019-10-19 04:39发布

这是我的代码:

$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被删除该警告。

UPDATE

我想出了一个解决办法。

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();
文章来源: ftp_get not working with large file
标签: php ftp