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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Поисковый робот на php

Сообщения:  [1-8] 

 
 автор: Quies   (27.06.2007 в 19:30)   письмо автору
 
   для: Quies   (27.06.2007 в 19:07)
 

>А если страница большая и всего одна будет 30 секунд обрабатываться ?
Для индикации процесса загрузки можно использовать flush(); в цикл вставить и что то вроде
echo $i . <br>; чтоб была уверенность что процесс идёт :)

   
 
 автор: Quies   (27.06.2007 в 19:07)   письмо автору
 
   для: Richard Ferlow   (27.06.2007 в 18:15)
 

Спасибо помогло :) set_time_limit(); то что нужно!

>Написать можно, но только если это ваш сервер и на нем разрешено убирать ограничение времени работы, т.е. set_time_limit(0). Обычно хостеры это запрещают.
Это для моего локального сервера, так что с хостерами проблем нет :) Решил что то вроде расширенного поиска смастерить, чтоб на тех сайтах на которых плохой поиск, или вобще таковой отсутствует можно было что то найти.

>А на аяксе как делал ?
Всё, тоже самое только ещё кода добавил:
Страница index.php , форма для тестирования аякс приложений

<html>
  <head>
    <title>
      Главная
    </title>
    <script type="text/JavaScript">

var req;

function loadXMLDoc(url) {
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        }
    }
}

function processReqChange() {   
    document.form1.state.value = stat(req.readyState); 
    
    ab = window.setTimeout("req.abort();", 5000);
    
    if (req.readyState == 4) {
        clearTimeout(ab);
        
        document.form1.statusnum.value = req.status; 
        document.form1.status.value = req.statusText; 
        
        // only if "OK"
        if (req.status == 200) {
            document.form1.response.value=req.responseText;
        } else {
            alert("Не удалось получить данные:\n" + req.statusText);
        }
    }  
}

function stat(n)
{
  switch (n) {
    case 0:
      return "не инициализирован";
    break;
      
    case 1: 
      return "загрузка...";
    break;
    
    case 2: 
      return "загружено";
    break;
    
    case 3: 
      return "в процессе...";
    break;
      
    case 4: 
      return "готово";
    break;
    
    default:
      return "неизвестное состояние";  
  }  
}

function requestdata(params)
{
  loadXMLDoc('cyber.php'+params);

}

document.writeln(params);

</script>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <style type="text/css">
      <!--
      .style1 {
      color: #0000CC;
      font-size: 14px;
      font-family: Verdana, Arial, Helvetica, sans-serif;
      }
      -->
    </style>
  </head>
  <body>
    start=true
    <form name=form1>
  <table>
    <tr>
      <td valign=top>
        Состояние запроса</td>
      <td>
        <input size=25 disabled type=text name=state value=""></td>
      <tr>
        <td valign=top>
          Код статуса</td>
        <td>
          <input disabled size=2 type=text name=statusnum value="">
          <input disabled size=19 type=text name=status value=""></td>
      </tr>
      <tr>
        <td valign=top>
          Данные от сервера</td>
        <td>
<textarea COLS="60" ROWS="15" name=response></textarea></td>
      </tr>
      <tr>
        <td>
          Строка GET-запроса</td>
        <td>
          <input type=text name=getparams size=100 value="?">
          <input type=button onclick="requestdata(getparams.value);" value="GET"></td>
      </tr>
  </table>
</form>
  </body>
</html>


И страница с php скриптом, cyber.php

<?php
set_time_limit
(0);

// ajax заголовки
header("Content-type: text/plain; charset=windows-1251");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0"false);

for (
$i 0$i <= 10$i++) {

//Открытие
$content file_get_contents("http://www.site.ru/page$i.html"); 

// далее нахожу что то на странице (записываю в $info)
// и сохраняю это в массив
$arr[$i] = $info;


?>

   
 
 автор: Richard Ferlow   (27.06.2007 в 18:15)   письмо автору
 
   для: Киналь   (27.06.2007 в 10:31)
 

Расчитывать на максимальное время скрипта - не очень. А если страница большая и всего одна будет 30 секунд обрабатываться ?
А на аяксе как делал ?

Имхо тут выход - через аякс вызывать скрипт заново, пока не достигнешь какой-то точки.
Я так с проблемой ограниченности времени боролся.

   
 
 автор: Киналь   (27.06.2007 в 10:31)   письмо автору
 
   для: Quies   (26.06.2007 в 20:57)
 

>Не знаю, может такого робота на php вообще нельзя написать... ?! :-(

Написать можно, но только если это ваш сервер и на нем разрешено убирать ограничение времени работы, т.е. set_time_limit(0). Обычно хостеры это запрещают.

   
 
 автор: SnooPI   (27.06.2007 в 04:08)   письмо автору
 
   для: Proger   (26.06.2007 в 22:31)
 

Мда..
Может легче сразу
set_time_limit(0);

?

   
 
 автор: Proger   (26.06.2007 в 22:31)   письмо автору
 
   для: bronenos   (26.06.2007 в 21:19)
 

После <? сразу пропишите:

set_time_limit(3600);

   
 
 автор: bronenos   (26.06.2007 в 21:19)   письмо автору
 
   для: Quies   (26.06.2007 в 20:57)
 

30 секунд - максимальное время исполнения скрипта
ваш скрипт не укладывается в этот срок

   
 
 автор: Quies   (26.06.2007 в 20:57)   письмо автору
 
 

Возможно, ли написать на php поискового робота?!
Задача в следующем, программа переберет удаленные хтмл страницы, ищет в них нужную информацию и записывает в массив (а, потом можно и в базу).
Я,побывал написать так

<?php
for ($i 0$i <= 10$i++) {

//Открытие
$content file_get_contents("http://www.site.ru/page$i.html"); 

// далее нахожу что то на странице (записываю в $info)
// и сохраняю это в массив
$arr[$i] = $info;

}
?>

Первые 3 страницы он обходит а если поставить больше чем 3, обрывается соединение и браузер пишет ошибку, превышен лимит в 30 секунд.
Попробовал написать на ajax (подумал может это из за того, что браузеру нужна синхронность), ошибка о окончании лимита в 30 секунд не выскакивает, но больше чем информацию с 4 страниц не выводит.
Не знаю, может такого робота на php вообще нельзя написать... ?! :-(

   

Сообщения:  [1-8] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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