|
|
|
| Здравствуйте Уважаемое сообщество.
Мне нужно вывести все директории в которых содержатся рисунки. Эти рисунки содержатся в html коде и вырезаются оттуда регулярными выражениями.
Я использую скрипт
<?php
header("Content-Type: text/html; charset=UTF-8");
$str = '<p><strong><a href="/lessons.php">Уроки Photoshop</a></strong> » <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);
?>
|
то здесь директорию где хранится файл мы видим. (Там путь в кавычках, может в этом как то дело)
Почему директории не видно для строки? | |
|
|
|
|
|
|
|
для: pautina
(14.01.2012 в 16:05)
| | Дело в том, что preg_match_all() возвращает в третьем параметре двумерный массив, вам нужно циклом пройтись по результатом, чтобы осуществить замену при помощи str_replace(). | |
|
|
|
|
|
|
|
для: cheops
(15.01.2012 в 14:15)
| | Подкоректировал код, но директорий не видно
<?php
$str = '<div class="Text">
<div id="demotip"> </div>
<div class="Gadget2"><div class="Gadget2SmoothTopLine"><div class="Gadget2SmoothTopLeft"><div class="Gadget2SmoothTopRight"> <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> » <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 />";
}
?>
|
| |
|
|
|
|
|
|
|
для: 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
)
|
Это нужно было? | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: pautina
(16.01.2012 в 13:29)
| | $path = str_replace("http://www.photoshop-master.ru","images",$path); | |
|
|
|
|
|
|
|
для: 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 в 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>");
?>
|
Спасибо за помощь. | |
|
|
|
|
|
|
|
для: pautina
(16.01.2012 в 15:45)
| | $path = str_replace("http://www.photoshop-master.ru","images", $file);
вынесите эту строку за пределы цикла. В вашем варианте результат конечно тот же, но выполняется куча ненужных преобразований. | |
|
|
|