HTML5で画像ファイル存在判定

HTMLHTML5

Gist

 状態:-  閲覧数:2,285  投稿日:2015-04-02  更新日:2015-04-02
画像ファイルが存在すれば表示
・存在しなければ非表示


対応


HTML5 イベントハンドラ属性を使用することで対応可能

onerror 属性
・イベントハンドラ属性の一つ
・当該要素の処理に際してエラーが発生した際のイベント処理を指定
→ 「エラー発生時」 というイベントに対して、この属性値に指定された処理を実施

実装例
・画像読込エラーの場合は指定画像表示
<img src="<?php echo $targetPath; ?>" alt="" onerror="this.src='/images/noimage.jpg';">


調査履歴

 閲覧数:566 投稿日:2015-04-02 更新日:2015-04-03

当初予定


ファイル存在確認後、条件分岐
・file_exists()関数で、ファイル存在確認後、条件分岐しようと考えていた


問題発生


いざコーディング開始してみると
・パスは正しいのに期待した通り条件分岐しないことに気が付く
・ファイル存在しているのに全く認識してくれない

調査した結果判明した事実
・セーフモードではファイル操作系関数が使用不可
・getimagesize関数とか色々試すも、全滅

セーフモード環境下でのファイル存在確認
・こんなに難易度高いとは夢にも思わなかったよ

CGIモードへは変更したくない
・CGIモードへ変更すれば動作することは分かっているが、他への影響を考慮すると変更したくない


JSでファイル確認


最初に試した方法
・目的は達成できたが、コンソールにエラーが表示されまくっている
<script>
 function filesize (url) {
 // http://kevin.vanzonneveld.net
 // +   original by: Enrique Gonzalez
 // +      input by: Jani Hartikainen
 // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
 // +   improved by: T. Wild
 // %        note 1: This function uses XmlHttpRequest and cannot retrieve resource from different domain.
 // %        note 1: Synchronous so may lock up browser, mainly here for study purposes.
 // *     example 1: filesize('http://kevin.vanzonneveld.net/pj_test_supportfile_1.htm');
 // *     returns 1: '3'
 var req = this.window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
 if (!req) {
   throw new Error('XMLHttpRequest not supported');
 }

 req.open('HEAD', url, false);
 req.send(null);

 if (!req.getResponseHeader) {
   try {
     throw new Error('No getResponseHeader!');
   } catch (e) {
     return false;
   }
 } else if (!req.getResponseHeader('Content-Length')) {
   try {
     throw new Error('No Content-Length!');
   } catch (e2) {
     return false;
   }
 } else {
   return req.getResponseHeader('Content-Length');
 }
}
</script>

<td>
 <?php $targetPath = "/img/".$user['img_sample2']; ?>
 <script>
   var gazou = "<?php echo $targetPath; ?>";
   imgsize = filesize(gazou);
   if(imgsize >300) {
     document.write('<a href="<?php echo $this->escape($user['url']); ?>"><img src="<?php echo $targetPath; ?>" alt=""></a>');
   }
 </script>
</td>


最終的に

 閲覧数:530 投稿日:2015-04-02 更新日:2015-04-02
Link
imgタグでエラー時の画像をonerror属性で設定する方法

これから確認予定
HTML5時代の「新しいセキュリティ・エチケット」



HTML5では、「input 要素」「button 要素」を「フォームタグ」の外で直接記述しても良い

HTML5タグ 及び テンプレート



週間人気ページランキング / 4-30 → 5-6
順位 ページタイトル抜粋 アクセス数
1 「パッケージ化されてない拡張機能を読み込む」でインストールした拡張は、chromeを「更新」すると正常動作しなくなることがあります。 | Chrome 拡張機能 8
2 血の色 / #b30000 / #360800 / #ff0000 | カラーコード(色) 6
3 ChromeブックマークURL重複検出が出来ない / 仕様変更に伴いURL重複登録できなくなった | Chromeブックマーク(ブラウザ) 5
4 Chromeデベロッパーツールで、スマホソースコードを確認したいが、USBデバッグ機能をどうしても有効にすることが出来ない | モバイルデザイン(デザイン) 4
4 16進数カラーコード / 2進数 4
5 画像ライセンスは大きく3種類に分かれる。「All rights reserved」+「クリエイティブ・コモンズ・ライセンス」+「その他」 | 画像著作権(画像) 3
5 鉄道会社毎のカラーコード | カラーコード(色) 3
5 「Google Chrome」ブックマークをフォルダー単位で、「ドメイン毎」「追加日昇降順」に並べ替える拡張機能「Sortmark」 | Chrome 拡張機能 3
5 「文春オンライン」に掲載されている画像を「Google Chrome」ブラウザでダウンロードするためには、chrome拡張機能「Absolute Enable Right Click & Copy」を使用します。 | 画像 3
6 「Chrome拡張機能」開発中に遭遇したエラー | Chrome 拡張機能 2
6 「Bootstrapデザイン」✕「円グラフ」解析 | 2系(Bootstrap) 2
6 RGBの種類 / ビットカラー | RGB(色) 2
6 キャラクター無料作成ジェネレーター / FLASH / オンラインサービス | イラスト参考(デザイン) 2
7 CSS Flexible Box Layout Module Level 1 | Flexible Box Layout Module(CSS) 1
7 直前の要素、直後の要素 | CSS 1
7 FontAwesomeでアイコンが□(四角)になって表示されない Forbidden  | Font Awesome(フォント) 1
7 「マウスオーバー」「ロールオーバー」「ホバー」の違い | CSS 1
7 JavaScript in Bootstrap | 2系(Bootstrap) 1
7 「東京都」のカラーコード取得は難しい | カラーコード(色) 1
7 HSL → RGB 計算方式の違い | 色変換(色) 1
2025/5/7 1:01 更新