Почему PHP смешивает два дескриптора fopen в одном файле?

Я заметил во время тестирования двух fopen() дескрипторы на одном файле, что дескрипторы или каналы смешиваются, и содержимое файла пусто при вызове fread(), Один дескриптор читается, а другой дескриптор пишется.

Пример кода:

$rh = fopen('existingfilewithcontent.txt', 'r');
$wh = fopen('existingfilewithcontent.txt', 'w');
echo fread($rh, 1000);
fclose($rh);
fclose($wh);
// file is now blank

Это проверено на Linux & Окна.

Я не мог найти ничего в PHP-документах об этом.

Пожалуйста, не спрашивайте меня, почему я хочу две ручки на одном файле, так как это не вопрос.

Спасибо

2

Решение

Открытие файла для записи разрушительно.

Руководство говорит:

«Ш» — Открыто только для записи; поместите указатель файла в начале файла и обрежьте файл до нулевой длины. Если файл не существует, попытайтесь создать его.

Вы, вероятно, хотите:

«Г +» — Открыт для чтения и письма; поместите указатель файла в начале файла.

ИЛИ ЖЕ

«А +» — Открыт для чтения и письма; поместите указатель файла в конец файла. Если файл не существует, попытайтесь создать его. В этом режиме fseek () влияет только на позицию чтения, запись всегда добавляется.

Смотрите руководство: http://php.net/manual/en/function.fopen.php

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]