0

我正在使用这样的脚本:

$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?文件存在于该位置。

4

2 回答 2

1

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

空文件 == 文件大小为 0。

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

于 2012-12-02T14:18:34.387 回答
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? 它被称为三元运算符。也就是说,如果文件大小评估为真(即大于 0)或使用 1,则使用文件大小。

绝对不是最佳实践,但指出来很有趣。

于 2012-12-02T14:28:09.990 回答