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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как дописать текст в файл?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Ehonod
Отправлено: 11 Октября, 2013 - 17:43:30
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Март 2013  


Помог: 0 раз(а)




Здравствуйте.

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

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

Код ниже.
На словах:
открываю файл с 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.  
 
 Top
Мелкий Супермодератор
Отправлено: 11 Октября, 2013 - 18:23:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Во-первых, мануал читать не пробовали?
http://www.php.net/manual/ru/function.fseek.php
Цитата:
Если файл открыт в режиме "записи в конец" (a или a+), любые записываемые в файл данные будут записываться в конец, вне зависимости от позиции файла, а результат вызова fseek() будет не определен.


Во-вторых:
fwrite - низкоуровневая функция. Тупо пишет указанное с указанной позиции. Её не волнует, было ли там что-нибудь.
Чтобы добавить что-то в любую позицию, кроме как в конец файла - надо встать в позицию, в которую надо писать, прочитать всё дальнейшее, записать своё дополнение, записать всё, что прочитали чуть раньше.


-----
PostgreSQL DBA
 
 Top
Ehonod
Отправлено: 11 Октября, 2013 - 18:47:01
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Март 2013  


Помог: 0 раз(а)




Мелкий пишет:
Во-первых, мануал читать не пробовали?


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

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


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

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

Спасибо за помощь.
 
 Top
Мелкий Супермодератор
Отправлено: 11 Октября, 2013 - 20:25:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Тогда прошу простить за излишнюю резкость.

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


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB