Пишу скрипт по парсеру и чекалке проксей, накатал быстро скрипт, только он гад такой работает сильно долго... Если кто-нибудь сможет переделать его и увеличить буду очень блогодарен. Срочно нужно.... PHP: <?php set_time_limit(0); $fp = fsockopen("proxy.shternov.ru", 80, $errno, $errstr, 30); if ($fp) { $out = "GET / HTTP/1.1\r\n"; $out .= "Host: proxy.shternov.ru\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); $fgets = ''; $content = ''; while(!feof($fp)) { $content .= fread($fp,8192); } fclose($fp); preg_match_all ("#(bgcolor=\#FFFFFF><td>)(.*?)(<\/td><td>)(.*?)(<\/td><td title=)#si", $content, $matche1); $count_proxy = count($matche1[2]); for ($i = 0; $i <= $count_proxy; $i++) { $fp = fsockopen($matche1[2][$i], $matche1[4][$i], $errno, $errstr, 30); if ($fp) { $out = "GET http://www.ya.ru/ HTTP/1.1\r\n"; $out .= "Host: ya.ru\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); $fgets = ''; $content = ''; while(!feof($fp)) { $content .= fread($fp,8192); } fclose($fp); preg_match_all ("#(<title>)(.*?)(<\/title>)#si", $content, $matche1); if($matche1['2']['0'] == 'Яndex') { // echo "$matche1[2][$i]:$matche1[4][$i]<br>".flush(); $file = fopen ("proxy/proxy.txt","a+"); $str = "$matche1[2][$i]:$matche1[4][$i]\n"; if ( $file ) { fputs ( $file, $str); } fclose ($file); } } } } ?>
http://forum.aoh.name//index.php?act=ST&f=22&t=121&st=0 Многопоточная чекалка проксей от AOH Работает как по списку проксей так и по диапозону Тестировпалась в nix осях. В винде работает немного дольше
2Slon Он вообще-то на Perl написан, а там интерфейс для создания потоков есть, в отличие от PHP. Про "переделку в cgi": сотри и подумай, что написал. 2DIAgen Погугли на тему "пул неблокирующих сокетов"
По идеи мне скорость не нужна, просто мне нужны живые прокся, и проверка будет идти раз в сутки и все, сейчас буду разбераться, может что-нибудь смого придумать....
PHP: $fp = fsockopen($matche1[2][$i], $matche1[4][$i], $errno, $errstr, 30); Лимит времени поставь меньше, есле прокся мертвая незачем 30 секунд ждать. достаточно 3 PHP: while(!feof($fp)) { $content .= fread($fp,8192); } preg_match_all ("#(<title>)(.*?)(<\/title>)#si", $content, $matche1); if($matche1['2']['0'] == 'Яndex') а не проще ли проверять номер статуса страницы? 200 OK и тогда не обязательно всю страницу грузить! достаточно загрузить первую строку. PHP: if(strstr(fgets($fp),'200 OK')) .....