|
|
|
|
|
для: Quies
(27.06.2007 в 19:07)
| | >А если страница большая и всего одна будет 30 секунд обрабатываться ?
Для индикации процесса загрузки можно использовать flush(); в цикл вставить и что то вроде
echo $i . <br>; чтоб была уверенность что процесс идёт :) | |
|
|
|
|
|
|
|
для: 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;
}
?>
|
| |
|
|
|
|
|
|
|
для: Киналь
(27.06.2007 в 10:31)
| | Расчитывать на максимальное время скрипта - не очень. А если страница большая и всего одна будет 30 секунд обрабатываться ?
А на аяксе как делал ?
Имхо тут выход - через аякс вызывать скрипт заново, пока не достигнешь какой-то точки.
Я так с проблемой ограниченности времени боролся. | |
|
|
|
|
|
|
|
для: Quies
(26.06.2007 в 20:57)
| | >Не знаю, может такого робота на php вообще нельзя написать... ?! :-(
Написать можно, но только если это ваш сервер и на нем разрешено убирать ограничение времени работы, т.е. set_time_limit(0). Обычно хостеры это запрещают. | |
|
|
|
|
|
|
|
для: Proger
(26.06.2007 в 22:31)
| | Мда..
Может легче сразу
? | |
|
|
|
|
|
|
|
для: bronenos
(26.06.2007 в 21:19)
| | После <? сразу пропишите:
set_time_limit(3600); | |
|
|
|
|
|
|
|
для: Quies
(26.06.2007 в 20:57)
| | 30 секунд - максимальное время исполнения скрипта
ваш скрипт не укладывается в этот срок | |
|
|
|
|
|
|
| Возможно, ли написать на 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 вообще нельзя написать... ?! :-( | |
|
|
|
|