fread():提供的参数不是有效的流资源

时间:2012-06-05 14:08:07

标签: php fopen fread

这让我有点生气,想想也许这可能是服务器配置问题,但我在不同的主机上尝试过它并得到同样的问题。

我缩小了范围并创建了一个测试脚本来排除所有内容

<?php
$myFile = "test.txt";
$fh = fopen($myFile, 'r') || die("Couln't open file");
if ( $fh == true ) {
        echo "file handle valid<br>";
}
else {
        echo "file handle invalid<br>";
}
$theData = fread($fh, filesize($myFile)) || die("Couldn't read file");
echo $theData;
fclose($fh)|| die("Couldn't close file");
?>

当test.txt丢失时,我正确地让骰子无法打开文件 当test.txt在那里时,我得到了

警告:fread():提供的参数不是

中的有效流资源

我已将test.txt设置为777以确保

我也写这个只是为了仔细检查,哪个工作正常

<?php
$data = file_get_contents('test.txt');
echo $data;
?>

希望有人可以为我阐明这一点。

2 个答案:

答案 0 :(得分:1)

$fh = fopen($myFile, 'r') || die("Couln't open file");

您正在为$fh分配一个布尔表达式,从而丢失了该过程中的实际文件句柄。尝试将上面的行更改为

($fh = fopen($myFile, 'r')) || die("Couln't open file");

答案 1 :(得分:1)

你在PHP中被operator precedence咬了。 ||的优先级高于=,因此您实际上是将逻辑OR的结果分配给$fh。切换到

$fh = fopen($myFile, 'r') or die("Couln't open file");
                          ^^--- lower precedence logical or

会解决问题。

使用or,将fopen()的返回值分配给$fh,然后评估or die() - 如果fopen()返回文件句柄,则为失败和代码处理。如果fopen失败,则返回一个布尔值false,并且或者死亡。

使用||时,fopen的值与die调用逻辑ORred,其结果或(false)将分配给$ fh。