|
|
|
| Сразу к вопросу: Как так сделать, чтобы скрипт открывал файл, потом искал в нем определенную строку, и после найденной строки в файле, вписывал другую строку и сохранял изменения. Сам пробовал, не получается. Кто знает помогите плз. | |
|
|
|
|
|
|
|
для: FireTiger
(10.01.2008 в 11:43)
| | покажите код того что сами наваяли поможем... | |
|
|
|
|
|
|
|
для: KPETuH
(10.01.2008 в 12:14)
| |
<?php
$find_str = "$a = 'aaaaaa';";
$str_paste = "'/r/n'.$b = 'bbbbbb';";
$strlen_find_str = strlen($find_str);
$editfile = fopen('editfile.php', "wb");
// Здесь как-то вставить $str_paste после $find_str и записать все остальное содержимое файла после $str_paste и все записать в строку $result
fwrite($editfile, $result);
fclose($editfile);
?>
|
Просто не могу придумать как. Ну и содержимое файла editfile.php
<?php
$d = 'dddddd';
$a = 'aaaaaa';
$x = 'xxxxxx';
?>
|
| |
|
|
|
|
|
|
|
для: FireTiger
(10.01.2008 в 12:49)
| |
<?php
$file = file_get_contents("editfile.php");
$fp = fopen("editfile.php", "w");
fwrite($fp, str_replace($a, $a."и что-то после нее...", $file));
fclose($fp);
?>
|
| |
|
|
|
|
|
|
|
для: bronenos
(10.01.2008 в 13:24)
| | Спасибо, сейчас попробую | |
|
|
|
|
|
|
|
для: bronenos
(10.01.2008 в 13:24)
| | Пишет что переменая не определена и не записывает... Что делать? | |
|
|
|
|
|
|
|
для: FireTiger
(10.01.2008 в 13:38)
| | $a - это искомый отрезок, если вы не поняли, а не записывает - права поставьте 777 | |
|
|
|
|
|
|
|
для: bronenos
(10.01.2008 в 14:11)
| | Да я понял что $a - переменная из файла editfile.php, но все равно не записывает, у меня локалка, там с правами все ок. | |
|
|
|
|
|
|
|
для: FireTiger
(10.01.2008 в 14:18)
| |
<?php
$file = file_get_contents("editfile.php");
$fp = fopen("editfile.php", "w");
// $a - то что найти нужно, она и не будет определена!!!
fwrite($fp, str_replace("$a", "$a \nи что-то после нее...", $file));
fclose($fp);
?>
|
Лучше preg_replace, ereg_replace
<?php
$file = file_get_contents("editfile.php");
$fp = fopen("editfile.php", "w");
// $a - то что найти нужно, она и не будет определена!!!
fwrite($fp, preg_replace("/(\$a.*)\s*/si", "\\1 \n и что-то после нее...", $file));
fclose($fp);
?>
|
| |
|
|
|
|
|
|
|
для: mihdan
(10.01.2008 в 15:11)
| | Излишний мудреж 0.о
UPD: блин, кажется я сначала прочитал непрально то что нужно автору, mihdan, извиняюсь | |
|
|
|
|
|
|
|
для: mihdan
(10.01.2008 в 15:11)
| | Рег. выражение я бы изменил на
"/".preg_quote($find_str).".*/i"
| убрал модификатор s, ибо он вроде как тут не нужен.
А "\\1 \n и что-то после нее...", наверное, придется заменить на "\\0 и что-то после нее... \r\n" | |
|
|
|
|
|
|
|
для: kasmanaft
(10.01.2008 в 15:29)
| | bronenos, не страшно сам так часто ошибаюсь
kasmanaft, \s - пробельные символы
А в целом согласен - перемудрили
Можно прочитать файл с помощью file()
При помощи in_array() найти индекс массива с искомой строкой - заменить его на новый
Склеить строку при помощи implode()
Записать все обратно fwrite() | |
|
|
|
|
|
|
|
для: mihdan
(10.01.2008 в 15:34)
| | Я тоже малость ошибся.. В общем, модификатор s надо убрать в любом случае, а потом 2 варианта:
либо оставить \s* и replacement заменить на "\\0 и что-то после нее... \r\n"
либо убрать \s*, но replacement не трогать: "\\0 \r\n и что-то после нее..." (я бы сделал так)
(\r\n в разным местах будет)
Не проверял, но вроде бы должно работать так.
А насчет "перемудрили" я вот что думаю:
Если известно точно, что в файле есть строка "$a = 'aaaaaa';" (то есть нет ни пробелов слева/справа, ни других знаков), то можно обойтись без рег. выражений.
А с ними, на мой взгляд, удобнее. | |
|
|
|
|
|
|
|
для: kasmanaft
(10.01.2008 в 15:53)
| | а зачем вообще рег. выражения использовать? мне нужно конкретно найти точно строку и после нее вписать. То есть в конченом результате я хочу чтобы после всех действий получилоь так:
<?php
$d = 'dddddd';
$a = 'aaaaaa';
$b = 'bbbbbb';
$x = 'xxxxxx';
?>
|
Как я понял что вы подумали, что я хочу в значение переменной $a дописать, нет, мне нужно вписать определение новой переменной $b после определения переменной $a. Но также скрипт должен например просто строку вида условия искать
if(aaa){
какие-то действия
}
|
и в файл записывать новый данные, например тоже типа цикла строку вставить. Может я неочень хорошо выразился... | |
|
|
|
|
|
|
|
для: FireTiger
(10.01.2008 в 17:38)
| | Вроде получилось... Но скрипт не может искать строку содержащую выражения php. Как так сделать, чтобы в переменной можно было записать код вида:
<?php
$text = "
if($a = 15){ echo "какой-то текст"; }
while(условие){
тело цикла
}
";
?>
|
Видите, ошибка получается... Как сделать?
Позже добавил:
Ой, спросил у вас, но сам не попробовал, у меня получилось... Если кому надо - <<<HTML текст всякий HTML; | |
|
|
|
|
|
|
|
для: FireTiger
(10.01.2008 в 17:58)
| | Все, справился, огромное всем спасибо за помощь! Вот проверьте готовый вариант:
<?php
$file = file_get_contents("editfile.php");
$paste_str = <<<HTML
\n \$b = 'bbbbbb';
HTML;
$find_str = <<<HTML
\$a = 'aaaaaa';
HTML;
$fp = fopen("editfile.php", "w");
fwrite($fp, str_replace($find_str, $find_str.$paste_str, $file));
fclose($fp);
?>
|
Все хорошо? Или что-то плохо? | |
|
|
|
|
|
|
|
для: FireTiger
(10.01.2008 в 18:33)
| | Норма | |
|
|
|
|
|
|
|
для: mihdan
(11.01.2008 в 15:47)
| | Попытался вставить этот скрипт в отдельный файл, как класс для добавления, но вот возникают вопросы. Во-первых можете проверить код:
class install {
var $file = null;
var $edit_file = null;
var $error_open = null;
var $error_find = null;
function action($action,$file,$str_find,$str_act) {
if($action == 'add'){
for($i = 0; $i <= count($str_find); $i++){
if(!file_exists($file) || $file == '') { $this->error_open[$file] = "Невозможно загрузить файл: ". $file; return false;}
if(!($error_open)) {
$this->edit_file = file_get_contents($file);
$fp = fopen($file, "w");
$find_pos = strpos($file,$str_find[$i]);
if(!$find_pos) { $this->error_find[$file] = "Не удается найти строку: ". $str_find[$i]; }
if(!($error_find)){
$result = str_replace($str_find[$i], $str_find[$i].$str_act[$i], $this->edit_file);
fwrite($fp, $result);
unset($result);
}
}
}
}
|
и как он работает:
<?
require_once('installtws.class.php');
$install = new install;
$find_add[0] = '
aaaaaa
';
$add[0] = '
bbbbbb
';
$install->action('add','files/options.php',$find_add,$add);
?>
|
Почему в массив ошибок ненайденных строк не запичывается сама строка? Почему ее нельзя вывести и т.п.?
И еще, сам скрипт не тяжелый?
Можно это выгодней реализовать? | |
|
|
|