如何摆脱 PHP 中的 filesize() 警告?

Posted

技术标签:

【中文标题】如何摆脱 PHP 中的 filesize() 警告?【英文标题】:How can I get rid of a filesize() warning in PHP? 【发布时间】:2011-06-17 16:21:24 【问题描述】:

除了关闭警告.. 我可以在我的代码中做些什么来摆脱这个错误:

warning: filesize() [function.filesize] stat failed for ....  on line 152

代码是:

$store_filesize = filesize($file->filepath);

【问题讨论】:

什么是$file->filepath null 有时是文件路径 如果是null 那你就会收到警告。 可以加if($file->filepath != null) 【参考方案1】:

我不确定这是否是您想要的(例如,我不清楚您是否想弄清楚它发生的原因并解决它)但如果您只是想抑制错误,您通常可以使用 @ in函数名的前面。

例如

$store_filesize = @filesize($file->filepath);

【讨论】:

这会抑制错误,但不会解决根本问题。不好的做法。 我认为在我的回答中解决了这个问题,OP 没有说明原因。这并不总是不好的做法,这实际上取决于这样做是否合适。我不认为使用 is_readable() 检查是抑制所有错误的合适方法。 这总是不好的做法。有一些语言结构可以更优雅地处理错误,包括try...catchset_error_handlerphp 在执行被抑制的语句之前动态地将error_reporting 更改为 0,然后将其更改回来,即使没有错误也是如此。为什么要花时间来获得更少的代码失败信息?为什么要支付处理器时间来抑制不存在的错误?良好的实践要求您编写实际处理或防止错误所需的琐碎代码,而不是简单地忽略它们。应该从不在 PHP 中使用 @。永远。 @Chris 并非所有失败都会引发异常,也并非所有失败都会产生后果,有时它只是一个不错的选择。包装 try/catch 没有任何内容不是更好的编译指示(而且不是免费的 - 如果服务经常失败,那就更糟了)。 注:我一般不鼓励人们使用@ - 并且我自己例外地很少使用它 - 但一切都取决于上下文。鼓励人们编写空的 try/catch 块也会产生后果(我认为更糟)。【参考方案2】:
$store_filesize = @filesize($file->filepath);
if ($store_filesize === FALSE) 
  throw new \Exception('filesize failed');

【讨论】:

【参考方案3】:

除非文件确实存在,否则不要调用filesize

$store_filesize = is_file($file->filepath) ? filesize($file->filepath) : 0;

is_file 的文档:http://php.net/manual/en/function.is-file.php

:)

【讨论】:

如果您有包含目录的权限,您可以致电filesizeis_readable 检查文件本身的权限,因此您返回 0 尽管在某些情况下您可以获得更多信息。此外,这引入了竞争条件 - 如果文件在 filesize 之前被删除,函数仍然会失败。 filesize 不会抛出异常,对吗?因此,您的代码更改无效。另外,如果包装在 try..catch 中可以工作,那么您不能跳过is_file 检查吗?【参考方案4】:

记得查看null:

if($file->filepath != null)
   $store_filesize = filesize($file->filepath);

【讨论】:

【参考方案5】:

检查文件是否存在,是否是文件,是否可读

if (is_readable($file->filepath)) 
    $store_filesize = filesize($file->filepath);

【讨论】:

这会受到竞争条件的影响,在is_readable 调用后文件被删除。而且,你可以有权限获取文件大小,但不能读取文件,所以这段代码任意获取一些文件的文件大小。

以上是关于如何摆脱 PHP 中的 filesize() 警告?的主要内容,如果未能解决你的问题,请参考以下文章

如何摆脱 React 中的 import/no-anonymous-default-export 警告?

我如何摆脱 Xcode 中的 IOS 版本“部分:在 IOS X 中引入”警告

PHP警告POST内容长度超过限制

关于PHP中filesize函数为何返回warning

警告为错误 - 如何摆脱这些

PHP 警告:66192047 字节的 POST 内容长度超过了 8388608 字节的限制