Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Замена строки во всех файлах директории...(Примеры скриптов на PHP)

Сообщения:  [1-5] 

 
 автор: Akira   (30.07.2005 в 19:02)   письмо автору
 
   для: cheops   (30.07.2005 в 18:54)
 


<?
 
// Извлекаем из имени файла расширение
$ext = strrchr($dirname."/".$file, "."); 
 foreach(
$extentions as $exten)
 if(
preg_match($exten, $ext))
?>

Я когда без них написал :) У меня файлов было не текстовых около 50 :)) представляете, что произошло? Он пытался открыть каждый файл. Вот я и подумал, что надо бы сделать так же как и в подсчете строк.

   
 
 автор: cheops   (30.07.2005 в 18:54)   письмо автору
 
   для: Akira   (30.07.2005 в 18:50)
 

Каюсь, это так, а в смысле проверки расширений?

   
 
 автор: Akira   (30.07.2005 в 18:50)   письмо автору
 
   для: cheops   (30.07.2005 в 18:41)
 

Так у вас именно file_put_contents() написан, а нет предупреждения о том, что только в 5 версии работает :)
А что насчет проверки расширения?

   
 
 автор: cheops   (30.07.2005 в 18:41)   письмо автору
 
   для: Akira   (30.07.2005 в 18:12)
 

Да, про file_put_contents() я тоже подумал, но решил оставить именно этот вариант для наглядности.

   
 
 автор: Akira   (30.07.2005 в 18:12)   письмо автору
 
 

1) Код написанный cheops предназначен только для 5 версии (file_put_contents). О чем не упоминаеться :( 5 мин. потратил на поиски у себя ошибки.
2) Есть ошибка в производительности т.к. не проверяеться расширение файла.
Значит будут открываться или пытаться открыться не нужные файлы, что занемает время.
3) Переписал код, добавив туда проверку расширения. Заменил функцию file_put_contents. С использование glob.

<?
function scan_dir($dirname) 
{ 
    GLOBAL 
$text, $retext, $extentions;
    
# Если путь пустой, то используем текущий каталог 
    
empty($dirname) ? $dirname = "*" : $dirname = $dirname."/*"; 
    
$dir = glob($dirname);
    
// Если директория существует обходим. 
    
if ($dir) 
    { 
        foreach(
$dir as $filename) 
        { 
            if (
is_file($filename)) 
            { 
                  
// Расширение файла
                  
$ext=strrchr($filename, ".");
                  foreach(
$extentions as $exten)
                  
// Если файл попадает под маску,то считаем строки
                  
if(preg_match($exten, $ext))
                  {
                      
// Читаем содержимое файла 
                      
$content = file_get_contents($filename); 
                      
// Осуществляем замену 
                      
$content = str_replace($text, $retext, $content); 
                      
// Перезаписываем файл 
                      
$fopen = fopen($filename,"w");
                      
fwrite($fopen,$content);
                      
fclose($fopen);
                  }
            } 
            if (
is_dir($filename)) 
            { 
                
scan_dir($filename); 
            } 
        } 
    } 
} 
$text = 'Testing'; // Искомая строка
$retext = 'ReTesting'; // Строка замены
// Массив с расширениями файлов, для которых следует подсчитывать
// число строк
$extentions = array("#\.html#i"); 
// $extentions = array("#\.cpp#i","#\.h#i");
// Счётчик строк - глобальная переменная
scan_dir("");  // Вызов рекурсивной функции
echo "=)"
?>

   

Сообщения:  [1-5] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования