2012-03-29 28 views
0

私はPHPで(いくつかの処理を行いますが)外部サーバー上でホストされている画像を表示するWebアプリケーションビルドを持っています。これらの画像(Flickrからのもの)の一部が削除されると、そのポイントの後ろにある "Missing Image" gifなどにリダイレクトされます。クライアント側ヘッダー情報

各画像上のPHPでget_headers()関数を使用して、私は、画像が(例えば、Content-TypeがFlickrの画像に、代わりimage/jpgimage/gifであったかどうかをチェックすることによって)削除またはされなかった場合、サーバ側を確認することができました。

問題は、各ページが平均(時にはそれ以上)の20-100の画像を返し、get_headers()が各画像に対して平均0.3~0.5秒を必要とするため、ユーザーの待ち時間が長くなりすぎるということです。

私は、このチェックがクライアント側でjavascriptを使用して実行できるかどうか疑問に思っていました。ユーザーは、画像がロードされるのを待つ(任意のページのように)、画像が有効であるかどうかをチェックし、不足の場合はdisplayプロパティをnoneに設定します。

答えて

0

curl_multi_exec()を使用すると、複数のURLを一度に確認できます。次のcURLオプションを使用する場合:

CURLOPT_FOLLOWLOCATION = FALSE 
CURLOPT_NOBODY = TRUE 
CURLOPT_HEADER = TRUE 

...これにより、次のリダイレクトが防止されます。この情報を使用すると(応答がリダイレクトであるかどうかにかかわらず、CURLINFO_HTTP_CODEcurl_get_info()に表示)、ファイルが存在するかどうかを判断できます。 curl_multi_exec()を使用すると、一度に複数のチェックを実行するため、ページの読み込み時間が大幅に短縮されます。

+0

'curl_multi_exec()'は、アプリケーションの性質上許容される24個の画像(おそらくは同時に実行されているため、おそらくはより多くの画像)に対して〜0.5秒までチェックを減らすので、魅力的です。ありがとう。 – Finik

0

この方法を使用してイメージの種類を判断できますが、サーバーへのトラフィックが余分になる可能性があります。ここで見つける

var request; 
    request = $.ajax({ 
       type: "HEAD", 
       url: 'your image url', 
       success: function() { 
       alert("Size is " + request.getResponseHeader("Content-Length")); 
       alert("Type is " + request.getResponseHeader("Content-Type")); 
       } 
      }); 

Can I get an image's file size and mime-type via JavaScript (FireFox/Gecko/Mozilla only)

+0

良い点、私はAJAXを使用してクエリを私のサーバに戻すことができたことを完全に忘れていました。私はこれからも同様のことを考えています。 – Finik

0

をはいあなたは、PHPプログラムにあなたの要求を行うために、たとえば、AjaxのJavaScriptを使用することができます。

しかし

、代わりにget_headersを使用しての()は、この機能を使用することをお勧め来るかもしれない:http://es.php.net/manual/es/function.file-exists.php#85246

よろしく!

関連する問題