|
|
|
| Есть обходчик, который будет обходить страницы сайта (код приведен ниже) и сохранять их содержимое в базе.
При этом подчиненность (родитель - подкаталог) задается
просто указанием id родителя в соответствующем поле таблицы.
Трудность заключается в том, чтоб сделать обход пошаговым, чтобы он за раз обрабатывал конечное
количество страниц, а следующий раз продолжал с того же места. Страниц
на сайте много.
Вот что имеем на сегодняшний день:
1. структура базы
CREATE TABLE `table` (
`exib_id` int(11) NOT NULL auto_increment,
`id_parent` int(11) default NULL,
`name` varchar(255) NOT NULL default '',
`url` varchar(255) NOT NULL default '',
`exib_text` text NOT NULL,
UNIQUE KEY `exib_id` (`exib_id`)
) TYPE=MyISAM;
2. Обходчик
<?php
require_once("./inc/db.php");
mysql_query("DELETE FROM `table`");
$current_id = 1;
scan_dir(".","0","1");
function scan_dir($dirname,$parant_id,$id)
{
global $current_id;
$save_parant_id = $parant_id;
$dir = opendir($dirname);
while (($file = readdir($dir)) !== false)
{
if($file != "." && $file != "..")
{
if(is_dir($dirname."/".$file))
{
$text =html_entity_decode(htmlspecialchars (file_get_contents($dirname."/".$file."/index.html"), ENT_QUOTES ));
if (empty($text)) $text = html_entity_decode(htmlspecialchars(file_get_contents($dirname."/".$file."/index.htm")));
$pattern = "|<title>(.*?)<\/title>|i";
preg_match($pattern, $text, $out);
$content_pattern = "|<body(.*?)>(.*?)<\/body>|si";
preg_match($content_pattern, $text, $content);
$cont = $content[2];
$url = (substr($dirname, 1))."/".$file."/";
$query = "INSERT INTO `table` VALUES ('NULL','$parant_id','$out[1]','$url', '$cont')";
$map = mysql_query($query);
$parant_id = $id;
$id++;
$current_id++;
scan_dir($dirname."/".$file,$parant_id,$id);
$parant_id = $save_parant_id;
$id = $current_id;
}
}
}
closedir($dir);
}
?>
|
Подскажите, пожалуйста, как изменить код, чтобы за раз обрабатывать заданное количество страниц. Заранее большое спасибо всем откликнувшимся! | |
|
|