PHP的filesize函数返回stat失败错误

3
我正在调用下面的内容:

我正在调用以下内容:

while ( (!file_exists('./download/ah141090676723_100.jpg')) || (filesize('./download/ah141090676723_100.jpg') == '1359') ) { code that retrieves a remote file and writes it to '/ah141090676723_100.jpg'  }

...并且出现“filesize():stat failed for ./download/ah141090676723_100.jpg”错误。

我正在尝试解决的问题是远程服务器不稳定,有时会返回垃圾响应(始终为1359字节)。因此,我想检查一下A)文件不存在(第一次运行),或者B)文件等于垃圾(1359);如果其中任何一个为真,请尝试抓取和写入文件。反复操作,直到获得不是垃圾的东西。

实际上,代码似乎在起作用——文件被检索和写入,并且我没有让任何垃圾响应通过这个循环——但是错误让我感到困惑。我认为可能是在第一次运行时,文件不存在,因此filesize会引发这个错误。但是"||"运算符应该防止第一次运行时进行第二次评估……对吗?

我应该提到,在检索/写入之后,我在循环内调用了"clearstatcache();"。

任何帮助都表示感激!

斯科特


请查看此帖子:http://forums.phpfreaks.com/topic/156142-solved-warning-filesize-stat-failed/ - Iłya Bursov
看起来那似乎是问题的根源;我注意到当文件已经存在时,错误不会被抛出。所以当文件不存在时,它是“不可写的”。但问题仍然存在:难道“||”不应该防止代码到达那部分吗? - FoulFoot
多年过去了,我想我明白了发生了什么。抱歉打断了这个线程。我一直以为PHP会按照逻辑顺序逐步执行脚本,只有在遇到错误时才停止——但是根据这个理论,在file_exists()失败的情况下,双OR运算符("||")会防止它到达filesize()。但PHP并不是这样工作的。在运行时,它首先解析整个脚本,然后再执行它。这就是为什么在脚本的某个部分中放置一个错位的逗号,即使该部分无法访问,也会导致脚本出现错误终止。 :) - FoulFoot
1个回答

1
更改为:

变成

while ( file_exists('./download/ah141090676723_100.jpg') && filesize('./download/ah141090676723_100.jpg') == 1359) 

由于 file_exists 始终是必需的。当文件不存在或不可读时,filesize() 返回 "stat failed"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接