我用下面的代码通过FTP在PHP中下载文件:PHP FTP代码失败,即使文件被下载成功
$fp = fopen($local_file, 'w+');
$conn_id = ftp_connect($host);
$login_result = ftp_login($conn_id, $user, $pass);
$ret = ftp_nb_fget($conn_id, $fp, $remote_file, FTP_BINARY);
while ($ret == FTP_MOREDATA) {
$ret = ftp_nb_continue($conn_id);
}
if ($ret != FTP_FINISHED) {
echo "<span style='color:red;'><b>There was an error downloading the file!</b></span><br>";
logThis("log.txt", date('h:i:sa'), "ERROR DOWNLOADING FILE!");
exit();
}
fclose($fp);
<<php code continues below this....>>
此代码似乎工作的罚款。该文件被下载,并且文件的MD5哈希值与下载之前其他服务器上文件的哈希值相匹配。所以下载完成。
无论如何,使用上面的代码,即使文件成功下载,它也会触发if($ ret!= FTP_FINISHED)条件中的代码。
如果文件下载正常,为什么FTP_FINISHED不正确?
编辑
当我从while循环之后检查$ ret值为,时代脚本完成罚款$ RET = 1和时代脚本失败$ RET = 0
然而,有时候脚本失败,因为当文件实际下载正确时,$ ret = 0,这可以通过MD5比较来确认。
另外,0或1不是应从这些命令返回的值。 PHP官方文档举三个可能的返回值,他们FTP_FAILED或FTP_FINISHED或FTP_MOREDATA
在while循环之后'$ ret'的值是什么? – dstudeba
您是否已验证文件的所有部分已成功传输?对收到的和源文件执行md5验证以确认。 – shrmn
@shrmn我原来的帖子提到我没有比较文件的MD5哈希值,并且该文件确实可以正常下载。 –