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. Кубик - 23 Марта, 2017 - 21:23:25 - перейти к сообщению
Помогите разобраться:
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.  
2. Мелкий - 23 Марта, 2017 - 22:00:45 - перейти к сообщению
А где есть что-нибудь, из-за чего файл должен изменяться?
3. Кубик - 23 Марта, 2017 - 22:19:56 - перейти к сообщению
substr_replace($fgets, '7777', -2);

разве не должен его менять ?
4. teleoperator27 - 23 Марта, 2017 - 23:54:35 - перейти к сообщению
Кубик пишет:
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);
5. Кубик - 24 Марта, 2017 - 00:25:39 - перейти к сообщению
Теперь понятно, думал заменить это и есть сразу записать.
А надо:
Открыть, прочитать, заменить, записать и закрыть.
(Добавление)
Другая ошибка появилась.
Текст в файле "5555"
Перезаписаться должны 2 символа с конца, должно получится "557777"
Как выводит var_dump($a) <pre>string(6) "557777"
Но в файле получается "5555557777"

Почему ?
6. Мелкий - 24 Марта, 2017 - 10:18:57 - перейти к сообщению
Потому что курсор.
r+ открывает файл в позиции 0.
fgets что-то читает и смещает курсор на конец прочтённого куска.
Дальше вы никак курсор не передвигаете.
fwrite пишет начиная с позиции курсора. Вот и получился append вместо перезаписи.

Вероятно, вам нужен ftruncate.
Ну или просто file_get_contents + file_put_contents
7. Кубик - 24 Марта, 2017 - 14:37:21 - перейти к сообщению
Спасибо! Сделал так:

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.  

 

Powered by ExBB FM 1.0 RC1