|
|
|
|
|
для: SS
(23.01.2005 в 15:11)
| | Так как тема уже длинная, обсуждать не удобно - давайте в другую перейдём
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1701 | |
|
|
|
|
|
|
|
для: cheops
(23.01.2005 в 02:20)
| | Да, совсем забыл!
Бывает и больше двух фотографий на одной html-странице.
Максимум - 5-6.
Что надо для этого дописать? | |
|
|
|
|
|
|
|
для: cheops
(23.01.2005 в 14:15)
| | http://ancientrome.ru/art/artwork/sculp/search.htm
Сканирование работает хорошо, только так же пишет все файлы подряд.
Поиск - тоже все хорошо, кроме того, что добавляет к IMG SRC имя htm-файла (например,
http://ancientrome.ru/art/artwork/sculp/rom/imp/augustus/livia/liv001.htmliv001-0.jpg
ВМЕСТО
http://ancientrome.ru/art/artwork/sculp/rom/imp/augustus/livia/liv001-0.jpg) | |
|
|
|
|
|
|
|
для: SS
(23.01.2005 в 03:34)
| | Рекурсивное сканирование с корня виртуального хоста
<?php
// Считаем число строк в файле url.txt
$arr = array();
$url_text = array();
$arr = file("url.txt");
// Помещаем индексы файла url.txt в новый массив
foreach($arr as $line)
{
list($temp) = explode(" ", $line);
$url_text[] = $temp;
}
// Выясняем максимальный индекс
if(!empty($url_text)) $i = max($url_text) + 1;
else $i = 0;
// Открываем файл url.txt на запись
$fd = fopen("url.txt","a");
// Открываем файл base.txt на запись
$fb = fopen("base.txt","a");
// Начинаем спуск по дереву католов
scan_dir(".",$fd,$fb);
// Закрываем файл url.txt
fclose($fd);
// Закрываем файл base.txt
fclose($fb);
//////////////////////////////////////////////////////////
// Рекурсивная функция - спускаемся вниз по Исскуству :)))
//////////////////////////////////////////////////////////
function scan_dir($dirname,$fd,$fb)
{
// Объявляем индекс $i глобальным, чтобы
// его значение сохранялось после выхода
// из функции
GLOBAL $i;
// Открываем текущую директорию
$dir = opendir($dirname);
// Читаем в цикле директорию
while (($file = readdir($dir)) !== false)
{
// Если файл обрабатываем его содержимое
if($file != "." && $file != "..")
{
// Если имеем дело с файлом - регистрируем его
if(is_file($dirname."/".$file))
{
// Записываем имя файла в url.txt
fwrite($fd, "$i $dirname/".$file."/\n");
// Получаем содержимое файла
$buffer = file_get_contents($dirname."/".$file);
// Извлекаем пути к фотографиям
$patern = "|<img[\s]*alt[^\"]*\"([^\"]*)\"[\s]*src[^\"]*\"([^\"]*)|i";
preg_match_all($patern, $buffer, $out, PREG_SET_ORDER);
if(isset($out[0]))
{
$out[0][1] = str_replace("\r\n","",$out[0][1]);
$out[0][1] = str_replace("\n","",$out[0][1]);
fwrite($fb,"$i ".$out[0][2]." ".$out[0][1]."\n");
}
if(isset($out[1]))
{
$out[1][1] = str_replace("\r\n","",$out[1][1]);
$out[1][1] = str_replace("\n","",$out[1][1]);
fwrite($fb,"$i ".$out[1][2]." ".$out[1][1]."\n");
}
$i++;
}
// Если перед нами директория, вызываем рекурсивно
// функцию scan_dir
if(is_dir($dirname."/".$file))
{
scan_dir($dirname."/".$file,$fd,$fb);
}
}
}
// Закрываем директорию
closedir($dir);
}
?>
|
Поиск (уточните пожалуйста где у вас изображения храняться - в той же директории? Этот скрипт расчитан на это предположение)
<?php
Error_Reporting(E_ALL & ~E_NOTICE);
// Имя файла с путями к фотографиям и ключевыми словами
$filename = "base.txt";
$filurl = "url.txt";
// Помещаем содержимое файла в массив $photo_line
$photo_line = file($filename);
// Проверяем то, что передано в форме
// дабы исключить взлом
$_GET['name'] = str_replace("."," ",$_GET[name]);
$_GET['name'] = str_replace("'"," ",$_GET[name]);
$_GET['name'] = str_replace('"'," ",$_GET[name]);
if(empty($_GET['name']))
{
exit ("Текстовое поле осталось не заполненным - введите слово для поиска");
}
// Открываем файл url.txt c реальными путями к фотографии
$url_temp = file($filurl);
foreach($url_temp as $line)
{
list($index,$value) = explode(" ",$line);
$url[$index] = $value;
}
// В цикле ищем вхождения
foreach($photo_line as $lines)
{
// Проверяем входит ли в состав строки искомое
// слово - если входит - запоминаем его номер.
if(preg_match("|".$_GET['name']."|i", $lines))
{
$temp = substr($lines,strpos($lines," "));
$temp = trim($temp);
$path = substr($temp,0,strpos($temp," "));
$alt = substr($temp,strpos($temp," "));
$photo_path[] = trim($url[substr($lines,0,strpos($lines," "))]).$path."|".$alt;
}
}
// Выводим фотографии
foreach($photo_path as $pathpd)
{
// Отделяем описание от пути к файлу
list($pathp,$alt) = explode("|",$pathpd);
// Теперь разбиваем строку на директорию и файл
$arr = pathinfo($pathp);
// Ссылка на исходную HTML-страницу
echo "<a href=$arr[dirname]><IMG src=".$arr[dirname].$arr[basename]." width=779 height=106 border=0></a><br>";
// Описание, с выделением жирным найденных слов
echo str_replace($_GET['name'],"<b>$_GET[name]</b>",$alt)."<br>";
unset($arr);
}
?>
|
| |
|
|
|
|
|
|
|
для: SS
(23.01.2005 в 03:34)
| | 1) Хорошо сейчас постараюсь быстренько в рекурсию загнать этот скрипт.
a) В общем это не влияет, так как мы просто не используем эти номера, но можно убрать.
б) Пожалуй что да, нужно передлать (в таком формате запись можно удалить, но нужно оставлять пустую строку.) | |
|
|
|
|
|
|
|
для: cheops
(23.01.2005 в 02:45)
| | Все, работает! Спасибо огромное!
http://ancientrome.ru/art/artwork/sculp/rom/imp/augustus/search7.htm
1. Как просканировать вглубь более одной папки? У нас в разделе ИСКУССТВО более 200 папок на 5-7 уровней.
Файл URL.TXT -
а) пишет все файлы подряд, какие только есть в папке. Нам ведь нужны только htm?
б) может быть, сделать так, чтобы у файлов URL и BASE были одинаковые номера (по образцу BASE), а то получается очень жесткая привязка номера строки URL.TXT к присвоенному ей соотвествующему номеру BASE.TXT. Удалить какую-то запись получается практически невозможно, - сразу же все поехало. | |
|
|
|
|
|
|
|
для: SS
(23.01.2005 в 02:32)
| | Посмотрите, вот этот обработчик поисковой формы:
<?php
Error_Reporting(E_ALL & ~E_NOTICE);
// Имя файла с путями к фотографиям и ключевыми словами
$filename = "base.txt";
$filurl = "url.txt";
// Помещаем содержимое файла в массив $photo_line
$photo_line = file($filename);
// Проверяем то, что передано в форме
// дабы исключить взлом
$_GET['name'] = str_replace("."," ",$_GET[name]);
$_GET['name'] = str_replace("'"," ",$_GET[name]);
$_GET['name'] = str_replace('"'," ",$_GET[name]);
if(empty($_GET['name']))
{
exit ("Текстовое поле осталось не заполненным - введите слово для поиска");
}
// Открываем файл url.txt c реальными путями к фотографии
$url = file($filurl);
// В цикле ищем вхождения
foreach($photo_line as $lines)
{
// Проверяем входит ли в состав строки искомое
// слово - если входит - запоминаем его номер.
if(preg_match("|".$_GET['name']."|i", $lines))
{
$temp = substr($lines,strpos($lines," "));
$temp = trim($temp);
$path = substr($temp,0,strpos($temp," "));
$alt = substr($temp,strpos($temp," "));
$photo_path[] = trim($url[substr($lines,0,strpos($lines," "))]).$path."|".$alt;
}
}
// Выводим фотографии
foreach($photo_path as $pathpd)
{
// Отделяем описание от пути к файлу
list($pathp,$alt) = explode("|",$pathpd);
// Теперь разбиваем строку на директорию и файл
$arr = pathinfo($pathp);
// Ссылка на исходную HTML-страницу
echo "<a href=$arr[dirname]><IMG src=$arr[basename] width=779 height=106 border=0></a><br>";
// Описание, с выделением жирным найденных слов
echo str_replace($_GET['name'],"<b>$_GET[name]</b>",$alt)."<br>";
unset($arr);
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(23.01.2005 в 02:20)
| | Да, конечно выводить. И если можно, выделить найденный текст жирным. | |
|
|
|
|
|
|
|
для: SS
(22.01.2005 в 17:35)
| | Дайвайте со скана директорий начнём. Поздненько я до вас добрался :)))
<?php
// Считаем число строк в файле url.txt
$arr = array();
$arr = file("url.txt");
$i = count($arr);
// Открываем файл url.txt на запись
$fd = fopen("url.txt","a");
// Открываем файл base.txt на запись
$fb = fopen("base.txt","a");
// Открываем текущую директорию
$dir = opendir(".");
// Читаем в цикле директорию
while (($file = readdir($dir)) !== false)
{
// Если файл обрабатываем его содержимое
if($file != "." && $file != "..")
{
if(is_file($file))
{
// Записываем имя файла в url.txt
fwrite($fd, $file."/\n");
// Получаем содержимое файла
$buffer = file_get_contents($file);
// Извлекаем пути к фотографиям
$patern = "|<img[\s]*alt[^\"]*\"([^\"]*)\"[\s]*src[^\"]*\"([^\"]*)|i";
preg_match_all($patern, $buffer, $out, PREG_SET_ORDER);
if(isset($out[0]))
{
$out[0][1] = str_replace("\r\n","",$out[0][1]);
$out[0][1] = str_replace("\n","",$out[0][1]);
fwrite($fb,"$i ".$out[0][2]." ".$out[0][1]."\n");
}
if(isset($out[1]))
{
$out[1][1] = str_replace("\r\n","",$out[1][1]);
$out[1][1] = str_replace("\n","",$out[1][1]);
fwrite($fb,"$i ".$out[1][2]." ".$out[1][1]."\n");
}
$i++;
}
}
}
// Закрываем директорию
closedir($dir);
// Закрываем файл url.txt
fclose($fd);
// Закрываем файл base.txt
fclose($fb);
?>
|
Так файлы url.txt и base.txt могут иметь записи до сканирования, но каждый из них должен имть в конце пустую строку. Скрипт сканирует текущую директорию и дополняет файлы base.txt и url.txt. Я так как понял в HTML-файлах больше двух фотографий не бывает? Поэтому случаи больше 2-х фотографий не обработаны. Осторожно повтороное сканирование добавит файлы второй раз.
3) Так а с третьим чего у нас: выводить то, что в alt-параметре тэга img? | |
|
|
|
|
|
|
|
для: SS
(22.01.2005 в 17:35)
| | Что-то просмотрел ваш ответ и он отметился у меня как прочитанный :))) сегодя ближе к ночи постараюсь отписаться... | |
|
|
| |
|