PHP で画像を読み込んで、ブラウザに表示させる
PHP でサーバー内の画像を読み込んで、画像データをブラウザに出力して画像を表示させる。
サーバー内に保存された画像データをファイルから読み込む場合
<?php $image_path = 'images/sample.jpg'; if (file_exists($image_path)) { header('Content-Type: image/jpeg'); // fileread から readfile に訂正 readfile($image_path); } ?>
上記のファイルが、URL で http://localhost/image.php にあるとした場合、PHP ファイルにアクセスをすることで、http://localhost/images/sample.jpg の画像を表示させることができる。
メモリ上に展開された画像データ (ストリームやバイナリデータ) を表示させたい場合
<?php $image_path = 'images/sample.jpg'; if (file_exists($image_path)) { $fp = fopen($image_path,'rb'); $size = filesize($image_path); $img = fread($fp, $size); fclose($fp); header('Content-Type: image/jpeg'); echo $img; } ?>
とすることで、http://localhost/image.php にアクセスすると、http://localhost/images/sample.jpg を表示させることができる。
注意
画像データはバイナリーデータのため、header 関数出力以前に何かしらのデータが(echo 関数や print 関数等で)出力され (ブラウザに送られ) たり、画像データを出力した後に、何かしらのデータが出力されると正常に画像が表示されない(たいていは PHP ファイルの URL がブラウザに表示される)。
例えば、
- 実行パスが記述されている場合
#!/usr/bin/env php <- この実行パスがブラウザに送られてしまう <?php (後略)
(前略) ?> <- この改行された部分がブラウザに送られてしまう
正しくはファイルの末尾に改行コードを含ませないで保存する。
(前略) ?> <- ファイルの末尾を php のタグで終了させる