私はワンプサーバーを使用しています。ファイルに書き込もうとしましたが、次のようなエラーが発生しています。どうすれば解決できますか?
$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');