我决定只通过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";
}
}
答案 0 :(得分:0)
我目前的解决方案实际上是在重命名前睡5分钟。
我想要更好的解决方案。但这绝对是一个答案。