
| Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
![]() |
||
как в PHP сделать так, чтобы из одного файла можно было заменить/удалить строчку
|
||
| Философия, технологии, алгоритмы! |
![]() |
|
|
Опции темы |
|
|
#1 |
|
Форумец
Сообщений: 37
Регистрация: 12.04.2004
|
как в PHP сделать так, чтобы из одного файла можно было заменить/удалить строчку
Люди, помогите !
Скажите, пожалуйста, как в PHP сделать так, чтобы из одного файла можно было заменить/удалить строчку в другом файле. Например, у меня есть два PHP файла, один называется test1.php, а второй test2.php. Мне надо так, чтобы файл test1.php заменял или удалял одну строчку в файле test2.php. Заранее благодарна Дарья. |
|
|
|
|
#3 |
|
джиксеровод
Сообщений: 1,868
Регистрация: 25.11.2003
|
function el($from, $what, $to = null)
{ if(!($ad = file($from))) return FALSE; if(is_array($what)) foreach($what as $key=>$val) $ad[$key] = $val; else $ad[$what] = ""; $t = fopen($to?$to:$from, "w+"); fputs($t, implode("",$ad)); fclose($t); return TRUE; } /// /// tests /// el("test2.php", 1); //было стало //0 0 //1 2 //2 3 //3 4 //4 el("test2.php",array("-0-\n", "-1-\n")); //было стало //0 -0- //1 -1- //2 2 //3 3 //4 4 el("test2.php",array(1 => "-1-\n", 3 => "-3-\n")); //было стало //0 0 //1 -1- //2 2 //3 -3- //4 4 el("test2.php",array(2 => "-2-\n", "-3-\n")); //было стало //0 0 //1 1 //2 -2- //3 -3- //4 4 el("test2.php",array(2 => "", 4=>"")); //было стало //0 0 //1 1 //2 3 //3 //4 Заранее идите в жопу, umka. |
|
|
|
|
#4 |
|
Форумец
Сообщений: 1,581
Регистрация: 11.04.2003
|
Daria ты не уточнила, нужно ли тебе изменять сам файл, или же нужно изменять вывод на экран, не изменяя сам файл. исходя из того, что имя второго файла заканчивается на Php, я так понял что вариант всё-таки первый
![]() вот тебе скрипт test1.php, который будет открывать файл test2.php, искать строку $s_match и заменять её на $s_replace [php] <?php //строка для поиска: $s_match = "blablabla"; //чем заменяем: $s_replace = "yadayada"; //открываем файлы. tempfile - для временного переноса данных $filename1 = "./test2.php"; $filename2 = "./tempfile.php"; $h1 = fopen($filename1, "r"); $h2 = fopen($filename2, "w"); //если файл h1 удалось открыть if($h1) { //пока не дошли до конца файла while (!feof($h1)) { // читаем файл по одной линии и сохраняем в буфере $buffer = fgets($h1, 4096); //проверяем буфер на наличие строки, которую ищем, и если нашли, заменяем: $buffer = str_replace($s_match, $s_replace, $buffer); //пишем буфер в tempfile, добавляем переход на новую строку вв конце каждой строки: fwrite($h2, $buffer ."\n") } //закончили читать-писать, закрываем: fclose($h1); fclose($h2); } //удаляем первый файл unlink($filename1); //переименовываем второй: rename($filename2, $filename1); //вуаля echo "усё у порядке, шеу"; die(); ?> [/php] |
|
|
|
|
#5 |
|
фотограф
Сообщений: 2,738
Регистрация: 20.10.2004
|
yujanin Это немножко другая задача, но твой алгоритм далек от идеального... Почему бы просто не прочитать весь файл сразу в одну строчку, потом замнена и переписать файл?... ИМХО - гораздо быстрее, да и код меньше...
|
|
|
|
|
#8 | |
|
Форумец
Сообщений: 1,581
Регистрация: 11.04.2003
|
Цитата:
[php] <?php //строка для поиска: $s_match = "blablabla"; //чем заменяем: $s_replace = "yadayada"; //открываем файлы. tempfile - для временного переноса данных $filename1 = "./test2.php"; $h1 = fopen($filename1, "r"); //если файл h1 удалось открыть if($h1) { //пока не дошли до конца файла while (!feof($h1)) { // читаем файл по одной линии и сохраняем в буфере $buffer = fgets($h1, 4096); //проверяем буфер на наличие строки, которую ищем, и если нашли, заменяем, и выводим на экран: $buffer= str_replace($s_match, $s_replace, $buffer); echo $buffer; } //закончили читать-писать, закрываем: fclose($h1); } //вуаля echo "<br>усё у порядке, шеу"; die(); ?> [/php] |
|
|
|
|
|
#9 |
|
Форумец
Сообщений: 37
Регистрация: 12.04.2004
|
yujanin, у меня ничего не получается, возможно я допустила ошибку, я новичок в этом деле. Пожалуйста, проверьте мой скрипт:
var $test.php; var $h1; <? //строка для поиска $s_match = "blablabla"; //строка для замены $s_replace = "yadayada"; //открываем файлы. tempfile - для временного переноса данных $test.php = "./test1.php"; $h1 = fopen($test.php, "r"); // если файл h1 удалось открыть if($h1) { // пока не дошли до конца файла while (!feof($h1)) { // читаем файл по одной линии и сохраняем в буфере $buffer = fgets($h1, 4096); // проверяем буфер на наличие строки, которую ищем, и если нашли, то заменяем $buffer= str_replace($s_match, $s_replace, $buffer); echo $buffer; } //закончили читать-писать, закрываем: fclose($h1); } // сообщение на мониторе echo "замена произведена!"; die(); ?> А когда я скрипт запускаю в браузере, то ошибка такая: Parse error: parse error in z:\home\localhost\www\test.php on line 12 |
|
|
|
|
#14 |
|
Форумец
Сообщений: 37
Регистрация: 12.04.2004
|
Вот:
1. 2. $test1.php 3. 4. <? 5. //строка для поиска 6. $s_match = "blablabla"; 7. //строка для замены 8. $s_replace = "yadayada"; 9. 10. //открываем файлы. tempfile - для временного переноса данных 12. $filename1 = "./test1.php"; 13. $h1 = fopen($test1.php, "r"); 14. 15. // если файл h1 удалось открыть 16. if($h1) { 17. // пока не дошли до конца файла 18. while (!feof($h1)) { 19. // читаем файл по одной линии и сохраняем в буфере 20. $buffer = fgets($h1, 4096); 21. // проверяем буфер на наличие строки, которую ищем, и если нашли, то заменяем 22. $buffer= str_replace($s_match, $s_replace, $buffer); 23. echo $buffer; 24. 25. } 26. //закончили читать-писать, закрываем: 27. fclose($h1); 28. } 29. 30. // сообщение на мониторе 31. echo "замена произведена!"; 32. die(); 33. ?> |
|
|
|
|
#15 |
|
фотограф
Сообщений: 2,738
Регистрация: 20.10.2004
|
Daria
Замени 12 и 13 строки на: $h1 = fopen( "test1.php", "r"); + переложи файл test1.php в эту же папку, что и файл test.php У тебя в имени переменной была точка - так нельзя... Сходи на сайт http://phpfaq.ru/ мля.... [php] <?php //строка для поиска $s_match = "blablabla"; //строка для замены $s_replace = "yadayada"; // Открываем файл, text.txt, лежащий в этой же папке.... $str = file_get_contents( "text.txt" ); echo str_replace( $s_match, $s_replace, $str ); ?> [/php] |
|
|
|
|
#16 |
|
Форумец
Сообщений: 37
Регистрация: 12.04.2004
|
loshadka, я буквально повторила ваш скрипт:
<?php //строка для поиска $s_match = "blablabla"; //строка для замены $s_replace = "yadayada"; // Открываем файл, test.php, лежащий в этой же папке.... $str = file_get_contents( "test.php" ); echo str_replace( $s_match, $s_replace, $str ); ?> Ошибки все пропали, но строчки скрипт всё равно не заменяет. |
|
|
|
|
#20 | |
|
фотограф
Сообщений: 2,738
Регистрация: 20.10.2004
|
yujanin, Daria
Цитата:
|
|
|
|
|
|
#21 |
|
Форумец
Сообщений: 37
Регистрация: 12.04.2004
|
Большое спасибо, у меня всё получилось.
Но теперь, у меня другая проблема, мне надо написать скрипт, который бы менял картинки, одну на другую. Например, у сайта две версии, русская и английская и мне надо чтобы, если была бы выбрана русская версия, то загружалась одна картинка, а если английская, то другая. Помогите, пожалуйста, я вас очень прошу. |
|
|
|
|
#22 |
|
фотограф
Сообщений: 2,738
Регистрация: 20.10.2004
|
Daria
Используй [php] if( условие ) { выражение 1 } else { выражение 2 } [/php] А вообще - сходи на сайт phpclub.ru - там довольно много неплохих статей, написаны как раз для новичков, еще там очень хороший форум, токо прежде чем что-то спросить - используй поиск... |
|
|