<?
define("_THREAD", 100);//больше 100 потоков этот URL не выдерживает эффективно
define("_TRY", 1);//по поводу нескольких попыток, что-то я заглючил с multiCURL-ом, поэтому не трогаем
define("_URL", "http://zerg.helllabs.net/cgi-bin/textenv.pl");
define("_TIME", 40);//+ 5-10 секунд по сравнению с тем, что нам надо
//--------------------------------------------------------------------------------
error_reporting(E_ALL);
set_time_limit(0);
ignore_user_abort(TRUE);
ob_implicit_flush();
//--------------------------------------------------------------------------------
//$fpi=fopen('2check.txt','r');
$fpi=fopen('_2check(x20).txt','r');//файл для чека
//$fpo=fopen('checked.txt','w');
$fpo=fopen('checked.txt','a');//сюда складываются все прокси
$fpc=fopen('CoDeeN.txt','a');//а сюда все CoDeeN-прокси
$count=0;
$i=0;
$mh=curl_multi_init();
$ch=array();
$proxy=array();
while(!feof($fpi))
{
$proxy[$i]=trim(fgets($fpi, 4096));
$ch[$i]=curl_init();
//curl_setopt($ch[$i],CURLOPT_URL,"http://ya.ru");
curl_setopt($ch[$i],CURLOPT_URL,_URL);
curl_setopt($ch[$i],CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch[$i],CURLOPT_CONNECTTIMEOUT,_TIME);
curl_setopt($ch[$i],CURLOPT_TIMEOUT,_TIME);
curl_setopt($ch[$i],CURLOPT_PROXY,$proxy[$i]);
curl_multi_add_handle($mh,$ch[$i]);
$i++;
if($i==_THREAD)
{
for($j=0;$j<_TRY;$j++)
check($mh,$ch,$proxy);
for($j=0;$j<_THREAD;$j++)
curl_multi_remove_handle($mh,$ch[$j]);
curl_multi_close($mh);
$i=0;
$mh=curl_multi_init();
$ch=array();
$proxy=array();
echo (++$count)."\n";
}
}
function check(&$mh,&$ch,&$proxy)
{
global $fpo,$fpc;
curl_multi_exec($mh,$running);
$active = null;
do
$mrc = curl_multi_exec($mh, $active);
while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK)
if (($qwe=curl_multi_select($mh,1)) != -1)
do
$mrc = curl_multi_exec($mh, $active);
while ($mrc == CURLM_CALL_MULTI_PERFORM);
/*такая конструкция почему-то грузит проц в отличии от предыдущей
do
{
curl_multi_exec($mh,$running);
}
while($running>0);
*/
for($j=0;$j<_THREAD;$j++)
{
$data=curl_multi_getcontent($ch[$j]);
$temp=curl_getinfo($ch[$j]);
if($data!='')//довольно сомнительная проверка, но она выделяет всех тех, что хотя бы ответил
{
if(strpos($data,"CoDeeN")!==FALSE)//CoDeen
{
fwrite($fpc,$proxy[$j]."\r\n");
}
else
{
fwrite($fpo,$proxy[$j]."\r\n");
}
}
}
}
fclose($fpi);
fclose($fpo);
?>