PHPイメージプロキシスクリプトを作成しています。リクエストした画像の内容をエコーするだけでなく、画像リクエストのヘッダーも同じように再現する必要があります。
私は一方と他方を見てきましたが、両方を一緒に見たわけではありません...そしてこれらのcURLオプションは私を混乱させます。どうすればいいですか?
申し訳ありませんが、何が欲しいのかわかりません。
これは、画像のURL、エコーヘッダーから取得し、画像をファイルに保存する例です。
ただし、プロキシが必要な場合は、Webサーバー(Nginx、Apacheなど)を使用する必要があります。PHPは必要ありません。
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://img3.cache.netease.com/www/logo/logo_png.png");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_REFERER, "http://www.163.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$return = curl_exec($ch);
curl_close($ch);
list($header, $image) = explode("\r\n\r\n", $return, 2);
echo $header;
file_put_contents("/tmp/logo.png", $image);
すべてのヘッダー(生のテキストとしてではなく)を次のように取得できますgetallheaders()
次に、それらをつなぎ合わせます。
$headers = "";
foreach (getallheaders() as $name => $value) {
$headers = "$name: $value\r\n";
}
$headers .= "\r\n"; // Double newline to signal end of headers (HTTP spec)
次に、CURLのようにではなく、ソケット接続を使用するのが最善の方法だと思います。
$response = '';
$fp = fsockopen('example.org', 80);
fputs($fp, $headers);
while (!feof($fp)) {
$response .= fgets($fp, 128);
}
fclose($fp);
ホスト/リクエストヘッダーを変更する必要がある場合があり(これはあなたが尋ねたように同一のコピーであるため)、リダイレクトフォローを実装する必要がある場合があることに注意してください。