PHP fopen с режимом c / c + - PullRequest
       19

PHP fopen с режимом c / c +

0 голосов
/ 11 октября 2019

Насколько я понимаю режим c / c +, я ожидаю поведения, подобного режиму 'a / a +, поэтому файл не должен быть усечен, а любой результат fwrite () должен быть добавлен перед существующим файлом.

На самом деле файл в любом случае кажется усеченным, поскольку файл всегда содержит только последнее содержимое fwrite ().

Возможно, это ошибка в моей версии PHP (7.0), или я что-то неправильно понимаю?

<?php
$fp = fopen($fpath,'c+');
fwrite($fp, date("H:i:s")." test\n");
fclose($fp);

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Возможно, небольшое дополнение к тому, что было сказано:

<?php 
/* file test.txt contains string(4): 'test' */
$fp = fopen('test.txt','c+');
fclose($fp);

файл test.txt НЕ обрезан до нулевой длины (как w или w+ на fopen()), этопо-прежнему содержит строку (4): test

Теперь посмотрим, что происходит, когда мы записываем один символ в файл, используя c+

$fp = fopen('test.txt','c+');
fwrite($fp, 'b');
fclose($fp);

file test.txt теперь содержит: best указатель файла был расположен в начале файла и заменяет только первый символ в оригинале - test стал best

0 голосов
/ 11 октября 2019

Что заставляет вас думать, что это должно вести себя иначе? Согласно документации, при использовании c указатель «позиционируется на начале файла». Начиная писать с этой конкретной позиции, вы всегда переопределите все, что уже присутствует в этом файле

...