search

Home  >  Q&A  >  body text

linux - PHP uses curl to process file download url connections, and encounters some problems

  1. The url connection is a download link for a .gz compressed file

  2. Generally, the method of using curl to process data to return data will use

  3. But when it came to processing downloaded files, I was confused.

  4. Please give me some advice from the masters you have met

public static function curl($url, $params = false, $ispost = 0, $https = 0)
    {
        $httpInfo = array();
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36');
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        if ($https) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
        }
        if ($ispost) {
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
            curl_setopt($ch, CURLOPT_URL, $url);
        } else {
            if ($params) {
                if (is_array($params)) {
                    $params = http_build_query($params);
                }
                curl_setopt($ch, CURLOPT_URL, $url . '?' . $params);
            } else {
                curl_setopt($ch, CURLOPT_URL, $url);
            }
        }

        $response = curl_exec($ch);

        if ($response === FALSE) {
            //echo "cURL Error: " . curl_error($ch);
            return false;
        }
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $httpInfo = array_merge($httpInfo, curl_getinfo($ch));
        curl_close($ch);
        return $response;
    }
習慣沉默習慣沉默2715 days ago818

reply all(2)I'll reply

  • 给我你的怀抱

    给我你的怀抱2017-06-10 09:49:47

    Generally, the method of using curl to process data when returning data is to use
    Just write the returned content using file_put_contents

    file_put_contents(__DIR__.'/yourfilename.ext', $response);

    reply
    0
  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-06-10 09:49:47

    Do it like this

     //分离header与body  
        $header = '';  
        $body = '';  
        if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {  
            $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); //头信息size  
            $header = substr($response, 0, $headerSize);  
            $body = substr($response, $headerSize);  
        }  
       curl_close($ch);  
    
       //文件名  
        $arr = array(); $savePath = "/"; 
        if (preg_match('/filename="(.*?)"/', $header, $arr)) {  
      
            $file = date('Ym') . '/' . $arr[1];  
            $fullName = $savePath . '/' . $file;  
      
            //创建目录并设置权限  
            $basePath = dirname($fullName);  
            if (!file_exists($basePath)) {  
                @mkdir($basePath, 0777, true);  
                @chmod($basePath, 0777);  
            }  
           
            
            file_put_contents($fullName, $body);
        }  

    reply
    0
  • Cancelreply