2

以下に関数を書きました:

function download_xfs($url)  
{
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_COOKIE, 'login=michael; xfss=08ruiweu4tuhb5xqs8');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $string = curl_exec ($ch);  
    curl_close ($ch);  
    // Set headers
}

使用するdownload_xfs("http://address.com/file.html");と、実際のファイルではなくファイルのバイナリが返されます。誰でもこのコードを書き直して、ダウンロード用のファイルを処理できますか?

4

1 に答える 1

0

あなたのエラーはファイルのダウンロードではありません.PNGはおそらくダウンロードされますが、おそらくそれを画面に表示するだけです. このファイルの MIME タイプに適した HTTP ヘッダーを設定する必要があります。

header( 'コンテンツ タイプ: 画像/png' );

ただし、画像コンテンツの前後に他の文字列/文字をエコーし​​ないことを忘れないでください (絶対に何も、php ファイルの先頭にある Windows のメモ帳によって作成された UTF に関する目に見えない BOM 情報であっても)。サーバーがダウンロード可能な画像を HTML ページに含めたい場合は、このヘッダーと画像コンテンツを含む別の .php を作成し、次のようにして含める必要があります。

<img src="image_from_download.php">

プレーンテキストを受け取りたいが、予期しないバイナリがある場合

リモートサーバーには、ユーザーエージェントに応じて別のものを送信したり、画像にリダイレクトしたりする未知のソリューションが存在する可能性があります。

cUrl のユーザー エージェントを元のブラウザーと同じに設定してみてください。

Acceptまた、 HTTPリクエストで適切なヘッダーを送信することにより、リモートサーバーによって提供されるコンテンツがgzipまたはチャンクされていないことを確認してください(curlが自動的に解凍することはわかりませんか?) 。

この問題は状態にも依存する可能性があります。おそらく、いくつかの Cookie を設定する必要があるか、.html を取得している場所からリモート Web アプリケーションにログインする必要があります。

をオフにしてみてくださいFOLLOWLOCATION。画像への 30x リダイレクトを受け取った可能性があります。

于 2013-01-26T11:46:04.143 に答える