PHP在完全下载后停止读取远程文件

PHP在完全下载后停止读取远程文件,php,Php,我得到了一个30秒的超时错误,因为代码一直在检查文件是否超过5mb,当它在下面时。该代码旨在拒绝超过5mb的文件,但我需要它也停止执行时,该文件是在5mb以下。有没有办法检查文件传输块是否为空?我目前正在使用DaveRandom的这个示例: 编码人: $url='1!'http://www.spacetelescope.org/static/archives/images/large/heic0601a.jpg'; $file='../temp/test.jpg'; $limit=5*1024

我得到了一个30秒的超时错误,因为代码一直在检查文件是否超过5mb,当它在下面时。该代码旨在拒绝超过5mb的文件,但我需要它也停止执行时,该文件是在5mb以下。有没有办法检查文件传输块是否为空?我目前正在使用DaveRandom的这个示例:

编码人:

$url='1!'http://www.spacetelescope.org/static/archives/images/large/heic0601a.jpg';
$file='../temp/test.jpg';
$limit=5*1024*1024;//5MB
如果(!$rfp=fopen($url,'r')){
//错误,无法打开远程文件
}
如果(!$lfp=fopen($file,'w')){
//错误,无法打开本地文件
}
//检查内容长度是否超出限制
foreach($http\u response\u头作为$header){
if(preg_match('/^\s*内容长度\s*:\s*(\d+)\s*$/',$header,$matches)){
如果($matches[1]>$limit){
//错误,文件太大
}
}
}
$download=0;
而($下载<$限制){
$chunk=fread($rfp,8192);
fwrite($lfp,$chunk);
$download+=strlen($chunk);
}
如果($下载>$限制){
//错误,文件太大
取消链接($file);//删除本地数据
}否则{
//成功
}

您应该检查是否已到达文件末尾:

while (!feof($rfp) && $downloaded < $limit) {
  $chunk = fread($rfp, 8192);
  fwrite($lfp, $chunk);
  $downloaded += strlen($chunk);
}
while(!feof($rfp)&&&$download<$limit){
$chunk=fread($rfp,8192);
fwrite($lfp,$chunk);
$download+=strlen($chunk);
}

向我们展示您目前使用的代码和您尝试使用的代码。我在DaveRandom的答案中使用了完全相同的代码。这是第一个答案:我理解这一点,但在这篇文章中包含代码的相关部分是很好的做法,这样这个问题就可以自己理解了。谢谢Ian。好的,下次我会记得在这里发帖的,戴夫:)
while (!feof($rfp) && $downloaded < $limit) {
  $chunk = fread($rfp, 8192);
  fwrite($lfp, $chunk);
  $downloaded += strlen($chunk);
}