-1

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;
}   

ありがとう

4

2 に答える 2

3

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);
}
于 2012-10-24T02:08:17.720 に答える
0

ヘッダーは \r\n だけを含む行でデータから分離されるため、explode を使用してデータを取得できます。curl オプションから CURLOPT_FILE を取り出し、返された文字列を分解して個別の部分を取得し、自分でファイルに保存します。

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

または、別のファイルを開き、 CURLOPT_WRITEHEADER オプションを使用してヘッダーを別のファイルに書き込むことができます

于 2012-10-23T08:11:52.240 に答える