リモートの画像ファイルの情報を取得して、リサイズした上でサーバに保存し、携帯用に縮小画像を表示させたいと思っています。そこで、まず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が出るケースと出ないケースにおいて、ドメイン等に法則性は認められませんでした。なぜ取得できたりできなかったりするのかが分かりません。
何か見落としている点や、手がかりがありましたらご教示ください。宜しくお願いします。
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が出るのであれば、
エラーが出るファイルをローカルにダウンロードして、ファイルとして試してみたらどうでしょうか?
サーバ等の問題なのか、ファイル自体の問題なのかは切り分けられると思います。
タイムアウトしている可能性が高いですね。
つまり、相手のサーバ側の反応が遅いなど。
共用サーバでは、他の人に迷惑をかける可能性があるので、
スクリプトの実行時間が制限されているはずです。
XREAはたしか1分とかその辺じゃなかったかな。
他に考えられるのは、相手側のサーバでそういった画像の直接の呼び出しを拒否してるとか。
対策としては、タイムアウトしたアドレスは記録しておいて、
次回の巡回時に再度取得してみるとかそんな感じですかね。
だめなら専用サーバを借りたりとか。
タイムアウトという発想はなかったです。なるほどー。勉強になります。
XREAの実行時間制限については調べてみますね。
画像の直リンは、実際Warningが出ている画像でやってみたんですが普通に表示できたので、可能性としては低いかと思います。
感謝です!
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回の実行で大量に処理←これにしっかり当てはまっているので、必要な分だけ処理するように変えてみようかとも思っています。
それと、ローカルにダウンロードするやり方、気がつきませんでした。やってみます。
ありがとうございます。
・手動でアクセスできるか→OKです。
・毎回同じかどうか→何度かやってみましたが、同じ画像ですね。
やはり相手のサーバの設定をチェックしてみる必要がありますかね。
ただ、実は1回の実行で大量に処理←これにしっかり当てはまっているので、必要な分だけ処理するように変えてみようかとも思っています。
それと、ローカルにダウンロードするやり方、気がつきませんでした。やってみます。