如何使用PHP从.txt中删除代理

时间:2013-05-29 17:31:42

标签: php curl

好的,我基本上想要的是,一旦来自“proxies.txt”的代理被用于它然后被移动到诸如“used.txt”之类的文件,所以只有新的未使用的代理保留在“代理”中.txt“因为id抓取程序我每次启动都从列表的最顶端开始,每个代理每24小时只能抓一次ID。

{
switch(@$argv[1]) {
    case '0':
    default:
        $list = fopen('proxies.txt', 'r');
        while(!feof($list))
        {
            $proxy = fgets($list);
            $idGen->generate($proxy);
        }
        fclose($list);
    break;
}
$loop++;
usleep(50000);
$idGen->report('Starting loop #'.$loop);

}

还有一种方法可以让它删除死代理当前的curl设置

$tries = 0;
    $xData = '';
    $timeout = 3;
    //echo "Tries -> ";
    while($xData=='' && $tries < 3) {
        $ch = curl_init(); //curl init :D
        curl_setopt($ch,    CURLOPT_URL,                'website.com/idauth.php?t='.rand(100000000000,1000000000000000000000000000000000)); //url
        curl_setopt($ch,    CURLOPT_PROXY,              $proxy);
        curl_setopt($ch,    CURLOPT_RETURNTRANSFER,     1);
        curl_setopt($ch,    CURLOPT_CONNECTTIMEOUT,     $timeout);
        curl_setopt($ch,    CURLOPT_TIMEOUT,            $timeout);
        $data = curl_exec($ch);
        curl_close($ch);
        $rdata = $data;
        if(@$data{0} == '<') { 
            return;//Bad Proxy Detected.
        }
        if(strpos($data, 'Not Found') != FALSE) { 
            $data = '&UserId=0&k1=0&k2=0';
        }
        if($data != '&UserId=0&k1=0&k2=0') {
            if(strpos($data, '&k2=0') != FALSE) { 
                $data = '&UserId=0&k1=0&k2=0';
            } else {
                $xData = $data;
            }
        } else {
            echo $data."\n";
        }
        $tries++;
        }

    if($xData=='') {
        return;//Dead Proxy
    }

1 个答案:

答案 0 :(得分:0)

将整个代理列表加载到一个数组中,进行操作并在完成后重写整个文件。

当您在请求中执行多线程时,可能会在数据库中更好地工作,这对您的问题来说似乎很自然。在这种情况下,只需删除等。

在你的顶级函数范围之外的某个地方:

$proxies = array()
function load_proxies() {
        global $proxies;
        $list = fopen('proxies.txt', 'r');
        while(!feof($list))
        {
            $proxy = fgets($list);
            $proxies[] = $proxy;
        }
        fclose($list);
}

function get_proxy() {
    global $proxies;
    return array_pop($proxies);
    //here you may want to save over proxies.txt, and write out the chosen proxy to used.txt
}