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

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

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

 

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

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

тема: Вывод директории папки из строки
 
 автор: pautina   (14.01.2012 в 16:05)   письмо автору
 
 

Здравствуйте Уважаемое сообщество.
Мне нужно вывести все директории в которых содержатся рисунки. Эти рисунки содержатся в html коде и вырезаются оттуда регулярными выражениями.
Я использую скрипт

<?php  
 header
("Content-Type: text/html; charset=UTF-8");    
 
$str '<p><strong><a href="/lessons.php">Уроки Photoshop</a></strong> &#187; <strong><a href="/lessons.php?rub=1">Рубрика: Эффекты</a></strong></p><br />
    <p><img height="547" src="/lessons/les1677/1.jpg" width="450" /></p>
<p>
    
<p align="center">
    <img height="272" src="/lessons/les1677/18.jpg" width="450" /></p>
<p align="center">
    <img height="272" src="/lessons/les1677/19.jpg" width="450" /></p>
<p align="center">
    <img height="272" src="/lessons/les1677/20.jpg" width="450" /></p>
<p>'
;  
     
preg_match_all('#src="([^"]+)"#i'$str$matches); // показывает ссылку для изображения     
     
$matches[1] = str_replace('/lessons''http://www.photoshop-master.ru/lessons'$matches[1]); // к адресу ссылки прибавляем http://www.photoshop-master.ru/ 
     
$matches[1] = str_replace('tools''http://www.photoshop-master.ru/tools'$matches[1]); // к адресу ссылки прибавляем http://www.photoshop-master.ru/
     
     
$path implode("\n "$matches[1]);
     
// $path = $matches[1];
     
$file explode(" ",dirname($path));  
 echo 
"<pre>"
 
print_r($file);  

?>

Но директории папок где содержится рисунок не выводятся?
Интересно если использовать этот код

<?php
$path 
"http://www.photoshop-master.ru/lessons/les1677/1.jpg";
$file dirname($path); // $file содержит "/etc"
echo "<pre>"
 
// print_r($matches[1]); 
  
print_r($file); 
?>

то здесь директорию где хранится файл мы видим. (Там путь в кавычках, может в этом как то дело)
Почему директории не видно для строки?

  Ответить  
 
 автор: cheops   (15.01.2012 в 14:15)   письмо автору
 
   для: pautina   (14.01.2012 в 16:05)
 

Дело в том, что preg_match_all() возвращает в третьем параметре двумерный массив, вам нужно циклом пройтись по результатом, чтобы осуществить замену при помощи str_replace().

  Ответить  
 
 автор: pautina   (16.01.2012 в 05:59)   письмо автору
 
   для: cheops   (15.01.2012 в 14:15)
 

Подкоректировал код, но директорий не видно

<?php 
 $str 
'<div class="Text">                    
<div id="demotip">&nbsp;</div>  
<div class="Gadget2"><div class="Gadget2SmoothTopLine"><div class="Gadget2SmoothTopLeft"><div class="Gadget2SmoothTopRight">&nbsp;<img src="images/content-smooth-top-right.gif"></div></div></div><div class="Gadget2Content"><div class="Gadget2ContentLeft"><div class="Gadget2ContentRight"><!-- Content --><div class="TextInside">        
<br />        <a id="printPage" href="http://www.photoshop-master.ru/lessons.php?rub=3&id=1055"><img src="/img/print.png" alt="распечатать" /></a>
<p><strong><a href="/lessons.php">Уроки Photoshop</a></strong> &#187; <strong><a href="/lessons.php?rub=1">Рубрика: Эффекты</a></strong></p><br />

<h1 style="text-align:center">Создаём абстрактное золотое кольцо в Фотошоп</h1><p align="left">
    В этом уроке я покажу вам, как создать абстрактную золотую сферу с эффектом дыма.</p>
<p align="center">
    <img height="262" src="/lessons/les1689/01.jpg" width="450" /></p>
<p>
    Для урока вам понадобятся <a href="http://qbrushes.net/smoke-fire/revnart-smoke-brushes/">специальные кисти</a>.</p>
<p>
    <strong>Шаг 1.</strong> Создаем новый документ любого размера с черным фоном. Создаем новый слой и берем <strong>Elliptical </strong><strong>Marquee </strong><strong>Tool</strong> <img height="23" src="tools/Elliptical Marquee.jpg" width="27" /> (Овальное выделение) (M) с такими параметрами:</p>
<p align="center">
    <img height="33" src="/lessons/les1689/02.jpg" width="442" /></p>
<p>
    Зажимаем клавишу SHIFT и рисуем окружность, как показано ниже:</p>
<p align="center">
    <img height="340" src="/lessons/les1689/03.jpg" width="450" /></p>
<p>'

 
preg_match_all('#src="([^"]+)"#i'$str$matches); // показывает ссылку для изображения      
     
$matches[1] = str_replace('/lessons''http://www.photoshop-master.ru/lessons'$matches[1]); // к адресу ссылки прибавляем http://www.photoshop-master.ru/  
     
$matches[1] = str_replace('tools''http://www.photoshop-master.ru/tools'$matches[1]); // к адресу ссылки прибавляем http://www.photoshop-master.ru/ 
     
     //$newField_3 = array(); 
        
     
if (sizeof($matches[1]))  
         foreach(
$matches[1] as $link){
              
$path implode("\n "$matches[1]);                 
             
$file dirname($path);                        
             echo 
$file."<br />";           
         }   

?>

  Ответить  
 
 автор: Sfinks   (16.01.2012 в 13:05)   письмо автору
 
   для: pautina   (16.01.2012 в 05:59)
 

