Вопрос

Я застрял и нуждаюсь в помощи.Надеюсь, кто-нибудь сможет помочь?

Кто-нибудь знает, почему в этом коде я получаю сообщение «не удалось записать»?

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

Заранее спасибо.

Это было полезно?

Решение

Используя оператор OR при создании дескриптора файла, вы возвращаете логическое значение в зависимости от операции.Таким образом, $write_handle будет содержать true или false вместо файлового ресурса.Лучший способ открыть файл для записи и проверить его успешность:

$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 флаг, он будет очищать файл при каждой записи.

Другие советы

Я видел, как он использовался везде, но проблема в том, что || умереть ("не открывать пользователи_v2!");

Сначала я добавил:

error_reporting(E_ALL);

чтобы увидеть, что php сообщает об ошибках.

$write_handle = fopen($write_file, "w") || die("Couln't open users_v2!");
fclose($write_handle);

Возвращает недопустимую ошибку дескриптора потока и дескриптор файла, равный 1.Без него возвращаемый дескриптор файла будет «Идентификатор ресурса #x».

Изменение строки на:

$write_handle = fopen($write_file, "w"); // || die("Couln't open users_v2!");

и ваш код работает нормально.Сейчас собираюсь опубликовать это на php.net.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top