ошибка fwrite(): предоставленный аргумент не является допустимым ресурсом потока. Почему?

#php #warnings

#php #предупреждения

Вопрос:

У меня есть этот код:

 $file = '/path/to/file.txt';

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

Почему я получаю следующие предупреждения?

 fwrite(): supplied argument is not a valid stream resource
fclose(): supplied argument is not a valid stream resource
  

Ответ №1:

Ваш оператор if неверен. Попробуйте

 if (($fd = fopen($file, "a")) !== false) {
  

Потому что ваш такой

 $fd = fopen($file, "a") !== false
  

Комментарии:

1. ИБП… Я пропустил это. Большое спасибо!

Ответ №2:

Потому что у вас ошибка в скобках. Код должен читать:

 if (($fd = fopen($file, "a")) !== false) {
  

То, что делает текущий код, устанавливается $fd в результат сравнения fopen возвращаемого значения с false , которое также false (при условии fopen успешного выполнения). По сути, у вас есть

 if ($fd = false) {
  

это не требует пояснений, а также поддается проверке (с var_dump ).

Мораль истории: не присваивайте значения переменным внутри if условий. Сейчас не 1980 год, и вы программируете не на C. Просто скажите «нет» и сделайте ядро читаемым; оно полюбит вас за это.