Парсер и время выполнения скрипта.

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