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
Форумы портала PHP.SU :: Версия для печати :: Фунция: Замена определенной строки во всех файлах сайта
Форумы портала PHP.SU » PHP » Пользовательские функции » Фунция: Замена определенной строки во всех файлах сайта

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

1. grefon - 14 Марта, 2011 - 15:56:58 - перейти к сообщению
В связи с переездом одного моего сайта на новый домен потребовалось перебить много контента в нескольких сотнях файлов. Ручками как-то влом было делать. По этому написал вот такую функцию, может кому-то будет полезна:

PHP:
скопировать код в буфер обмена
  1. function ZamenaContenta($path) {
  2.    if(file_exists($path) && is_dir($path)) {
  3.       $dirHandle = opendir($path);
  4.       while (false !== ($file = readdir($dirHandle))) {
  5.          if ($file!='.' && $file!='..') {
  6.             $tmpPath=$path.'/'.$file;
  7.             if (is_dir($tmpPath)) {
  8.                ZamenaContenta($tmpPath);
  9.                } else {
  10.                $content = file_get_contents($tmpPath);
  11.                   if (strpos($content, "что меняем")) {
  12.                      $data = str_replace('что меняем', "на что меняем", $content);
  13.                      $file = fopen($tmpPath,'w');
  14.                      fwrite($file, $data);
  15.                      fflush($file);
  16.                      fclose($file);
  17.                      echo "$tmpPath :: Успешно отредактирован<br/>";
  18.                   }
  19.               }
  20.          }
  21.       }
  22.       closedir($dirHandle);
  23.    }
  24. }
  25. ZamenaContenta(".");
  26.  


Функция рекурсивно проходит все каталоги, проверяет во всех файлах на сайте наличие нужного нам куска текста, который нужно заменить, и если находит то меняет его.
2. ALEN - 14 Марта, 2011 - 20:40:10 - перейти к сообщению
1)
PHP:
скопировать код в буфер обмена
  1.  $file = fopen($tmpPath,'w');
  2. fwrite($file, $data);
  3. fflush($file);
  4. fclose($file);

Метод устарел, предлагаю использование file_put_contents.

2) Что на счет прав доступа к файлам, если они заблокированы от записи?

3) В функцию лучше передавать, что меняем и на что
3. grefon - 14 Марта, 2011 - 22:58:01 - перейти к сообщению
ALEN пишет:
1)Метод устарел, предлагаю использование file_put_contents.

Возможно и устарел. Я как-то не очень ориентируюсь в новшествах. Можно заменить, тут совершенно не принципиально.
ALEN пишет:
2) Что на счет прав доступа к файлам, если они заблокированы от записи?

Мне не нужно было ставить права, поскольку я знал что все файлы имеют доступ к записи. При желании всегда можно вставить чмод. Это пару секунд дела Улыбка
ALEN пишет:
3) В функцию лучше передавать, что меняем и на что

Для удобства пользование наверное да - Вы правы. Но мне, опять же, не нужно было таких "наворотов".
В любом случае, спасибо за комментарий. На будущее учту Улыбка

 

Powered by ExBB FM 1.0 RC1