Многие ответы здесь в Qaru используют fopen($file, "rw+")
, но manual не перечисляет режим "rw+"
, там только режим "r+"
(или "w+"
).
Итак, мне было интересно, , что делает режим "rw+"
? Какая разница между fopen($file,
"rw+"
или "r+"
? Я спрашиваю об этом, потому что в режиме "rw+"
нет документации.
Один подход состоит в том, чтобы учитывать, что режимы являются аддитивными, но я не мог найти упоминания о сочетаниях режимов на странице руководства fopen
(кроме того, что означает объединение "r"
с "w+"
, если "w+"
уже делает его доступным для чтения?). Но самое главное, режим w+
обрезает файл, а rw+
не усекает его (поэтому они не могут быть аддитивными). Вероятно, нет режима rw+
, несмотря на его использование пользователями Stack Overflow. Возможно, это работает, потому что парсер игнорирует букву "w", поскольку режим rw+
выглядит как === r+
?
Чтобы прояснить мой вопрос: что такое "rw+"
режим, то есть, как он отличается от других режимов? Я получил только два ответа в комментариях: либо я должен проверить документацию (я уже проверял и перепроверяю), либо неверный ответ, который сказал, что он равен "w+"
(это не так). "w+"
обрезает файл, а "rw+"
- нет.
Здесь script для тестирования (это доказывает, что w+
обрезает файл, но rw+
не работает):
<?php
$file = "somefile";
$fileOpened = fopen($file, "w");
fwrite($fileOpened, "0000000000000000000");
fclose($fileOpened);
$fileOpened = fopen($file, "rw+");
fwrite($fileOpened, "data");
fclose($fileOpened);
$fileOpened = fopen($file, "r");
$output = fgets($fileOpened);
echo "First, with 'rw+' mode:<br>".$output;
$fileOpened = fopen($file, "w+");
fwrite($fileOpened, "data");
fclose($fileOpened);
$fileOpened = fopen($file, "r");
$output = fgets($fileOpened);
echo "<br><br><br>Now with only 'w+' mode:<br>".$output;
?>