• ベストアンサー

画像が存在しない時の 「×」 表示をオフにしたい

img タグで画像を表示しようとした時、存在しないと 「×」 表示が出ますが、 その表示をオフにする方法ご存知でしょうか? 例えば IE のイメージツールバーをオフにする以下のような方法があると助かるのですが... <meta http-equiv="imagetoolbar" content="no"> $url = 'http://www.example.com'; $header = get_headers($url); $header_info = explode(" ", $header[0]); if($header_info[1] == 200) echo '<img src="http://www.example.com/picture01.jpg" />'; 上記の方法で file が存在するか確認してから表示してたのですが、 サーバーの応答によって検索スピードがかなり遅くなってしまうので 存在しないファイルもそのまま html を書いた方が速いかと思いました。 画像は自分のサーバーでは無いので file_exists は使えないのですが、 なにかアドバイスあれば教えて頂けると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

>おっしゃる通りなのですが、なぜか $header = get_headers($url); >を使うと、確認せずそのまま表示する場合に比べて >かなりスピードが落ちてしまいます。 それは受け取れなかったのでリトライしているのでしょう。 確実にヘッダを受け取るためにはそういうこともあってしかるべきサーバーの 仕様だと思います。 ヘッダさえ確認しないのであれば、なにも待つことはないのでスピードは 速いにきまってますね ちなみにPHPにこだわらないのであればjavascriptでこんな感じでどうでしょ? <img src="hoge.jpg" style="display:none" onload="this.style.display='inline'"> (javascriptなので環境依存ですが・・・)

yasu182
質問者

お礼

こんな裏技があったんですね! onload をイメージに使えるとは知らず勉強不足でした。 検索スピードも落とさず 見ためもすっきりした物に仕上がりました。 ありがとうございました!

その他の回答 (4)

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.5

>onload で画像の存在を調べることは可能なのでしょうか 可能だよ。 ただ、それによってphpを起動して となると全然違う複雑な物になるから逆によけい大変だよ。(ajaxで検索したら出てくる) php駆動の場合はjavascript側から投げて戻ってくるのを待たないとならないからね。

yasu182
質問者

お礼

これを機会に時間がある時に勉強してみますね 何度も回答ありがとうございました!

回答No.3

alt属性に空文字を指定してみるとか。 <img src="picture01.jpg" alt="" /> *HTML4.01/XHTMLではalt属性が必須です。

yasu182
質問者

お礼

alt="" で Firefox は対応出来ましたが、IE6 は出来ないようです。 しかし豆知識になりました。 回答ありがとうございます。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.2

imgの表示の挙動は完全にブラウザ依存だよ。 なぜphp側に投稿されてるか判らないけど。 こちらがどんなに工夫しても×で表示される環境は無くならない。 何故なら上記の通りブラウザ依存だから、最悪、ブラウザ利用者全員の環境設定が必要になるから。 有るか無いか判定してからじゃ時間かかるのは仕方ない。 判定をしてから表示させたくて、でも初っぱなの表示は早く、というならもうそれはjavascriptでやるしかない。 具体的には画像抜きを先に送ってonloadでimgを調べて差し込む形。 php側は画像を貼らず画像を貼る予定のnodeと、それを制御するjavascriptのソース(かリンク)をhtmlとして組み込んで送り出す形かな。

yasu182
質問者

お礼

>onloadでimgを調べて差し込む形 onload で画像の存在を調べることは可能なのでしょうか? onload から php を起動する方法があれば出来ると思うのですが、 よろしければ教えて頂けますでしょうか? onload からヒントを得て、php の最後に $header = get_headers($url); を使って、存在しない場合は以下のもので画像表示をオフに 書き換えることで少し改善しました。 document.getElementById(id_name).innerHTML = str; 回答ありがとうございます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>サーバーの応答によって検索スピードがかなり遅くなってしまうので 相手サーバーの処理待ちの間は、「画像があるかどうかわからない」 ということですよね? であれば、「ない場合は表示しない」ということは結局ないことが 確認できてからしか表示されないので、スピードが遅いことには 変わりありません。 よくフローを練り直してみてはどうでしょうか? 場合によってはcronあたりで定期的にチェックしてsqlで管理 しておけば、ある程度までは回避できるとおもいます。 かりに相手サーバーがおちていても、キャッシュとして吸い上げて しまえば、表示されないということはないでしょう。 それと他のサーバーの画像を(勝手に?)持ってくるのは著作権的には まずいとおもいますが、そのへんはクリアなのでしょうか?

yasu182
質問者

お礼

>それと他のサーバーの画像を(勝手に?)持ってくるのは著作権的には >まずいとおもいますが、そのへんはクリアなのでしょうか? ご指摘ありがとうございます。 契約してあるのでその辺は大丈夫です。 >「ない場合は表示しない」ということは結局ないことが確認できてからしか >表示されないので、スピードが遅いことには変わりありません。 おっしゃる通りなのですが、なぜか $header = get_headers($url); を使うと、確認せずそのまま表示する場合に比べて かなりスピードが落ちてしまいます。 get_headers($url); が全てのヘッダを取得するのでトップの一行だけ 取得するように改造すれば良いのかな、とも思いますが 改造の方法がちょっと検討つかず。 cron は初耳ですが、レンタルサーバーのロリポップでも使えるのでしょうか? 回答ありがとうございます。