<?php

     preg_match_all
('#src="([^"]+)"#i'$str$matches); // показывает ссылку для изображения
     
$matches[1] = str_replace('/lessons''http://www.photoshop-master.ru/lessons'$matches[1]); // к адресу ссылки прибавляем http://www.photoshop-master.ru/
     
$matches[1] = str_replace('tools''http://www.photoshop-master.ru/tools'$matches[1]); // к адресу ссылки прибавляем http://www.photoshop-master.ru/

     
if (is_array($matches[1]))
         foreach(
$matches[1] as $link){
             
$file[] = dirname($link);
         }
     echo
"<pre>";print_r($file);exit("</pre>");

?>

результат:
Array
(
    [0] => images
    [1] => /img
    [2] => http://www.photoshop-master.ru/lessons/les1689
    [3] => http://www.photoshop-master.ru/tools
    [4] => http://www.photoshop-master.ru/lessons/les1689
    [5] => http://www.photoshop-master.ru/lessons/les1689
)

Это нужно было?

  Ответить  
 
 автор: pautina   (16.01.2012 в 13:29)   письмо автору
 
   для: Sfinks   (16.01.2012 в 13:05)
 

Да спасибо.
Скрипт на выходе выводит.

Array
(
    [0] => images
    [1] => /img
    [2] => http://www.photoshop-master.ru/lessons/les1689
    [3] => http://www.photoshop-master.ru/tools
    [4] => http://www.photoshop-master.ru/lessons/les1689
    [5] => http://www.photoshop-master.ru/lessons/les1689
)
Array
(
    [0] => images/content-smooth-top-right.gif
    [1] => /img/print.png
    [2] => http://www.photoshop-master.ru/lessons/les1689/01.jpg
    [3] => http://www.photoshop-master.ru/tools/Elliptical Marquee.jpg
    [4] => http://www.photoshop-master.ru/lessons/les1689/02.jpg
    [5] => http://www.photoshop-master.ru/lessons/les1689/03.jpg
)

1 массив директория где хранится рисунок, 2-ой массив ссылка рисунка.
Скажите при помощи чего
- из http://www.photoshop-master.ru/lessons/les1689 удалить участок строки http://www.photoshop-master.ru тогда получим /lessons/les1689
- затем к надписи /lessons/les1689 присоединить images тогда получим images/lessons/les1689

  Ответить  
 
 автор: Sfinks   (16.01.2012 в 14:21)   письмо автору
 
   для: pautina   (16.01.2012 в 13:29)
 

$path = str_replace("http://www.photoshop-master.ru","images",$path);

  Ответить  
 
 автор: pautina   (16.01.2012 в 14:37)   письмо автору
 
   для: Sfinks   (16.01.2012 в 14:21)
 

Как правильно сделать вывод информации

...
   if (is_array($matches[1])) 
         foreach($matches[1] as $link){ 
             $file[] = dirname($link); 
             $file2[] = str_replace("http://www.photoshop-master.ru","images", $file);
         } 
         
     echo"<pre>";print_r($file2);print_r($matches[1]);exit("</pre>");

?>

На выходе получаю

Array
(
    [0] => Array
        (
            [0] => images
        )

    [1] => Array
        (
            [0] => images
            [1] => /img
        )

    [2] => Array
        (
            [0] => images
            [1] => /img
            [2] => images/lessons/les1689
        )

    [3] => Array
        (
            [0] => images
            [1] => /img
            [2] => images/lessons/les1689
            [3] => images/tools
        )

    [4] => Array
        (
            [0] => images
            [1] => /img
            [2] => images/lessons/les1689
            [3] => images/tools
            [4] => images/lessons/les1689
        )

    [5] => Array
        (
            [0] => images
            [1] => /img
            [2] => images/lessons/les1689
            [3] => images/tools
            [4] => images/lessons/les1689
            [5] => images/lessons/les1689
        )

)
Array
(
    [0] => images/content-smooth-top-right.gif
    [1] => /img/print.png
    [2] => http://www.photoshop-master.ru/lessons/les1689/01.jpg
    [3] => http://www.photoshop-master.ru/tools/Elliptical Marquee.jpg
    [4] => http://www.photoshop-master.ru/lessons/les1689/02.jpg
    [5] => http://www.photoshop-master.ru/lessons/les1689/03.jpg
)

для 1 массива есть лишние элементы мне нужно только
[5] => Array
(
[0] => images
[1] => /img
[2] => images/lessons/les1689
[3] => images/tools
[4] => images/lessons/les1689
[5] => images/lessons/les1689
)
как изменить код?

  Ответить  
 
 автор: pautina   (16.01.2012 в 15:45)   письмо автору
 
   для: pautina   (16.01.2012 в 14:37)
 

Извиняюсь нужно было использовать этот код

...
if (is_array($matches[1])) 
         foreach($matches[1] as $link){ 
             $file[] = dirname($link); 
             $path = str_replace("http://www.photoshop-master.ru","images", $file);
         } 
         
     echo"<pre>";print_r($path);print_r($matches[1]);exit("</pre>");

?>

Спасибо за помощь.

  Ответить  
 
 автор: Sfinks   (16.01.2012 в 17:27)   письмо автору
 
   для: pautina   (16.01.2012 в 15:45)
 

$path = str_replace("http://www.photoshop-master.ru","images", $file);
вынесите эту строку за пределы цикла. В вашем варианте результат конечно тот же, но выполняется куча ненужных преобразований.

  Ответить  
Rambler's Top100
вверх

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