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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Замена строки во всех файлах директории с неограниченным числом вложенных поддиректорий

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
idimka
Отправлено: 06 Июня, 2007 - 01:41:13
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июнь 2007  


Помог: 0 раз(а)




Ребят, я новичок, поэтому такие вопросы:
В статье даны 2 кода.
Как код вызова функции scan_dir(), вызывает эту самую функцию?
Вернее я вообще не понимаю как связаны эти 2 кода. И в общем, у меня ничего не получилось... Не получилось произвести замену в файлах директории.
Я из 2 кода взял эти строчки
PHP:
скопировать код в буфер обмена
  1.  
  2. $text = '$text'; // Искомая строка
  3. $retext = '$retext'; // Строка замены
  4. $dirname = "Имя корневой директории, например .";
  5.  


и скопировал в первый код, заменив конечно $text и $retext на нужные мне словосочетания. $dirname превратил в
И у меня ничего не получилось. Никакой ошибки не было.
 
 Top
evgenijj
Отправлено: 06 Июня, 2007 - 08:47:28
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Во-первых, скрипт содержит ошибку: надо заменить строку
PHP:
скопировать код в буфер обмена
  1.  
  2.     // Перезаписываем файл
  3.  

на
PHP:
скопировать код в буфер обмена
  1.  
  2.     // Перезаписываем файл
  3.     file_put_contents($dirname."/".$file, $content);
  4.  

Во-вторых, указывать в качестве $dirname текущую директорию - дурная идея, т.к. сам скрипт содержит строку, которую надо заменить. Соответственно, файл скрипта будет перезаписан.

В-третьих, для того, чтобы PHP показывал ошибки, выстави в php.ini
display_errors = On
error_reporting = E_ALL

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4.   $text = 'Что заменяем'; // Искомая строка
  5.   $retext = 'На что заменяем'; // Строка замены
  6.   $dirname = "./temp";
  7.   scan_dir($dirname);  // Вызов рекурсивной функции
  8.  
  9.   //////////////////////////////////////////////////////////
  10.   // Рекурсивная функция - спускаемся вниз по каталогу
  11.   //////////////////////////////////////////////////////////
  12.  
  13.   function scan_dir($dirname)
  14.   {
  15.     // Объявляем переменные замены глобальными
  16.     GLOBAL $text, $retext;
  17.     // Открываем текущую директорию
  18.     $dir = opendir($dirname);
  19.     // Читаем в цикле директорию
  20.     while (($file = readdir($dir)) !== false)
  21.     {
  22.       // Если файл обрабатываем его содержимое
  23.       if($file != "." && $file != "..")
  24.       {
  25.         // Если имеем дело с файлом - производим в нём замену
  26.         if(is_file($dirname."/".$file))
  27.         {
  28.           // Читаем содержимое файла
  29.           $content = file_get_contents($dirname."/".$file);
  30.           // Осуществляем замену
  31.           $content = str_replace($text, $retext, $content);
  32.           // Перезаписываем файл
  33.           file_put_contents($dirname."/".$file, $content);
  34.         }
  35.         // Если перед нами директория, вызываем рекурсивно
  36.         // функцию scan_dir
  37.         if(is_dir($dirname."/".$file))
  38.         {
  39.           echo $dirname."/".$file."<br/>";
  40.           scan_dir($dirname."/".$file);
  41.         }
  42.       }
  43.     }
  44.     // Закрываем директорию
  45.     closedir($dir);
  46.   }
  47.  
  48. ?>
  49.  
 
 Top
idimka
Отправлено: 06 Июня, 2007 - 12:18:55
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июнь 2007  


Помог: 0 раз(а)




Выдает ошибку:
Fatal error: Call to undefined function: file_put_contents() in z:/home/test1.ru/www/g/zamena.php on line 32

В строке 32 находится эта строчка:


Попробовал с этой

тоже ошибка.

В php.ini у меня все стояло как надо. И действительно было глупым делать замену в текущей директории. Спасибо.

И почему блин, я ставлю на этом форуме тег [code], а он не работает? Что-то у меня все через ж...

И что за интересная функция file_put_contents ()? Искал в справочнике, не нашел.
Подумал, что может ошибка и надо писать file_get_contents (), но тогда вообще ничего не произошло. Да и точно это не file_get_contents ()... Здесь во второй раз она не к месту вроде...
 
 Top
evgenijj
Отправлено: 06 Июня, 2007 - 12:36:27
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Функции file_put_contents() и file_get_contents() доступны в PHP 4 >= 4.3.0, PHP 5. По видимому, у тебя более старая версия.

Тег [code] на этом форуме не работает - используй [php]
 
 Top
idimka
Отправлено: 06 Июня, 2007 - 12:56:32
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июнь 2007  


Помог: 0 раз(а)




Что странно, но у меня PHP Version 4.4.4
Попробую обновить. И посмотреть результат.
 
 Top
