php 文件大小返回 stat 失败错误

Posted

技术标签:

【中文标题】php 文件大小返回 stat 失败错误【英文标题】:php filesize returning stat failed error 【发布时间】:2013-10-15 00:14:39 【问题描述】:

我正在拨打以下电话:

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();”在循环内部,在检索/写入之后。

任何帮助表示赞赏!

斯科特

【问题讨论】:

查看此帖子:forums.phpfreaks.com/topic/… 这似乎是问题的根源;我注意到当文件已经存在时,不会抛出错误。所以当文件不存在时,它是“不可写的”。但问题仍然存在:不应该“||”阻止它进入那部分代码? 这么多年过去了,我想我明白发生了什么事。抱歉,线程坏死。我一直认为 PHP 会以合乎逻辑的方式逐步执行脚本,并且只有在遇到错误时才会停止——根据这个理论,它不会,因为双或运算符 ("||") 阻止它获取如果 file_exists() 失败,则转到 filesize()。但这不是 PHP 的工作方式。在运行时,它首先解析整个脚本,然后然后执行它。这就是为什么在脚本中无法访问的部分中放错逗号会以错误方式终止脚本。 :) 【参考方案1】:

改成

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

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

【讨论】:

以上是关于php 文件大小返回 stat 失败错误的主要内容,如果未能解决你的问题,请参考以下文章

PHP x64 仍然返回错误的文件大小

PHP 严格模式

计算在代码中打开的文件大小的最快方法(PHP)

Python中获取文件大小

perl中stat函数怎么计算文件的大小

C语言 stat()函数获得文件大小需不需要打开文件?就是stat()函数是怎么获得文件的大小的?