这让我有点生气,想想也许这可能是服务器配置问题,但我在不同的主机上尝试过它并得到同样的问题。
我缩小了范围并创建了一个测试脚本来排除所有内容
<?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;
?>
希望有人可以为我阐明这一点。
答案 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。