evgenijj
Отправлено: 06 Июня, 2007 - 13:49:38
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




idimka пишет:
Что странно, но у меня PHP Version 4.4.4
Попробую обновить. И посмотреть результат.

Судя по строке
z:/home/test1.ru/www/g/zamena.php
у тебя стоит "Джентльменский набор Web-разработчика" http://www[dot]denwer[dot]ru/ Возможно, там урезанная версия PHP, которая не поддерживает некоторые функции. Но это только предположение...
 
 Top
idimka
Отправлено: 06 Июня, 2007 - 16:02:21
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июнь 2007  


Помог: 0 раз(а)




Да, у меня стоит джентельменский набор. Урезана php вряд ли... А могут настройки php.ini влиять на не срабатывание функции file_put_contents()?
 
 Top
evgenijj
Отправлено: 06 Июня, 2007 - 16:07:06
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




idimka пишет:
Урезанная php вряд ли...

Ты общался с Котеровым? Он тебе это лично сказал?
 
 Top
idimka
Отправлено: 07 Июня, 2007 - 03:23:57
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июнь 2007  


Помог: 0 раз(а)




Оказалось у меня полсеняя версия этого денвера, так что спрошу на их форуме.
 
 Top
evgenijj
Отправлено: 07 Июня, 2007 - 08:51:43
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




idimka пишет:
Оказалось у меня посленяя версия этого денвера, так что спрошу на их форуме.

Посмотрел сегодня на php.net
file_get_contents() доступна для PHP 4 >= 4.3.0, PHP 5
file_put_contents() доступна для PHP 5
Я почему-то думал, что эти функции появились в PHP одновременно. Так что первое предположение было верным - просто у тебя старая версия PHP.

P.S. Кстати, Денвер позволяет устанавливать пакеты расширений, в том числе и PHP5 http://www[dot]denwer[dot]ru/packages/php5[dot]html Только PHP5 ставится в виде внешней CGI-программы, а не в виде модуля Apache, как PHP4.
Кроме того, есть разновидность базового пакета Денвера — Base_PHP5. Дистрибутив содержит: Apache, PHP5, Perl, MySQL, phpMyAdmin, sendmail-заглушка, однако в нем нет PHP версии 4; вместо него — PHP5. Достоинство данного дистрибутива в том, что PHP5 работает в виде модуля Apache, а не в виде CGI-обработчика: http://www[dot]denwer[dot]ru/packages/base_php5[dot]html
 
 Top
idimka
Отправлено: 07 Июня, 2007 - 15:10:54
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июнь 2007  


Помог: 0 раз(а)




Спасибо большое. Сменил денвер, все заработало.
Я ошибался, что у меня последняя версия. Просто начал качать ту версию, которая на главной странице, оказалась та же, что и у меня.
На их форуме мне тоже сказали, что file_put_contents() доступна в PHP 5.
Я блин ступил, не посмотрел. А скорее поленился...
 
 Top
Acuna
Отправлено: 27 Сентября, 2008 - 21:53:21
Post Id



Гость


Покинул форум
Сообщений всего: 87
Дата рег-ции: Июль 2008  


Помог: 0 раз(а)




Помогите! Я этот код использовал, но только вместо
PHP:
скопировать код в буфер обмена
  1.           // Читаем содержимое файла
  2.           $content = file_get_contents($dirname."/".$file);
  3.           // Осуществляем замену
  4.           $content = str_replace($text, $retext, $content);
  5.           // Перезаписываем файл
  6.           file_put_contents($dirname."/".$file, $content);
пытался использовать
PHP:
скопировать код в буфер обмена
  1. copy ($dirname."/".$file, $dirname2."/".$file);
Т. е. я пытался переместить все файлы из папки temp в папку $dirname2. Но это почему-то не работает! Heeelp!


-----
The Lisalover
!!! I LOVE PHP !!!
 
 Top
Champion Супермодератор
Отправлено: 28 Сентября, 2008 - 07:56:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Функция copy копирует файл. Для переместить надо пользоваться функцией rename
(Добавление)
Кроме этого в примере выше рекурсивно обходятся и все вложенные папки. У вас тогда в том каталоге, в которые перемщаете иерархия потеряется. Мне так кажется
(Добавление)
И вообще, если Вам надо переместить, то, насолько мне кажется, функция rename перемещает и каталоги. И не обязательно залазить внутрь них
 
 Top
Elvis
Отправлено: 16 Декабря, 2009 - 14:25:16
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




Ребята вот так проще менять фразы или что хочешь

sed -i 's/pattern_OLD/pattern_NEW/g' templates/*.php

и все ))) или басш скрипт написать
 
 Top
EuGen Администратор
Отправлено: 18 Декабря, 2009 - 11:08:53
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Предупреждение за поднятие старой темы
Тема закрыта!


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Обсуждение статей »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB