режим fopen w + и чтение файла?

Я прохожу все способы и пытаюсь понять, где вы можете применить некоторые из них, и я наткнулся на 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+, он просто удалил бы содержимое, очевидно, и я не смог бы ничего прочитать?

0

Решение

fopen() с w+ Опция открывает файл для чтения / записи в начале и усекает длину до 0. По сути, это то же самое, что запись в новый пустой файл.

Смотрите использование fopen () здесь: http://php.net/manual/en/function.fopen.php

w + в основном используется для «чтения» того, что вы написали. В вашем случае вы используете функцию fread (), которая читает «вперед» из вашего указателя, который в данный момент находится в конце файла после выполнения fwrite (), что объясняет, почему вы получаете пустое содержимое.

Надеюсь, это ответит на ваш вопрос.

2

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

@Вы. прав насчет указателя. Как только вы запустите 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);
1

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