Код:
<?php @set_time_limit(0); $filename = 'sitesproxy.txt'; $n = 15; //количество потоков при проверке проксей $regular = '#[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]{2,5}#'; $ban = array(); $proxy = array(); foreach (file($filename) as $url) { $url = trim($url); $page = curlPage($url); preg_match_all($regular, $page, $p); if (!count($p[0])) $ban[] = $url; else $proxy = array_merge($proxy, $p[0]); } $proxies = __array_unique($proxy); $countProxy = count($proxies); if ($countProxy <= $n) { chk($proxies); } else { $c = floor($countProxy / $n); for ($i = 1; $i <= $c; $i++) chk(array_slice($proxies, $n * $i, $n)); chk(array_slice($proxies, $n * ($c + 1), $countProxy - $n * $c)); } if (count($ban) == 1) echo '<hr>Сайт не принес пользы: ' . $ban[0]; if (count($ban) > 1) { echo '<hr>Сайты не приносят пользы:<br>'; foreach ($ban as $sitename) echo $sitename . '<br>'; } function chk($proxies) { $mc = curl_multi_init (); for ($thread_no = 0; $thread_no < count($proxies); $thread_no++) { $c [$thread_no] = curl_init (); curl_setopt($c [$thread_no], CURLOPT_URL, "http://google.com"); curl_setopt($c [$thread_no], CURLOPT_HEADER, 0); curl_setopt($c [$thread_no], CURLOPT_RETURNTRANSFER, 1); curl_setopt($c [$thread_no], CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($c [$thread_no], CURLOPT_TIMEOUT, 10); curl_setopt($c [$thread_no], CURLOPT_PROXY, trim($proxies [$thread_no])); curl_setopt($c [$thread_no], CURLOPT_PROXYTYPE, 0); curl_multi_add_handle($mc, $c [$thread_no]); } do { while (($execrun = curl_multi_exec($mc, $running)) == CURLM_CALL_MULTI_PERFORM) if ($execrun != CURLM_OK) break; while ($done = curl_multi_info_read($mc)) { $info = curl_getinfo($done ['handle']); if ($info ['http_code'] == 301) echo trim($proxies [array_search($done['handle'], $c)]) . "<br>\r\n"; curl_multi_remove_handle($mc, $done ['handle']); } } while ($running); curl_multi_close($mc); } function curlPage($url) //curl { if (!function_exists('curl_init')) die('На сервере не установлено или отключено расширение cURL. Скрипт завершил работу.'); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); @curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Accept-Language: ru,en-us;q=0.7,en;q=0.3', 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json', 'User-Agent: Mozilla/5.0 (X11; U; Gentoo-Linux; ru; rv:1.9.2.3)socks-php-bot Gecko/20100404 Firefox/3.7.0 GTB7.0', 'Accept-Encoding: deflate', 'Accept-Charset: UTF-8,*')); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 300); return curl_exec($curl); } function __array_unique($array) { $r = array(); foreach ($array as $key => $value) { if (!in_array($value, $r)) $r[] = $value; } return $r; }