简体   繁体   English

未调用cURL WRITEFUNCTION

[英]cURL WRITEFUNCTION not Being Called

When I run the following function it retrieves the HTML as expected, but the WRITEFUNCTION callback shows no signs of life. 当我运行以下函数时,它将按预期方式检索HTML,但是WRITEFUNCTION回调没有任何迹象。 Nothing gets echoed, and the variable $this->test_output remains unchanged. 什么也没有得到回应,变量$ this-> test_output保持不变。

function get_headers($urls){
    $curly = array();
    $result = array();
    $mh = curl_multi_init();
    $obj = $this;
    $test = function ($ch, $str) use ($obj){
        echo '<p class="red">--Hello World--</p>';
        $obj->test_output = 'Hello World';
        return strlen($str);
    };
    foreach ($urls as $key => $url) {
        $curly[$key] = curl_init();
        curl_setopt($curly[$key], CURLOPT_URL,            $url);
        curl_setopt($curly[$key], CURLOPT_HEADER,         0);
        if (is_callable($test)){
            curl_setopt($curly[$key], CURLOPT_WRITEFUNCTION, $test);
        } else {
            echo '<p class="red">--FUNCTION NOT VALID--</p>';
        }
        curl_setopt($curly[$key], CURLOPT_RETURNTRANSFER, 1);
        curl_multi_add_handle($mh, $curly[$key]);
    }
    $running = null;
    do {
        curl_multi_exec($mh, $running);
    } while($running > 0);
    foreach($curly as $key => $cnt) {
        $content = curl_multi_getcontent($cnt);
        curl_multi_remove_handle($mh, $cnt);
        if (strlen($content) > 0){
            $result[$key] = $content;
        } else {
            curl_multi_close($mh);
            return FALSE;
        }
    }
    curl_multi_close($mh);
    echo "<pre class='red'>";
    print_r($this->test_output);
    echo "</pre>";
    return $result;
}

It looks like cURL is a little buggy. 看起来cURL有点问题。 I wrote a simpler function and found that the WRITEFUNCTION only gets called when it is the last option to be specified. 我写了一个简单的函数,发现只有在指定最后一个选项时才调用WRITEFUNCTION。 When I placed that line before any of the other options, it was simply ignored: 当我将该行放在其他任何选项之前时,它只是被忽略了:

function get_html(){
    $url = 'http://www.example.com';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $str){return -1;});
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM