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