В PHP, как вы можете сделать несколько операций чтения / записи в файл с повторным закрытием его - PullRequest
0 голосов
/ 14 января 2012

Я создаю класс, который будет хранить данные в файле, и мне нужно знать, возможно ли выполнить несколько операций чтения / записи с использованием одного дескриптора файла?

Я провел несколько экспериментов и используюэтот код:

$file_name = 'test.txt';
$file = fopen($file_name, 'r+');
echo fread($file, filesize($file_name)) . "<hr />";
fwrite($file, "|".rand());
echo fread($file, filesize($file_name));
fclose($file);

Файл читается в первый раз, запись работает, но второй хард пустой.

Используя этот код:

$file_name = 'test.txt';
$file = fopen($file_name, 'r+');
echo fread($file, filesize($file_name)) . "<hr />";
fwrite($file, "|".rand());
fclose($file);
$file = fopen($file_name, 'r+');
echo fread($file, filesize($file_name));
fclose($file);

Затем работает второй фред, но он не содержит данных, которые были добавлены к нему в fwrite прямо над ним.

Итак, я хочу создать дескриптор одного файла в качестве свойства класса,и чтобы его методы ссылались на него при чтении и записи, но включая любые изменения, которые другие методы могли бы внести в данные.

У меня есть 2 варианта, если это невозможно, один - открытие и закрытиедескриптор файла в каждом методе, но это кажется действительно неэффективным, и я не уверен, что «открыть» / «закрыть» один файл «стоит» с точки зрения производительности.Другая альтернатива состоит в том, что данные преобразуются в массив для облегчения манипулирования, я мог бы обновлять массив, а не файл каждый раз, но когда я обновлю файл?

1 Ответ

2 голосов
/ 14 января 2012

Проверьте fseek, чтобы переместить указатель в файл и прочитать оттуда, fread и fwrite перемещают этот указатель вперед.

И вы должны использовать a+ вместо r+, см .: режим fopen

...