我的脚本用ZIP压缩了一些文件,然后将此ZIP上载到另一台服务器。上传后,它会检查FTP和本地上ZIP的大小。如果大小相同,则将删除本地ZIP。
问题是ftp_size()
返回-1。但仅在真实脚本中。在我的测试脚本中,它工作正常。
测试脚本的工作原理如下:
$f = ftp_connect(HOST);
$res = ftp_login($f, USER, PASS);
$fname = 'archive_2018-09-18_13-39';
$fsize = ftp_size($f, "$fname-img.zip").'';
$fsize2 = filesize("backup/$fname-img.zip").'';
echo $fsize . '<br>' . $fsize2;
并返回:
22907946995
22907946995
真实的脚本是这样的:
$f = ftp_connect(HOST);
$res = ftp_login($f, USER, PASS);
$fname = 'archive_' . date('Y-m-d_H-i');
exec("zip -r -0 backup/$fname-img.zip \"website\" 2>&1");
exec('curl -T "' . "backup/$fname-img.zip" . '" ftp://' . HOST . ' --user ' . USER . ':' . PASS . ' 2>&1');
$fsize = ftp_size($f, "$fname-img.zip").'';
$fsize2 = filesize("backup/$fname-img.zip").'';
echo $fsize . '<br>' . $fsize2;
它显示:
-1
22907946995
真实脚本可以上传文件。它只是在FTP服务器上没有显示正确的大小。 因此,这不是文件大小的问题,也不是FTP连接的问题。
答案 0 :(得分:1)
仅在调用ftp_connect
之后尝试移动curl
。如果文件是使用其他连接上传的,则可能涉及一些缓存,阻止FTP服务器立即返回正确的大小。
尽管我强烈建议您使用PHP函数上传文件。