Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как дописать текст в файл?
Форумы портала PHP.SU » » Работа с файловой системой и файлами » Как дописать текст в файл?

Страниц (1): [1]
 

1. Ehonod - 11 Октября, 2013 - 17:43:30 - перейти к сообщению
Здравствуйте.

Уверен что кто-нибудь уже про это спрашивал, но через поиск я ничего не нашел, поэтому и создаю тему.

Мне нужно вписать некую строку в файл, в конкретную позицию.

Код ниже.
На словах:
открываю файл с a+
через fseek указываю смещение от начала файла
делаю запись
закрываю.

Проблема в том, что при режиме a+, курсор во время записи всегда попадает в хвост и на fseek ему абсолютно плевать.

Если же использовать метод r+, то fseek работает, НО текст который я дописываю стирает существующий.

Как решается эта проблема?

Заранее спасибо.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3.  
  4. $file = fopen ('test.php', 'a+');
  5.  
  6. $addText ='V--here---V';
  7.  
  8. fseek($file, 350, 0);
  9.  
  10. $write = fwrite($file, $addText);
  11.  
  12. fclose($file); 
  13.  
2. Мелкий - 11 Октября, 2013 - 18:23:53 - перейти к сообщению
Во-первых, мануал читать не пробовали?
http://www.php.net/manual/ru/function.fseek.php
Цитата:
Если файл открыт в режиме "записи в конец" (a или a+), любые записываемые в файл данные будут записываться в конец, вне зависимости от позиции файла, а результат вызова fseek() будет не определен.


Во-вторых:
fwrite - низкоуровневая функция. Тупо пишет указанное с указанной позиции. Её не волнует, было ли там что-нибудь.
Чтобы добавить что-то в любую позицию, кроме как в конец файла - надо встать в позицию, в которую надо писать, прочитать всё дальнейшее, записать своё дополнение, записать всё, что прочитали чуть раньше.
3. Ehonod - 11 Октября, 2013 - 18:47:01 - перейти к сообщению
Мелкий пишет:
Во-первых, мануал читать не пробовали?


Пробовал, вполне успешно, оттуда я и знаю про:

Мелкий пишет:
Если файл открыт в режиме "записи в конец" (a или a+), любые записываемые в файл данные будут записываться в конец, вне зависимости от позиции файла, а результат вызова fseek() будет не определен.


Однако про то, что
Мелкий пишет:
fwrite - низкоуровневая функция.
и моя задача решается по средством бубна, хоть и крохотного, но все же бубна, уверен не был. Поэтому и спросил.

Тот способ о котором Вы написали я уже рассматривал как вариант, но т.к. в том, что мне нужно проделать нет ничего экстра ординарного, был уверен что есть вариант проще, например встроенная функция.

Спасибо за помощь.
4. Мелкий - 11 Октября, 2013 - 20:25:30 - перейти к сообщению
Тогда прошу простить за излишнюю резкость.

Нет, вариант попроще - это не писать в середину файла.

 

Powered by ExBB FM 1.0 RC1