概要
通常Webで画像を表示する場合、imgのsrc属性に画像が置いてあるURLを指定するというのが一般的だと思います。 しかし、画像を置いてあるURLを指定するというのは、画像を表示するためにはそのURLにアクセスできるということを表しています。
そこで、PHPを使って画像のURLを指定しない方法で画像を表示する方法を紹介します。
環境
- PHP 7.3
どのようにするのか
imgタグのsrc属性には、画像の場所を表すURLを指定する方法もありますが、画像のデータをBase64という方式にエンコードしたものを指定する方法もあります。
つまり、PHPを使って画像をBase64という方式にエンコードし、それをimgタグのsrc属性に設定すれば良いというわけです。
やってみよう
PHPで、BASE64でエンコードするのは関数が用意されているため簡単です。 また、エンコードする画像ファイルを取得するのを関数が用意されているので簡単にできます。
$file = file_get_contents(IMAGE_DIR);
$encoded_file = base64_encode($file);
画像ファイルの取得はfile_get_contents関数を使うことでできます。引数にはファイルのパスを指定します。 画像ファイルのエンコードはbase64_encode関数を使うことでできます。引数にはエンコードしたいファイルを指定します。
次にようにしてエンコードしたデータをimgタグに指定します。
<!-- png画像の場合 -->
<img src="data:image/png;base64,<?php echo $encoded_file ?>">
<!-- jpg画像の場合 -->
<img src="data:image/jpg;base64,<?php echo $encoded_file ?>">
<!-- gif画像の場合 -->
<img src="data:image/gif;base64,<?php echo $encoded_file ?>">
<!-- svg画像の場合 -->
<img src="data:image/svg+xml;base64,<?php echo $encoded_file ?>">
画像の種類ごとに微妙に内容が変わるため、気をつける必要があります。
さいごに
結構簡単に、できたように感じます。
これで誰からもWebサーバを介してファイルへアクセスできないようにしておいて、ファイルの表示はプログラムを使ってアクセス制御をしながら表示するということができるようになります。