使用curl上传文件后ftp_size返回-1

时间:2018-09-18 12:48:50

标签: php ftp

我的脚本用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连接的问题。

1 个答案:

答案 0 :(得分:1)

仅在调用ftp_connect之后尝试移动curl。如果文件是使用其他连接上传的,则可能涉及一些缓存,阻止FTP服务器立即返回正确的大小。


尽管我强烈建议您使用PHP函数上传文件。