プログラミング雑記

【 PHP 】imagecreatefromwebp でファイルによってエラーになる場合の原因

楠 剛毅(goke)

個人開発から世界を変えるようなプロダクトづくりを目指しています

はじめに

webで利用する画像ファイルはwebpにするのがページ表示速度の観点でコスパが良いという記事を書いていました。webpを使い始めると、それに関連する関数の登場頻度が上がるのですが、imagecreatefromwebpでハマったことがあったのでまとめます。

ファイルによって読み込めない

下記のコードをご覧ください。

<?php
$source = 'img/aaa.webp';
imagecreatefromwebp($source);
?>

たった2行なのですが、これがうまくいかないケースがありました。
ここで利用している「aaa.webp」はネット上で公開されていたwebpファイルだったのですが、どうもこのファイル特有の問題があるようです。
そこで下記のようにしてみました。

<?php
$source = 'img/aaa.webp';
$file_info = new finfo(FILEINFO_MIME_TYPE);
$mime_type = $file_info->file($source);
echo $mime_type;
echo "<br>";
print_r (pathinfo($badwebpFilePath));
?>

その結果、出力されたのが下記です。

image/jpeg
Array ( [dirname] => ./images [basename] => bad_file.webp [extension] => webp [filename] => bad_file ) 

つまり、拡張子が「webp」となっていたのですが、実際jpegだったということです。
MIMEと拡張子についてはこちらで詳しく記事化されていますが、実際はJPEGファイルであるにもかかわらず、拡張子をwebpと書き換えることは可能であり、ファイルとしては問題なく表示されるということですね。
ちなみに、下記はうまくいきます。

<?php
$source = 'img/aaa.webp';
imagecreatefromjpeg($source);//.webpだがjpegで読み込む
?>

こういった場合の影響を抑えるには拡張子を信じずにMIMEを見て判断するということになると思います。

最後に

gokeでは上記のようなプログラムを駆使して新しいサービスを制作しています。気になることなどがあればコメントまたはTwitterでご連絡ください。

  • この記事を書いた人

楠 剛毅(goke)

個人開発から世界を変えるようなプロダクトづくりを目指しています

-プログラミング雑記