我决定通过ftp下载文件,然后将下载的文件重命名为正确的名称,而不是直接下载文件。这样,文件出现故障的时间就会减少到最小。
下面是代码的"精华"
$status=ftp_get($conn_id, $temp , $filename, $mode);
rename ( $temp , $filename );
我基本上得到了一个错误,说文件$temp正在使用中,所以不能重命名。
问题是下载已经完成了。
我应该关闭文件还是怎么做?如何告诉PhP,你好,$temp完成了,现在我需要重命名它。
这是代码
的更全面的版本function dealWithOneFile($filename,$conn_id)
{
$ftpsize = ftp_size ($conn_id, $filename);
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if ($ext == "php" || $ext == "bin" || $ext == "dat" || $ext == "BIN" || $ext == "inc")
{
}
else
{
return;
}
while(false)
if (file_exists ($filename ))
{
$filesize =filesize ($filename);
if ($filesize==$ftpsize)
{
echo "file size is the same with the one we have here'n";
return;
}
}
$temp = "temp.bin";
$mode= FTP_BINARY;
if ($ext=="php")
{
$mode = FTP_ASCII ;
}
$status=ftp_get($conn_id, $temp , $filename, $mode);
if ($status) {
echo "Successfully written $filename to $temp'n";
if (file_exists($filename))
{
$tempsize = filesize ($temp);
if ($filesize==$tempsize)
{
echo "file size is the same with the one we have here'n";
return;
}
}
while(false);
//unlink ($filename);
rename ( $temp , $filename );
echo "Succesfully update $filename 'n";
} else {
echo "There was a problem'n";
}
}
我目前的解决方案是在重命名前睡5分钟。
我想要更好的解决方案。但这绝对是一个答案