PHP - не удалось написать
Я застрял и нуждаюсь в руке. Надеюсь, кто-нибудь может помочь?
У кого-нибудь есть идеи, почему я получаю "сбой записи" в этом коде?
$write_file = "/usr/home/public_html/php/users_v2.sql";
$write_handle = fopen($write_file, "w") || die("Couln't open users_v2!");
if (is_writeable($write_file)) {
if ($write_handle === FALSE) echo 'Failed handle?!';
if (fwrite($write_handle, "Hi\n") === FALSE) echo "Failed write!\n";
}
fclose($write_handle);
Заранее спасибо.
2 ответа
Используя оператор OR при создании дескриптора файла, вы возвращаете логическое значение в зависимости от операции. Таким образом, $write_handle будет содержать истину или ложь, а не ресурс файла. Лучший способ открыть файл для записи и проверить его успешность:
$write_handle = fopen($write_file, 'w');
if ($write_handle === false)
{
die('Could not open file ' . $write_file);
}
Кроме того, вы можете использовать file_put_contents
()
функция, которая обрабатывает fopen(), fwrite() и fclose() для вас. Я рекомендую это только в том случае, если вы выполняете только одну запись в один и тот же файл, так как это потребует больших затрат и если вы не передадите FILE_APPEND
флаг, он будет очищать файл для каждой записи.
Я видел его везде, но проблема в том, что || die("Не могу открыть users_v2!");
Сначала я добавил:
error_reporting(E_ALL);
чтобы увидеть, что php сообщает об ошибках.
$write_handle = fopen($write_file, "w") || die("Couln't open users_v2!");
fclose($write_handle);
Возвращает недопустимую ошибку дескриптора потока и дескриптор файла 1. Без него возвращается дескриптор файла "Resource id #x".
Изменение строки на:
$write_handle = fopen($write_file, "w"); // || die("Couln't open users_v2!");
и ваш код работает нормально. Собираюсь опубликовать это на php.net сейчас.