5

私はワンプサーバーを使用しています。ファイルに書き込もうとしましたが、次のようなエラーが発生しています。どうすれば解決できますか?

$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

急いで十分なスペースがないため、一度に 1 つのことを行います。

$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 !== falseは最初に に評価されtrue、次にtrueに書き込まれ$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 に答える