How use CURLOPT_WRITEFUNCTION when download a file by CURL

后端 未结 4 1547
陌清茗
陌清茗 2021-01-20 04:10

My Class for download file direct from a link:

MyClass{

          function download($link){
                ......
                $ch = curl_init($link);
          


        
4条回答
  •  -上瘾入骨i
    2021-01-20 04:31

    I know this is an old question, but maybe my answer will be of some help for you or someone else. Try this:

    function get_write_function(){
        return function($curl, $data){
            return strlen($data);
        }
    }
    

    I don't know exactly what you want to do, but with PHP 5.3, you can do a lot with the callback. What's really great about generating a function in this way is that the values passed through the 'use' keyword remain with the function afterward, kind of like constants.

    function get_write_function($var){
        $obj = $this;//access variables or functions within your class with the object variable
        return function($curl, $data) use ($var, $obj) {
            $len = strlen($data);
            //just an example - you can come up with something better than this:
            if ($len > $var){
                return -1;//abort the download
            } else {
                $obj->do_something();//call a class function
                return $len;
            }
        }
    }
    

    You can retrieve the function as a variable as follows:

    function download($link){
        ......
        $var = 5000;
        $write_function = $this->get_write_function($var);
        $ch = curl_init($link);
        curl_setopt($ch, CURLOPT_FILE, $File->handle);
        curl_setopt($ch, CURLOPT_WRITEFUNCTION , $write_function);
        curl_exec($ch);
        curl_close($ch);
        $File->close();
        ......
    
    }
    

    That was just an example. You can see how I used it here: Parallel cURL Request with WRITEFUNCTION Callback. I didn't actually test all of this code, so there may be minor errors. Let me know if you have problems, and I'll fix it.

提交回复
热议问题