Intereting Posts
Как назначить роль PHP в Drupal? Настройка предварительного просмотра Yii2 PHP-поведение include / require внутри условного Android HttpPost отправляет пустой $ _POST скрипту PHP Отключите кнопку «ставка» на страницах продукта WooCommerce для автора включить файл .php в папку выше Как я могу получить шестнадцатеричный дамп строки в PHP? Экспертные мнения по очень большому количеству столбцов в таблице mySQL? оптимизация скорости preg_replace Загрузить изображение на сервер и сохранить путь к образцу в базе данных mysql Symfony2: Перенаправление на последний маршрут и флэш-сообщение? Отправка электронной почты с помощью Swift Mailer, GMail и PHP, отказ от прав доступа Каков наилучший способ проверить, существует ли таблица в DynamoDB? Преобразование таблицы MySQL по отношению к многомерному массиву PHPUnit: как проверить взаимодействие с базами данных на удаленном сервере Postgres?

php 5.3 fwrite () ожидает, что параметр 1 будет ошибкой ресурса

Я использую wamp-сервер. Я пытаюсь записать в файл, но он дает такую ​​ошибку: «Warning: fwrite () ожидает, что параметр 1 будет ресурсом, boolean given». Как я могу это решить?

$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 .

Делайте одно за раз, потому что нет спешки и достаточно места:

 $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');