|
|
|
| Есть директория с однотипными html-файлами. Как убрать в цикле картинки из всех файлов, используя рег.выражения? | |
|
|
|
|
|
|
|
для: dmitrii_r
(21.10.2006 в 05:36)
| | Можно поступить следующим образом
<?php
// Имя директории
$dirname = "task";
// Открываем текущую директорию
$dir = opendir($dirname);
// Читаем в цикле директорию
while (($file = readdir($dir)) !== false)
{
// Проверяем является ли текущая позиция файлом
$path = $dirname."/".$file;
if(is_file($path))
{
// Получаем содержимое файла
$contents = file_get_contents($path);
// Удаляем изображение
$pattern = "|<img[^>]+>|is";
$contents = preg_replace($pattern, "", $contents);
$fd = fopen($path, "w");
fwrite($fd, $contents);
fclose($fd);
}
}
// Закрываем директорию
closedir($dir);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(21.10.2006 в 13:11)
| | Большое спасибо, cheops, скрипт прекрасно работает.
Можно ли чистить Img, оставляя исключения для служебной картинки-ссылки. Она содержится в зачищаемых файлах в строках типа: <a href="http://site.ru/somebody.html" target="_blank"> <img src="http://site.ru/images/picture.gif" border="0" align="right"></a>
Подскажите, плиз.
P.S. Хотя, конечно, можно тупо удалить все картинки, а потом вставить нужный img в нужную ссылку. | |
|
|
|
|
|
|
|
для: dmitrii_r
(21.10.2006 в 14:53)
| | Решить проблему можно, только нужно выбрать путь решения, а для этого нужно больше информации:
1) Служебные картинки находятся в тех же файлах или в специальных?
2) Картика одна и та же или их несколько? | |
|
|
|
|
|
|
|
для: cheops
(21.10.2006 в 16:59)
| | Картинка одна и та же. Находится в другой директории на сайте. | |
|
|
|
|
|
|
|
для: dmitrii_r
(21.10.2006 в 23:41)
| | Можно поступить следующим образом
<?php
// Имя директории
$dirname = "task";
// Открываем текущую директорию
$dir = opendir($dirname);
// Читаем в цикле директорию
while (($file = readdir($dir)) !== false)
{
// Проверяем является ли текущая позиция файлом
$path = $dirname."/".$file;
if(is_file($path))
{
// Получаем содержимое файла
$contents = file_get_contents($path);
// Удаляем изображение
$pattern = "|<img[^>]+>|is";
$contents = preg_replace_callback ($pattern, "replace_image", $contents);
$fd = fopen($path, "w");
fwrite($fd, $contents);
fclose($fd);
}
}
// Закрываем директорию
closedir($dir);
// функция обратного вызова
function replace_image($matches)
{
// Проверяем не является ли заменяемое изображение
// служебной картинкой
if(strpos($matches[0], "http://site.ru/images/picture.gif") !== false) return $matches[0];
else return "";
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(22.10.2006 в 12:18)
| | Спасибо, cheops, все работает. Надо полагать, что с помощью функции preg_replace_callback можно формировать не только массив исключений (то чего резать не надо), но и делать это с помощью вызова в теле функции собственной функции-фильтра. Эта фича, к сожалению, отсутствует в мануале.
Можно ли распространить действие исключений на "резку" не на одну картинку, а на все картинки из директории, скажем, не резать картинки из http://site.ru/images/ ? Видимо, в функции rep lace_image тогда придется использовать регулярное выражение. Можно ли привести решение этой задачи, как учебный пример? | |
|
|
|
|
|
|
|
для: dmitrii_r
(22.10.2006 в 13:16)
| | Да, конечно, просто исправьте URL "http://site.ru/images/picture.gif" в replace_image() на тот, который вам требуется, например, на "http://site.ru/images/" и все картинки, чей путь тэг <img> содержит эту строку будут фильтроваться. Можно использовать и регулярное выражение, если условие фильтра будет позаковырестее, здесь просто это не нужно (регулярные выражения ресурсоёмки, если можно обойтись без них, лучше обходиться). | |
|
|
|
|
|
|
|
для: cheops
(22.10.2006 в 14:32)
| | Спасибо! | |
|
|
|