Обработка всех файлов в папке, удалить контент между опред. тегами

J4
На сайте с 21.05.2009
Offline
99
4115

Приветствую всех! Возникла проблема со скриптом, который должен пройти по всем файлам в папке и удалить кусок контента заключенный между определенными тегами. Мой скрипт не работает

<?php


// бесконечное время работы скрипта. Эта часть скрипта работает
set_time_limit('0');

// открывается дирректория $dir, все файлы лежащие в данной директории заносятся в массив $files. Эта часть скрипта работает
$dir = 'grbing/';
$dh = opendir($dir);
while (false !== ($filename = readdir($dh))) {
$files[] = $filename;
}

// файлы массива $files сортируются в алфавитном порядке. Эта часть скрипта работает
sort($files);

// функция берет контент из файла, удаляет, контент заключенный между тегами

function obrab($n)
{
$b = file_get_contents($dir.$n);
$b = preg_replace('<h3>(.*)<div id="recent-posts">', '<div id="recent-posts">', $b);
$fp = fopen ($dir.$n , "w" );
fwrite($b, $fp);
fclose ( $fp );

echo "Файл $n обработан<br />";
}

// Применение функции ко всем элементам массива $files
$b = array_map("obrab", $files);

echo "<br /><strong>Все файлы обработаны!</strong>";

?>
Если не сложно подскажите, где у меня ошибка.
ewg777
На сайте с 04.06.2007
Offline
225
#1

dir не передаёте в функцию.

J4
На сайте с 21.05.2009
Offline
99
#2

Спасибо за подсказку. Поправил

<?php


// бесконечное время работы скрипта. Эта часть скрипта работает
set_time_limit('0');

// открывается дирректория $dir, все файлы лежащие в данной директории заносятся в массив $files. Эта часть скрипта работает
$dir = 'grbing/';
$dh = opendir($dir);
while (false !== ($filename = readdir($dh))) {
$files[] = $filename;
}

// файлы массива $files сортируются в алфавитном порядке. Эта часть скрипта работает
sort($files);

// функция берет контент из файла, удаляет, контент заключенный между тегами

function obrab($n)
{
global $dir;
$b = file_get_contents($dir.$n);
$b = preg_replace('<h3>(.*)<div id="recent-posts">', '<div id="recent-posts">', $b);
$fp = fopen ($dir.$n , "w" );
fwrite($b, $fp);
fclose ( $fp );

echo "Файл $n обработан<br />";
}

// Применение функции ко всем элементам массива $files
$b = array_map("obrab", $files);

echo "<br /><strong>Все файлы обработаны!</strong>";

?>
Скрипт не работает, выдает ошибки, хотя потом пишет, что файл обработан.

Warning: preg_replace() [function.preg-replace]: Unknown modifier '(' in P:\home\localhost\ on line 22

Warning: fwrite(): supplied argument is not a valid stream resource in P:\home\localhost\ on line 24

Файл -and-145but-ya-ne-hotyat-muskulyi-and-146-chast-1-chto-muskul-i-kak-postroit-ili-izbezhat-eto.php обработан

В нужной папке предыдущие файлы заменяются на пустые. Что не так?

ewg777
На сайте с 04.06.2007
Offline
225
#3

Читайте маны к fwrite и preg_replace. (в первом порядок перепутали, во втором сами найдете)

sashka_
На сайте с 27.01.2010
Offline
103
#4

не понял откуда берёться переменая $n в строке получения файла , и в функции не хватает return $b;

Знаю PHP, JS, jQuery. Помощь для вашего сайта. (/ru/forum/840509).
J4
На сайте с 21.05.2009
Offline
99
#5

Переменная $n нужна для array_map, чтобы пройти все элементы массива. С fwrite ошибку допустил из-за невнимательности, раньше она у меня работала. Тему можно закрыть, а вот финальный вариант рабочего кода

<?php

// бесконечное время работы скрипта. Эта часть скрипта работает
set_time_limit('0');

// открывается дирректория $dir, все файлы лежащие в данной директории заносятся в массив $files. Эта часть скрипта работает
$dir = 'grbing/';
$dh = opendir($dir);
while (false !== ($filename = readdir($dh))) {
$files[] = $filename;
}


// функция берет контент из файла, удаляет, контент заключенный между тегами

function obrab($n)
{
global $dir;
$b = file_get_contents($dir.$n);
$b = preg_replace('#<h3>(.*)<div id="recent-posts">#i', '<div id="recent-posts">', $b);
$fp = fopen ($dir.$n , "w" );
fwrite($fp, $b);
fclose ( $fp );

echo "Файл $n обработан<br />";
}

// Применение функции ко всем элементам массива $files
$b = array_map("obrab", $files);

echo "<br /><strong>Все файлы обработаны!</strong>";

?>


ВСЕМ СПАСИБО ЗА ПОМОЩЬ!

ewg777
На сайте с 04.06.2007
Offline
225
#6

20:19 - 14:58 дебаг 13 строк кода.

Переменная $n нужна для array_map
array_map всё равно какая переменная примет входное значение.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий