PHP で画像をリクエストしレスポンスしてみる

ふと思い立って、PHP で画像を取得し、それをレスポンスしてみようと思った。

何を言っているかというと、

<img src="./example.php">

というように PHP ファイルを img 要素として表示するよう指定した時に、PHP 内では他所から画像ファイルを取得して、それを表示するようなプログラムを書いてみたかったのだ。

ちょっと調べたところ、以下のようなコードで実現できた。

<?php

$url = 'http://example.com/example.php';  // 画像の URL パス

$curl = curl_init($url);  // curl を準備する
curl_setopt($curl, CURLOPT_CUSTOMREQUEST , 'GET');  // メソッドを指定する
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);  // 証明書の検証を行わない
curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);  // レスポンスを文字列で受け取らない
$response = curl_exec($curl);  // curl を実行する
curl_close($curl);  // curl を閉じる

header('Content-Type: image/png');  // ヘッダを指定する
print $response;  // 取得したレスポンス (画像) を出力する

?>

PHP はブラウジングしているクライアントサイドではなく、サーバサイドが実行基盤になるので、画像ファイルにリクエストを出す接続元は、サーバサイドになる。クライアントサイドから直接アクセスできない画像ファイルなんかは、このようにサーバサイドがプロキシとなって代わりに取得してやることもできるだろう。