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

Форум PHP

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

 

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

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

тема: Обходчик страниц сайта
 
 автор: artem_b   (22.07.2008 в 11:47)   письмо автору
 
 

Есть обходчик, который будет обходить страницы сайта и сохранять их содержимое в базе.
При этом подчиненность задается
просто указанием родителя в соответствующем поле таблицы.
Трудность заключается в том, чтоб сделать его пошаговым, чтобы он за раз обрабатывал конечное
количество страниц, а следующий раз продолжал с того же места. Страниц
на сайте много.

Вот что имеем на сегодняшний день:
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);
  }
?>


Подскажите, пожалуйста, как изменить код, чтобы за раз обрабатывать заданное количество страниц. Задавать можно просто переменной внутри кода. Заранее большое спасибо всем откликнувшимся!