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

Форум Регулярные Выражения

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Удалить все картинки из файлов в директории
 
 автор: dmitrii_r   (21.10.2006 в 05:36)   письмо автору
 
 

Есть директория с однотипными html-файлами. Как убрать в цикле картинки из всех файлов, используя рег.выражения?

   
 
 автор: cheops   (21.10.2006 в 13:11)   письмо автору
 
   для: 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); 
?> 

   
 
 автор: dmitrii_r   (21.10.2006 в 14:53)   письмо автору
 
   для: 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 в нужную ссылку.

   
 
 автор: cheops   (21.10.2006 в 16:59)   письмо автору
 
   для: dmitrii_r   (21.10.2006 в 14:53)
 

Решить проблему можно, только нужно выбрать путь решения, а для этого нужно больше информации:
1) Служебные картинки находятся в тех же файлах или в специальных?
2) Картика одна и та же или их несколько?

   
 
 автор: dmitrii_r   (21.10.2006 в 23:41)   письмо автору
 
   для: cheops   (21.10.2006 в 16:59)
 

Картинка одна и та же. Находится в другой директории на сайте.

   
 
 автор: cheops   (22.10.2006 в 12:18)   письмо автору
 
   для: 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 
"";
  }
?> 

   
 
 автор: dmitrii_r   (22.10.2006 в 13:16)   письмо автору
 
   для: cheops   (22.10.2006 в 12:18)
 

Спасибо, cheops, все работает. Надо полагать, что с помощью функции preg_replace_callback можно формировать не только массив исключений (то чего резать не надо), но и делать это с помощью вызова в теле функции собственной функции-фильтра. Эта фича, к сожалению, отсутствует в мануале.

Можно ли распространить действие исключений на "резку" не на одну картинку, а на все картинки из директории, скажем, не резать картинки из http://site.ru/images/ ? Видимо, в функции rep lace_image тогда придется использовать регулярное выражение. Можно ли привести решение этой задачи, как учебный пример?

   
 
 автор: cheops   (22.10.2006 в 14:32)   письмо автору
 
   для: dmitrii_r   (22.10.2006 в 13:16)
 

Да, конечно, просто исправьте URL "http://site.ru/images/picture.gif" в replace_image() на тот, который вам требуется, например, на "http://site.ru/images/" и все картинки, чей путь тэг <img> содержит эту строку будут фильтроваться. Можно использовать и регулярное выражение, если условие фильтра будет позаковырестее, здесь просто это не нужно (регулярные выражения ресурсоёмки, если можно обойтись без них, лучше обходиться).

   
 
 автор: dmitrii_r   (22.10.2006 в 14:43)   письмо автору
 
   для: cheops   (22.10.2006 в 14:32)
 

Спасибо!

   
Rambler's Top100
вверх

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