【问题标题】:Separate header from curl when saving to file [closed]保存到文件时将标头与 curl 分开[关闭]
【发布时间】:2012-10-12 17:31:28
【问题描述】:

我使用 curl 下载了一个 json 文件,并且该脚本运行良好。但是我需要 CURLOPT_HEADER 的标头将其保存到单独的文件中或添加到输出数组而不是同一个文件中,这可能吗?现在所有内容都保存到这个文件中,我需要将文件头与文件分开,这是一个不必要的过程。

    /** 
 * Send a GET requst
 * @param string $get 
 * @return string 
 */ 
public function curl_get(array $get = NULL) 
{  

    $url = $get['host'] .'/'. $get['service'];
    $filename = PLUGIN_BASE . 'logs/'. $get['service'] .'_'. $this->nice_filename();
    $fp = fopen($filename, 'w');

    unset($get['host']);
    unset($get['service']);

    $defaults = array( 
        CURLOPT_URL => $url. (strpos($url, '?') === FALSE ? '?' : ''). http_build_query($get), 
        CURLOPT_HEADER => 1, 
        CURLOPT_RETURNTRANSFER => TRUE, 
        CURLOPT_TIMEOUT => 30,
        CURLOPT_FILE => $fp
    ); 

    $ch = curl_init(); 
    curl_setopt_array($ch, ($defaults)); 
    if( ! $result = curl_exec($ch)) 
    { 
        //$result = curl_error($ch); 
        $filename = trigger_error(curl_error($ch)); 
    } 

    curl_close($ch); 
    fclose($fp);

    $arg = array(
        'file'=>$filename,
        'curl_id'=>$fp
    );

    return $arg;
}   

谢谢

【问题讨论】:

    标签: php wordpress curl header


    【解决方案1】:

    您可以使用CURLOPT_HEADERFUNCTION 指定一个函数,该函数会像这样为收到的每个标头调用:

    function readHeader($ch, $header)
    {
        // do something with the value of `$header`
    
        // you must return the length of the header that you received
        return strlen($header);
    }
    

    【讨论】:

      【解决方案2】:

      标题与数据用一行只包含 \r\n 分隔,因此您可以使用explode 来获取数据。从 curl 选项中取出 CURLOPT_FILE,将返回的字符串分解得到单独的部分,然后自己保存到文件中。

      list($header , $data) = explode("\r\n\r\n" , $result , 2);
      

      或者您可以使用打开另一个文件并使用 CURLOPT_WRITEHEADER 选项将标题写入单独的文件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-20
        • 2016-12-20
        • 2013-02-09
        • 1970-01-01
        • 2013-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多