PHP.SU

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


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

> Описание: Работа с текстом в файле.
Кубик
Отправлено: 23 Марта, 2017 - 21:23:25
Post Id


Новичок


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


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




Помогите разобраться:
var_dump выдаёт правильный результат, но сам текст в файле не перезаписывается.

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.     $file = "file.txt";
  4.     $fh = fopen($file, 'r+');
  5.     $fgets = fgets($fh);
  6.     $a = substr_replace($fgets, '7777', -2);
  7.    
  8.     echo '<pre>'; var_dump($a); echo '</pre>';
  9.  
  10.  
 
 Top
Мелкий Супермодератор
Отправлено: 23 Марта, 2017 - 22:00:45
Post Id



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


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


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




А где есть что-нибудь, из-за чего файл должен изменяться?


-----
PostgreSQL DBA
 
 Top
Кубик
Отправлено: 23 Марта, 2017 - 22:19:56
Post Id


Новичок


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


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




substr_replace($fgets, '7777', -2);

разве не должен его менять ?

(Отредактировано автором: 23 Марта, 2017 - 23:33:08)

 
 Top
teleoperator27
Отправлено: 23 Марта, 2017 - 23:54:35
Post Id



Частый гость


Покинул форум
Сообщений всего: 246
Дата рег-ции: Янв. 2017  


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




Кубик пишет:
substr_replace($fgets, '7777', -2); разве не должен его менять ?
Это строку вы поменяли, а сама запись измененой строки в файл то где?

PHP:
скопировать код в буфер обмена
  1. $file = "file.txt";
  2. $fh   = fopen($file, 'r+');
  3. $fgets= fgets($fh);
  4. $a    = substr_replace($fgets, '7777', - 2);
  5. fwrite($fh, $a);
  6. fclose($fh);
 
My status
 Top
Кубик
Отправлено: 24 Марта, 2017 - 00:25:39
Post Id


Новичок


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


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




Теперь понятно, думал заменить это и есть сразу записать.
А надо:
Открыть, прочитать, заменить, записать и закрыть.
(Добавление)
Другая ошибка появилась.
Текст в файле "5555"
Перезаписаться должны 2 символа с конца, должно получится "557777"
Как выводит var_dump($a) <pre>string(6) "557777"
Но в файле получается "5555557777"

Почему ?
 
 Top
Мелкий Супермодератор
Отправлено: 24 Марта, 2017 - 10:18:57
Post Id



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


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


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




Потому что курсор.
r+ открывает файл в позиции 0.
fgets что-то читает и смещает курсор на конец прочтённого куска.
Дальше вы никак курсор не передвигаете.
fwrite пишет начиная с позиции курсора. Вот и получился append вместо перезаписи.

Вероятно, вам нужен ftruncate.
Ну или просто file_get_contents + file_put_contents


-----
PostgreSQL DBA
 
 Top
Кубик
Отправлено: 24 Марта, 2017 - 14:37:21
Post Id


Новичок


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


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




Спасибо! Сделал так:

PHP:
скопировать код в буфер обмена
  1.  
  2.     $file = ("file.txt");
  3.     $fopen   = fopen($file, 'r+');
  4.     $contents = file_get_contents($fopen);
  5.     $substr    = substr_replace($contents, '7777', -2);
  6.     file_put_contents($file, $substr);
  7.     fclose($fopen);
  8.  

(Отредактировано автором: 24 Марта, 2017 - 17:48:40)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB