Парсер и время выполнения скрипта.
1.
ШЕДЕВР (02.09.2013 / 17:09)
Добрый день!
Написал парсер по проверке WHOIS домена. Откуда я парсирую данные, сайт не постоянно доступен. И получается кто делает запрос с моего сайта, из-за того что нет ответа, юзер делает еще запрос. И таких запросов ОЧЕНЬ много. Из-за чего на сервер выпадает большая нагрузка, сайт перестает работать. Пока хостер не перезагрузит апач мой сайт так и висит.
Как быть? Как назначить таймаут на выполнение запроса? А то скоро хостер наверное откажется от моего сайта))))
2.
JustZero (02.09.2013 / 17:15)
проверять работу сайта в начале кода, делать exit();
Добавлено через 04:32 сек.
или парсить из нормального сайта типа nic.ru/whois
Добавлено через 05:15 сек.
если на сервере есть whios, то там вообще парсер не нужен будет
3.
Владимир (02.09.2013 / 18:00)
> И таких запросов ОЧЕНЬ много
Юзай очереди или кеширование.
4.
Женек (02.09.2013 / 18:32)
3.
inlanger, кеширование? что ты собрался там кешировать?
ТС, парси нормальные ресурсы
5.
Tegos (02.09.2013 / 18:43)
А зачем парсим с такого сайта ?
Добавлено через 09:13 сек.
Ну да, можно и результат кешировать...
6.
JustZero (02.09.2013 / 18:54)
что кешировать, если сайт не доступен?
7.
shilo (02.09.2013 / 19:13)
set_time_limit(3); - время выполнения всего скрипта
http://www.php.net/manual/ru/function.fsockopen.php
Умеет таймаут ;)
А вообще лучше парсить не сайты... а юзать системную утилиту whois через shell_exec() или аналоги (но это не везде возможно)
8.
Владимир (02.09.2013 / 19:29)
что ты собрался там кешировать?
одинаковые запросы. чтобы серверу пофиг было лежит сайт или нет. Врядли у ТС сотни посетителей одновременно запрашивают одновременно разные сайты. Скорее всего одни и те же юзеры долбят форму и посылают каждый раз новый запрос на одни и те же данные.
9.
Кевин Митник (02.09.2013 / 20:11)
вот интересность
http://domainapi.com/documentation/how-to-use-domainapi/servuces-provided/domain-whois-api.html
10.
ШЕДЕВР (02.09.2013 / 20:21)
спасибо ребята за помощь.
просто ситуация такая что это домены определенной зоны. он недавно открылся. и проверка whois и занятости домена осуществляет ТОЛЬКО ОДИН САЙТ, который постоянно то работает то не работает....
11.
ШЕДЕВР (03.09.2013 / 02:33)
$fp=fsockopen($host,80,$errno,$errstr,1);
попробую сегодня сделать так... таймаут с 1 секундой. если завтра утром сайт мой всё еще работает, значит нагрузки не было
12.
Алексей (05.09.2013 / 00:11)
Такой парсер никак не должен грузить сервер)
13.
ШЕДЕВР (03.10.2013 / 22:25)
в общем с fsockopen никак... хостер посоветовал попробовать переписать парсер на curl php ... есть у кого живой пример?
или помогите отредактировать этот, я готов даже заплатить за помощь.
<?php
/*Парсирование данных*/
function get_URL_by_socket($host,$path){
//$fp=fsockopen($host,80);
$fp=fsockopen($host,80,$errno,$errstr,1);
if(!$fp){
//die("Не могу получить данные с url http://$host/$path");
}
else{
$out="GET $path HTTP/1.0\r\n";
$out.="Accept: image/gif, application/xhtml+xml,*/*\r\n";
$out.="Accept-Language: ru\r\n";
$out.="Host: $host\r\n";
$out.="User-Agent: Opera/8.01 (J2ME/MIDP;Opera Mini/2.0.4509/1716; ru; U; ssr)\r\n";
$out.="Cache-Control: no-cache\r\n";
$out.="Connection: Close\r\n\r\n";
fwrite($fp,$out);
$headers="";
while($str=trim(fgets($fp)))
$headers.="$str\n";
$body="";
while(!feof($fp))
$body.= fgets($fp);
fclose($fp);
}
return $body;
}
?>
14.
ШЕДЕВР (07.10.2013 / 01:55)
cURL не такой и сложный
<?php
ini_set('max_execution_time',20);
function curl_get($host,$referer=null){
$ch=curl_init($host);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.17) Gecko/2009122116 Firefox/3.0.17');
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_TIMEOUT,20);
curl_setopt($ch,CURLOPT_REFERER,$referer);
ob_start();
curl_exec($ch);
print(curl_error($ch));
curl_close($ch);
return ob_get_clean();
}
?>
URL:
https://visavi.net/topics/38846