Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何消除PHP中的filesize()警告?_Php_Filesize - Fatal编程技术网

如何消除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');
}