Я прохожу все способы и пытаюсь понять, где вы можете применить некоторые из них, и я наткнулся на w
, Теперь я понимаю, как работает этот режим, но какова цель w+
? Очевидно, что если мы используем fopen
сразу после открытия файла он не будет работать, так как файл будет усечен, поэтому я предполагаю, что это хорошо, что-то записать в файл, а затем прочитать из него позже, поэтому я решил проверить это следующим образом:
$handle = fopen('new.txt', 'w+');
fwrite($handle, '123');
$file = fread($handle, filesize('new.txt'));
var_dump($file); // string '' (length=0)
fclose($handle);
По некоторым причинам он не читает содержимое файла позже.
Может кто-нибудь объяснить мне, пожалуйста, где это применимо, и что не так с моим кодом? filesize
возвращает 3, поэтому он не удаляет содержимое файла, я предполагаю, что $handle
может быть использован с момента открытия файла, и он не обновляется? Тогда это смущает меня еще больше, почему мы используем режим w+
и делать чтение из файла в то же время?
Редактировать: Я могу понять даже, как я могу написать что-то в файле с r+
а затем проверьте, что я написал с помощью fopen
опять вот так:
$handle = fopen('new.txt', 'r+');
fwrite($handle, '123');
$handle = fopen('new.txt', 'r+');
$file = fread($handle, filesize('new.txt'));
var_dump($file);
fclose($handle);
Если бы я сделал то же самое с w+
, он просто удалил бы содержимое, очевидно, и я не смог бы ничего прочитать?
fopen()
с w+
Опция открывает файл для чтения / записи в начале и усекает длину до 0. По сути, это то же самое, что запись в новый пустой файл.
Смотрите использование fopen () здесь: http://php.net/manual/en/function.fopen.php
w + в основном используется для «чтения» того, что вы написали. В вашем случае вы используете функцию fread (), которая читает «вперед» из вашего указателя, который в данный момент находится в конце файла после выполнения fwrite (), что объясняет, почему вы получаете пустое содержимое.
Надеюсь, это ответит на ваш вопрос.
@Вы. прав насчет указателя. Как только вы запустите fwrite, указатель будет в конце файла. Что вам нужно FSEEK () вернуться к началу файла.
$handle = fopen('new.txt', 'w+');
fwrite($handle, '123');
fseek($handle, 0);
$file = fread($handle, filesize('new.txt'));
var_dump($file); // string '123' (length=3)
fclose($handle);