人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpのgetimagesizeという関数についての質問です。

リモートの画像ファイルの情報を取得して、リサイズした上でサーバに保存し、携帯用に縮小画像を表示させたいと思っています。そこで、まずgetimagesizeで任意のリモート画像の情報を取得しに行くのですが、これが成功したりしなかったりします。

失敗した時は

Warning: getimagesize() [function.getimagesize]: Unable to access http://www.hoge.com/fuga.jpg in piyo.php on line **

Warning: getimagesize( http://www.hoge.com/fuga.jpg) [function.getimagesize]: failed to open stream: No such file or directory in piyo.php on line **

といった感じのWarningが出ます。実際にファイルが存在しない訳ではなく、存在しているのにNo such fileと出てしまうので、とまどっています。また、Warningが出るケースと出ないケースにおいて、ドメイン等に法則性は認められませんでした。なぜ取得できたりできなかったりするのかが分かりません。


何か見落としている点や、手がかりがありましたらご教示ください。宜しくお願いします。

●質問者: mine-D
●カテゴリ:ウェブ制作
✍キーワード:access ON open PHP Stream
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● wizemperor
●35ポイント

タイムアウトしている可能性が高いですね。

つまり、相手のサーバ側の反応が遅いなど。

共用サーバでは、他の人に迷惑をかける可能性があるので、

スクリプトの実行時間が制限されているはずです。

XREAはたしか1分とかその辺じゃなかったかな。

他に考えられるのは、相手側のサーバでそういった画像の直接の呼び出しを拒否してるとか。

対策としては、タイムアウトしたアドレスは記録しておいて、

次回の巡回時に再度取得してみるとかそんな感じですかね。

だめなら専用サーバを借りたりとか。

◎質問者からの返答

タイムアウトという発想はなかったです。なるほどー。勉強になります。

XREAの実行時間制限については調べてみますね。

画像の直リンは、実際Warningが出ている画像でやってみたんですが普通に表示できたので、可能性としては低いかと思います。

感謝です!


2 ● wizemperor
●35ポイント ベストアンサー

http://jp2.php.net/function.getimagesize


を見ると、


>もし filename のイメージにアクセスできない場合、 もしくは有効な画像でない場合、getimagesize() は FALSE を返し、

>E_WARNING レベルのエラーを発生させます。 読み込み時にエラーが発生した場合は、 getimagesize() は E_NOTICE レベルのエラーを発生させます。


>5.2.3 読み込み時にエラーが発生した場合のエラーレベルが、 E_WARNING から E_NOTICE に変わりました。


とありますが、PHPは4.4.8ということなので、

Warningが出るのは「アクセスできない」か「有効な画像でない」か「読み込みエラー」のどれかでしょうね。

メッセージを見ると「アクセスできない」のようですが…。


エラーが発生したときに、手動でアクセスするとすぐに画像は表示されますか?

また、Warningが出るのは毎回、同じ画像ですか?

そうであれば、指定しているアドレスが間違っている、相手のサーバ・設定等の問題、画像形式が対応してないなどが考えられます。

違うのであれば、タイムアウトや何らかの制限の可能性がありそうです(1回の実行で大量に処理してるなど)。


他は、パラメータに指定するURLはエンコードしてありますよね?(空白文字や日本語とか)


とりあえず、思いつくのはこれくらいなのですが、同じ画像でWarningが出るのであれば、

エラーが出るファイルをローカルにダウンロードして、ファイルとして試してみたらどうでしょうか?

サーバ等の問題なのか、ファイル自体の問題なのかは切り分けられると思います。

◎質問者からの返答

ありがとうございます。

・手動でアクセスできるか→OKです。

・毎回同じかどうか→何度かやってみましたが、同じ画像ですね。

やはり相手のサーバの設定をチェックしてみる必要がありますかね。

ただ、実は1回の実行で大量に処理←これにしっかり当てはまっているので、必要な分だけ処理するように変えてみようかとも思っています。

それと、ローカルにダウンロードするやり方、気がつきませんでした。やってみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