PHP - is_readable()返回不正确的值

时间:2012-12-02 14:11:35

标签: php file fopen fread

我正在使用这样的脚本:

$path = dirname(__FILE__)."/folder/file.ext"
if(is_readable($path)){
     $file = fread(fopen($path,"r"), filesize($path));
}else{
     //do something else if file can't be opened
}

令人惊讶的是,它会产生以下错误:

Warning: fread() [function.fread]: Length parameter must be greater than 0
in /nfs/c10/h02/mnt/161920/domains/example.com/html/my-folder/file.php on line 16

我想知道为什么会这样。它只发生在某些服务器上,而在其他服务器上则没问题。成功使用fread的要求是什么?文件存在于该位置。

2 个答案:

答案 0 :(得分:1)

如果文件为空,则可以读取。但是你不能用fread读取0个字节。

空文件== filesize of 0。

对于您的用例,您还可以使用PHP的file_get_contents函数。

答案 1 :(得分:1)

正如大家所说,filesize可能是0。

根据建议使用file_get_contents,或者如果您绝对需要/需要使用fread(),可以使用以下内容在php 5.3 +上解决它:

$path = dirname(__FILE__)."/folder/file.ext"
if(is_readable($path)){
    $file = fread(fopen($path,"r"), filesize($path) ?: 1);
}else{
    //do something else if file can't be opened
}

注意?: 1?它被称为ternary operator。也就是说,如果计算结果为true(即大于0),则使用filesize或使用1。

绝对不是最佳做法,但有趣的是指出。