这是我的代码:
$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();