| |
|
|
| | С файлами начал работать недавно. Можно ли найти в файле известное мне выражение и заменить его на другое чтобы не записывать файл занаво от начала и до конца? Если можно, то как? | |
| |
|
|
| |
|
|
| |
для: 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);
|
Если файл большой, то нужно читать по частям и искать в них с учётом того, что можно ненароком разрубить заменяемую часть так, что одна половина заменяемой строки останется в одной части, другая в другой. | |
| |
|
|
| |
|
|
| |
для: Саня
(03.10.2006 в 15:39)
| | | А если к примеру у меня файл выглядит следующим образом
1 значение/2 значение/3 значение/4 значение/<br>1 значение/2 значение/...
Мне нужно заменить везде только 4 значение. Как это осуществить?
И еще одно. Что нужно записывать в файл, чтобы было не <br> а простой разрыв строки, т. е. каждая строчка была бы отдельна? | |
| |
|
|
| |
|
|
| |
для: Diman
(03.10.2006 в 15:46)
| | | Читаете весь файл в строку, далее функцией str_replace() заменяете "<br>" на "\r\n", а "значение 4" на нужное. | |
| |
|
|
| |
 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);
}
?>
|
| |
| |
|
|
| |
|
|
| |
для: Diman
(05.10.2006 в 07:28)
| | | Вообще-то функция str_replace() возвращает модифицированную строку, и не изменяет исходную. И закомментированнй кусок кода правильный, но нужно написать так: $content = str_replace("/1/", "/".$k."/", $content);
А вы не заметили ошибки в моём коде и передрали всё подчистую, даже не попытавшись разобраться. | |
| |
|
|
| |
|
|
| |
для: Саня
(05.10.2006 в 10:58)
| | | Абсолютно никакого эфекта. При использовании параметра w файл вообще становится пустым. Если использовать a+, то он заменяет (использую свою вариант), то записывает измененные данные естественно в конце файла. А вот как сделать чтобы у меня заменялось в строке нужное мне значение? Мне кто-нибудь поможет или нет с этим, а? | |
| |
|
|
| |
|
|
| |
для: 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"
|
Работает идеально. | |
| |
|
|
| |
|
|
| |
для: Саня
(05.10.2006 в 19:44)
| | | А если файл больше 8 мб?
Больше чем оперативка выделенная скрипту.. | |
| |
|
|
| |
|
|
| |
для: valenok
(05.10.2006 в 20:33)
| | | Если больше - прочитай второй пост в теме. | |
| |
|
|