画像ファイルの有無を確認し、表示・非表示を切り替える

電脳備忘録

指定した場所に特定の名前のファイルがあるかを確認する必要があったので、調べて実装したときのメモ。
こちらの記事が参考になりました。

PHPでファイルの存在を確認する関数の使い方を現役エンジニアが解説【初心者向け】

TechAcademyマガジン

<?php $filename = 'photos/image.jpg';
if (file_exists($filename)) : ?>
<li><img src="<?php echo esc_url( home_url( '/' ) ); ?>photos/image.jpg" alt="<?php the_field('pic_title'); ?>"></li>
<?php endif; ?>

画像URLを指定してファイルの有無を判定するにはfile_get_contents関数を使うとよいみたい。ただファイルファイルが存在しないとエラーを返されるので、 get_headers() でファイルの存在を確認しています。()
下記の例は.webp画像が存在したらsourceを表示、そうでなければ通常のimgタグを表示する設定です。
mt:AssetURLで呼び出される画像リンクの拡張子はjpgかpngであり、別でwebpファイルをアップしているので、画像リンクの拡張子を.webpに書き換えて、ファイルが存在するか確認しています。

<?php
$filename = '<mt:AssetURL/>';
$ext = pathinfo($filename, PATHINFO_EXTENSION); // 拡張子を取得
if ($ext == "jpg") {
$webp_url = str_replace('.jpg', '.webp', $filename); // ".jpg" を ".webp" に置き換える
} elseif ($ext == "png") {
$webp_url = str_replace('.png', '.webp', $filename); // ".png" を ".webp" に置き換える
} else {
$webp_url = $filename; // それ以外の場合はURLをそのまま使う
}
if (@get_headers($webp_url)[0] == 'HTTP/1.1 200 OK') {
$webp_content = file_get_contents($webp_url);
}
if (isset($webp_content)) : ?>
<picture>
<source srcset="<?php echo $webp_url; ?>" type="image/webp" />
<img src="<mt:AssetURL/>" <?php $file = "<mt:AssetURL/>"; echo $fileSize = getimagesize($file)[3]; ?> alt="<$MTEntryTitle$>" >
</picture>
<?php else: ?>
<img src="<mt:AssetURL/>" <?php $file = "<mt:AssetURL/>"; echo $fileSize = getimagesize($file)[3]; ?> alt="<$MTEntryTitle$>" >
<?php endif; ?>

MovableTypeの記述だけどWordPressにも転用できますね。需要はなさそうですが・・・。

広告

ブログの維持費に充てるでございます・・・。