我正在使用 wamp 服务器。我尝试写入文件,但它给出了这样的错误:“警告:fwrite() 期望参数 1 是资源,给定的布尔值”。我该如何解决?
$file = 'file.txt';
if (($fd = fopen($file, "a") !== false)) {
fwrite($fd, 'message to be written' . "\n");
fclose($fd);
}
我正在使用 wamp 服务器。我尝试写入文件,但它给出了这样的错误:“警告:fwrite() 期望参数 1 是资源,给定的布尔值”。我该如何解决?
$file = 'file.txt';
if (($fd = fopen($file, "a") !== false)) {
fwrite($fd, 'message to be written' . "\n");
fclose($fd);
}
移动括号:
if (($fd = fopen($file, "a")) !== false) {
fwrite($fd, 'message to be written' . "\n");
fclose($fd);
}
您的代码将(fopen($file, "a") !== false)
(即布尔值)的结果分配给$fd
.
一次只做一件事,因为没有急于和足够的空间:
$file = 'file.txt';
$fd = fopen($file, "a");
if ($fd) {
fwrite($fd, 'message to be written' . "\n");
fclose($fd);
}
特别是让代码更容易,以防您遇到错误消息。
还要了解您的语言:PHP 中的资源始终评估为 true。
了解你的大脑:双重否定总是很复杂。
问题在于你的if
情况。PHP 比较比赋值绑定得更紧密,所以fopen !== false
is 首先对 求值true
,然后将true
is 写入$fd
。您可以使用方括号将它们组合$fd = fopen($file, 'a')
在一起,或者您可以将这部分从条件中取出并写下if ($fd !== false)
您的条件。
把你!== false
的“)”放在外面
像这样:
$file = 'file.txt';
if (($fd = fopen($file, "a")) !== false) {
fwrite($fd, 'message to be written' . "\n");
fclose($fd);
}
运算符优先级导致您的问题。!==
绑定比 更紧密=
,因此您的代码实际上是:
if ($fd = (fopen(...) !== false)) {
^--------------------^--
并且您将!==
比较的布尔结果分配给 $fd。
要么更改括号,要么切换到or
具有较低绑定优先级的运算符:
if (($fd = fopen(...)) !== false) {
^----------------^
或者
$fd = fopen(...) or die('unable to open file');