|
|
|
| 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 "=)"
?>
|
| |
|
|
|
|
|
|
|
для: Akira
(30.07.2005 в 18:12)
| | Да, про file_put_contents() я тоже подумал, но решил оставить именно этот вариант для наглядности. | |
|
|
|
|
|
|
|
для: cheops
(30.07.2005 в 18:41)
| | Так у вас именно file_put_contents() написан, а нет предупреждения о том, что только в 5 версии работает :)
А что насчет проверки расширения? | |
|
|
|
|
|
|
|
для: Akira
(30.07.2005 в 18:50)
| | Каюсь, это так, а в смысле проверки расширений? | |
|
|
|
|
|
|
|
для: cheops
(30.07.2005 в 18:54)
| |
<?
// Извлекаем из имени файла расширение
$ext = strrchr($dirname."/".$file, ".");
foreach($extentions as $exten)
if(preg_match($exten, $ext))
?>
|
Я когда без них написал :) У меня файлов было не текстовых около 50 :)) представляете, что произошло? Он пытался открыть каждый файл. Вот я и подумал, что надо бы сделать так же как и в подсчете строк. | |
|
|
|