5

我正在使用 wamp 服务器。我尝试写入文件,但它给出了这样的错误:“警告:fwrite() 期望参数 1 是资源,给定的布尔值”。我该如何解决?

$file = 'file.txt';  
if (($fd = fopen($file, "a") !== false)) { 
  fwrite($fd, 'message to be written' . "\n");   
  fclose($fd); 
} 
4

5 回答 5

11

移动括号:

if (($fd = fopen($file, "a")) !== false) { 
  fwrite($fd, 'message to be written' . "\n");   
  fclose($fd); 
}

您的代码将(fopen($file, "a") !== false)(即布尔值)的结果分配给$fd.

于 2012-07-31T14:45:27.573 回答
3

一次只做一件事,因为没有急于和足够的空间:

$file = 'file.txt';
$fd = fopen($file, "a");
if ($fd) { 
    fwrite($fd, 'message to be written' . "\n");   
    fclose($fd); 
}

特别是让代码更容易,以防您遇到错误消息。

还要了解您的语言:PHP 中的资源始终评估为 true。

了解你的大脑:双重否定总是很复杂。

于 2012-07-31T15:27:41.857 回答
0

问题在于你的if情况。PHP 比较比赋值绑定得更紧密,所以fopen !== falseis 首先对 求值true,然后将trueis 写入$fd。您可以使用方括号将它们组合$fd = fopen($file, 'a')在一起,或者您可以将这部分从条件中取出并写下if ($fd !== false)您的条件。

于 2012-07-31T14:45:55.197 回答
0

把你!== false的“)”放在外面

像这样:

$file = 'file.txt';  
if (($fd = fopen($file, "a")) !== false) { 
  fwrite($fd, 'message to be written' . "\n");   
  fclose($fd); 
} 
于 2012-07-31T14:46:37.567 回答
0

运算符优先级导致您的问题。!==绑定比 更紧密=,因此您的代码实际上是:

if ($fd = (fopen(...) !== false)) {
          ^--------------------^--

并且您将!==比较的布尔结果分配给 $fd。

要么更改括号,要么切换到or具有较低绑定优先级的运算符:

if (($fd = fopen(...)) !== false) {
    ^----------------^

或者

$fd = fopen(...) or die('unable to open file');
于 2012-07-31T14:47:42.747 回答