Я создаю класс, который будет хранить данные в файле, и мне нужно знать, возможно ли выполнить несколько операций чтения / записи с использованием одного дескриптора файла?
Я провел несколько экспериментов и используюэтот код:
$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 варианта, если это невозможно, один - открытие и закрытиедескриптор файла в каждом методе, но это кажется действительно неэффективным, и я не уверен, что «открыть» / «закрыть» один файл «стоит» с точки зрения производительности.Другая альтернатива состоит в том, что данные преобразуются в массив для облегчения манипулирования, я мог бы обновлять массив, а не файл каждый раз, но когда я обновлю файл?