Проксичекер на многопоточном CURL
код скрипта
Код:
<?
function ch($pr)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.cmyip.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_PROXY, $pr);
curl_setopt($ch, CURLOPT_PROXYTYPE , CURLPROXY_SOCKS5);
return $ch;
}
$proxies = array();
$proxies = array_unique(file('proxies.txt'));
$cmh = curl_multi_init();
for($i=0;$i<count($proxies);++$i)
{
$ch=ch($proxies[$i]);
curl_multi_add_handle($cmh, $ch);
}
$active = null;
do {
echo $mrc = curl_multi_exec($cmh, $active);
}
while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active) {
if (curl_multi_select($cmh) != -1) {
do {
$mrc = curl_multi_exec($cmh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
curl_multi_close($cmh);
?>
function ch($pr)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.cmyip.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_PROXY, $pr);
curl_setopt($ch, CURLOPT_PROXYTYPE , CURLPROXY_SOCKS5);
return $ch;
}
$proxies = array();
$proxies = array_unique(file('proxies.txt'));
$cmh = curl_multi_init();
for($i=0;$i<count($proxies);++$i)
{
$ch=ch($proxies[$i]);
curl_multi_add_handle($cmh, $ch);
}
$active = null;
do {
echo $mrc = curl_multi_exec($cmh, $active);
}
while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active) {
if (curl_multi_select($cmh) != -1) {
do {
$mrc = curl_multi_exec($cmh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
curl_multi_close($cmh);
?>
Назвать многопоточным данный код можно только условно. Скорее уж асинхронным (или мультизапросный). Потому что этот скрипт выполняется в одном потоке, просто код не блокируется в ожидании ответа с дескриптора. Обработка ответов происходит все равно в однопоточном режиме. Если результат выводится куда либо в конце работы скрипта, то время получения результата будет равно самому тормозному запросу (либо величине таймаута соединения).