除了关闭警告之外,我在我的代码中还能做什么来消除这个错误:
warning: filesize() [function.filesize] stat failed for .... on line 152
代码如下:
$store_filesize = filesize($file->filepath);
$store_filesize = @filesize($file->filepath);
try...catch
和 set_error_handler
。PHP 在执行被抑制的语句之前动态更改 error_reporting
为 0,然后再将其更改回来,即使没有错误也是如此。为什么要花费处理时间来获取有关代码故障的更少信息?为什么要花费处理器时间来抑制不存在的错误?良好的实践规定您编写必要的微不足道的代码来实际处理或防止错误,而不仅仅是忽略它们。在 PHP 中,永远不要使用 @
。 - Chris Bakerfilesize
函数:$store_filesize = is_file($file->filepath) ? filesize($file->filepath) : 0;
is_file
的文档: http://php.net/manual/en/function.is-file.php
:)
filesize
。is_readable
检查文件本身的权限,因此在某些情况下,您可能会返回 0 而无法获取更多信息。此外,这会引入竞态条件 - 如果文件在 filesize
之前被删除,则函数仍将失败。 - phihagfilesize
会抛出异常吗?因此,您的代码更改没有任何效果。另外,如果在 try..catch 中包装会起作用,那么您不需要跳过 is_file
检查,是吗? - phihag$store_filesize = @filesize($file->filepath);
if ($store_filesize === FALSE) {
throw new \Exception('filesize failed');
}
检查文件是否存在,是文件且可读
if (is_readable($file->filepath)) {
$store_filesize = filesize($file->filepath);
}
is_readable
调用后文件可能已经被删除。此外,虽然你有获取文件大小的权限,但是没有读取文件的权限,所以这段代码会武断地忽略某些文件的大小。 - phihag记得检查 null
:
if($file->filepath != null){
$store_filesize = filesize($file->filepath);
}
$file->filepath
是什么? - Naftaliif($file->filepath != null)
。 - kskaradzinski