如何消除PHP中的filesize()警告?
除了关闭警告之外。。如何在代码中消除此错误:如何消除PHP中的filesize()警告?,php,filesize,Php,Filesize,除了关闭警告之外。。如何在代码中消除此错误: warning: filesize() [function.filesize] stat failed for .... on line 152 代码是: $store_filesize = filesize($file->filepath); 我不确定这是否是您想要的(例如,我不清楚您是否想找出它发生的原因并解决它),但如果您只是想抑制错误,通常可以在函数名前面使用@ e、 g 请记住检查null: if($file->filep
warning: filesize() [function.filesize] stat failed for .... on line 152
代码是:
$store_filesize = filesize($file->filepath);
我不确定这是否是您想要的(例如,我不清楚您是否想找出它发生的原因并解决它),但如果您只是想抑制错误,通常可以在函数名前面使用@ e、 g
请记住检查
null
:
if($file->filepath != null){
$store_filesize = filesize($file->filepath);
}
检查文件是否存在,是否为文件,是否可读
if (is_readable($file->filepath)) {
$store_filesize = filesize($file->filepath);
}
除非文件实际存在,否则不要调用
filesize
:
$store_filesize = is_file($file->filepath) ? filesize($file->filepath) : 0;
的文档是\u文件
:
:)什么是
$file->filepath
?有时为空,但有时是文件路径如果为null
,则会收到警告。您可以添加如果($file->filepath!=null)
这会抑制错误,但不会解决根本问题。糟糕的做法。我想在我的回答中提到了这一点,OP没有说明原因。这并不总是不好的做法,这实际上取决于这样做是否合适。不过,我不认为使用is_readable()检查是抑制所有错误的合适方法。这总是一种不好的做法。有一些语言结构可以更优雅地处理错误,包括try…catch
和set\u error\u handler
。在执行抑制语句之前,PHP将error\u reporting
动态更改为0,然后将其更改回0,即使没有错误。为什么要花费处理时间来获取代码中有关失败的较少信息?为什么要花费处理器时间来抑制不存在的错误?良好的实践要求您编写实际处理或防止错误所需的琐碎代码,而不是简单地忽略它们。千万不要在PHP中使用@
。曾经。@Chris不是所有失败的都会抛出异常,也不是所有失败的都会带来后果,有时候这只是一个好的选择。不使用任何东西包装try/catch并不是一个更好的说法(也不是免费的,如果服务经常失败,情况会更糟)。注意:我当然不鼓励人们使用@,我自己也很少使用它,但一切都取决于上下文。鼓励人们编写空的try/catch块也会产生后果(我认为更糟)。这会受到一种竞争条件的影响,即文件在调用可读后被删除。此外,您可以拥有获取文件大小的权限,但不能读取文件,因此此代码任意不获取某些文件的文件大小。如果您拥有包含目录的权限,则可以调用filesize
可读
检查文件本身的权限,因此返回0,尽管在某些情况下可以获得更多信息。此外,这引入了竞争条件-如果文件在filesize
之前被删除,函数仍将失败。filesize
不会引发异常,是吗?因此,您的代码更改无效。另外,如果用try..catch包装也可以,那么您不能跳过is\u文件
检查吗?
$store_filesize = is_file($file->filepath) ? filesize($file->filepath) : 0;
$store_filesize = @filesize($file->filepath);
if ($store_filesize === FALSE) {
throw new \Exception('filesize failed');
}