私はワンプサーバーを使用しています。ファイルに書き込もうとしましたが、次のようなエラーが発生しています。どうすれば解決できますか?
$file = 'file.txt';
if (($fd = fopen($file, "a") !== false)) {
fwrite($fd, 'message to be written' . "\n");
fclose($fd);
}
私はワンプサーバーを使用しています。ファイルに書き込もうとしましたが、次のようなエラーが発生しています。どうすれば解決できますか?
$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。
急いで十分なスペースがないため、一度に 1 つのことを行います。
$file = 'file.txt';
$fd = fopen($file, "a");
if ($fd) {
fwrite($fd, 'message to be written' . "\n");
fclose($fd);
}
特に、エラー メッセージが表示された場合に備えて、コードをより簡単にします。
また、自分の言語についても知っておいてください。PHP のリソースは、常に true と評価されます。
そして、あなたの頭脳を知ってください: 二重否定は常に複雑です.
問題はあなたのif状態にあります。PHP 比較は代入よりも厳密にバインドされるため、fopen !== falseは最初に に評価されtrue、次にtrueに書き込まれ$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');