Rattus
Guest
как ускорить fsockopen
Здраствуйте.
Необходимо написать скрипт который обходя некоторые сайты собирает с них информацию (не ворует контент). Что то типа поисковика. Для этого на каждый сайт fsockopen'ом посылается POST-запрос и читается результат. Вот кусок кода:
и таких кусков достаточно много и они повторяются в цикле с разными хостами в значениях $host и пр., но как показала практика, все это очень долго отрабатывается (15 хостов около 20 минут), играться с set_time_limit() до бесконечности думаю не стоит, пому что скрипт может запускатся по несколько раз в час а куча бесконечно работающих экземпляров скриптов в памяти я думаю не есть гуд.
По этому вопросы:
1) как реально ускорить работу скрипта, чтобы кол-во обрабатываемых серверов не сильно сказывалось на времени исполнения
2) можно ли определить жив сервер или в дауне, для того чтобы не обрабатывать его, а перейти к следующему
3) какой таймаут в fsockopen оптимален для успешного выполнения работы?
Здраствуйте.
Необходимо написать скрипт который обходя некоторые сайты собирает с них информацию (не ворует контент). Что то типа поисковика. Для этого на каждый сайт fsockopen'ом посылается POST-запрос и читается результат. Вот кусок кода:
PHP:
define ("NL", "\r\n");
flush();
$post_data="здесь данные для отправки";
$request=
"POST ".$url." HTTP/1.0".NL.
"Host: ".$host.NL.
"Referer: ".$referer.NL.
"Content-Type: application/x-www-form-urlencoded".NL.
"Content-Length: ".strlen($post_data).NL.
"Accept: */*".NL.
"Accept-Encoding: gzip, deflate".NL.
"Connection: Keep-Alive".NL.
"User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)".NL.
"".NL.
$post_data;
flush();
$fp = fsockopen($host, 80, &$errno, &$errstr, 30);
if($fp)
{
fwrite($fp, $request);
while (!feof($fp))
{
$reply .= fread($fp, 8192);
}
fclose($fp);
}
else
{
return "<p class=error>".$host.": ".$errstr." (".$errno.")</p>\n";
}
По этому вопросы:
1) как реально ускорить работу скрипта, чтобы кол-во обрабатываемых серверов не сильно сказывалось на времени исполнения
2) можно ли определить жив сервер или в дауне, для того чтобы не обрабатывать его, а перейти к следующему
3) какой таймаут в fsockopen оптимален для успешного выполнения работы?