Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поиск в файле
 
 автор: Diman   (03.10.2006 в 15:24)   письмо автору
 
 

С файлами начал работать недавно. Можно ли найти в файле известное мне выражение и заменить его на другое чтобы не записывать файл занаво от начала и до конца? Если можно, то как?

   
 
 автор: Саня   (03.10.2006 в 15:39)   письмо автору
 
   для: Diman   (03.10.2006 в 15:24)
 

Если файл небольшой (меньше чем указано в директиве memory_limit файла php.ini), то можно прочесть весь файл в строку а затем заменить значение:
<?
$content 
file_get_contents("file.txt");
str_replace("значение 1""значение 2"$content);
$fp fopen("file.txt""w");
fwrite($fp$content);
fclose($fp);

Если файл большой, то нужно читать по частям и искать в них с учётом того, что можно ненароком разрубить заменяемую часть так, что одна половина заменяемой строки останется в одной части, другая в другой.

   
 
 автор: Diman   (03.10.2006 в 15:46)   письмо автору
 
   для: Саня   (03.10.2006 в 15:39)
 

А если к примеру у меня файл выглядит следующим образом
1 значение/2 значение/3 значение/4 значение/<br>1 значение/2 значение/...

Мне нужно заменить везде только 4 значение. Как это осуществить?
И еще одно. Что нужно записывать в файл, чтобы было не <br> а простой разрыв строки, т. е. каждая строчка была бы отдельна?

   
 
 автор: Саня   (03.10.2006 в 15:51)   письмо автору
 
   для: Diman   (03.10.2006 в 15:46)
 

Читаете весь файл в строку, далее функцией str_replace() заменяете "<br>" на "\r\n", а "значение 4" на нужное.

   
 
 автор: Diman   (05.10.2006 в 07:28)   письмо автору
997 байт
 
   для: Саня   (03.10.2006 в 15:51)
 

Ничего не помогает. Неужели нельзя найти выражение в файле и его заменить? Есть конечно у меня один вариант, но это "через задницу": открыть файл для чтения, считать из него строки, причем каждую строку загонять в массив, закрыть этот файл, снова открыть этот файл для записи с параметром 'w' и записать туду весь этот массив. Хочеться по простому. Помогите пожалуйста.


<?php
if (!empty($_POST['ok']))
{
   
$i=1
   foreach(
$kol as $k)
   {
       
$k=$_POST['Kol'.$i]; 
       
$j=$i
      
      
/*
      $content = file_get_contents('admin/file/'.$name_file);
      str_replace("/1/","/".$k."/", $content);
      $fp = fopen('admin/file/'.$name_file, "w");
      fwrite($fp, $content);
      fclose($fp);
      */

      
$content file_get_contents($name_file);
      
$fp=fopen('admin/file/'.$name_file,"w") or die($php_errormsg);
      while(
$s=fgets($fp,1024))
       {
         if (
$j==$i)
         {

           
$s=str_replace("/1/","/".$k."/"$s);
           
fwrite($fp$s);
         }
         
$j++;
       }

       echo 
"kol[".$i."]=".$k."<br>";
       
$i++;
   }
   
//fclose($fp);
}

?>

   
 
 автор: Саня   (05.10.2006 в 10:58)   письмо автору
 
   для: Diman   (05.10.2006 в 07:28)
 

Вообще-то функция str_replace() возвращает модифицированную строку, и не изменяет исходную. И закомментированнй кусок кода правильный, но нужно написать так: $content = str_replace("/1/", "/".$k."/", $content);
А вы не заметили ошибки в моём коде и передрали всё подчистую, даже не попытавшись разобраться.

   
 
 автор: Diman   (05.10.2006 в 13:07)   письмо автору
 
   для: Саня   (05.10.2006 в 10:58)
 

Абсолютно никакого эфекта. При использовании параметра w файл вообще становится пустым. Если использовать a+, то он заменяет (использую свою вариант), то записывает измененные данные естественно в конце файла. А вот как сделать чтобы у меня заменялось в строке нужное мне значение? Мне кто-нибудь поможет или нет с этим, а?

   
 
 автор: Саня   (05.10.2006 в 19:44)   письмо автору
 
   для: Diman   (05.10.2006 в 13:07)
 

<?
// в файле записана строка: "text test, best chess"
$content file_get_contents("doc.txt"); 
$content str_replace("best""guest"$content); 
$fp fopen("doc.txt""w"); 
fwrite($fp$content); 
fclose($fp);
// в файле теперь - "text test, guest chess"

Работает идеально.

   
 
 автор: valenok   (05.10.2006 в 20:33)   письмо автору
 
   для: Саня   (05.10.2006 в 19:44)
 

А если файл больше 8 мб?
Больше чем оперативка выделенная скрипту..

   
 
 автор: Саня   (06.10.2006 в 01:59)   письмо автору
 
   для: valenok   (05.10.2006 в 20:33)
 

Если больше - прочитай второй пост в теме.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования