0

私はいくつかの写真を持っているこの状況を持っています:

http://www.example.com/test1.jpg
http://www.example.com/test2.jpg
http://www.example.com/test3.jpg
....

それらのいくつかはデッドリンクである可能性があり、画像は表示されず、小さなbrokenアイコンになります.

これらの画像を確認するためにこれを行っています:

if(!is_array(getimagesize($mediapath))){
  $mediapath = '';
} 
return $mediapath;

基本的getimagesizeに、画像の画像サイズを取得します:)、配列を返します。画像が壊れている場合はエラーになります。

そして、これは私の問題です。コードは正常に機能しますが、一部のファイルが存在しないというエラーが表示されます。

Warning: getimagesize(http://www.example.com/test2.jpg) [function.getimagesize]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampp\htdocs\zend\models\mappers\search.php on line 173

しかし、これは望ましい結果です。ページにこれらのエラーを表示したくないだけです。PHP でエラーを無効にしたくありません。「getimagesize」メソッドでそのエラーが表示されないようにしたいのです。

4

3 に答える 3

5

get_headersその状況で関数を使用できます。

$url = 'http://www.example.com/test1.jpg';
print_r(get_headers($url));

次のような配列が報告されます。

Array
(
    [0] => HTTP/1.1 200 OK
    [1] => Date: Sat, 29 May 2004 12:28:13 GMT
    [2] => Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
    [4] => ETag: "3f80f-1b6-3e1cb03b"
    [5] => Accept-Ranges: bytes
    [6] => Content-Length: 438
    [7] => Connection: close
    [8] => Content-Type: text/html
)

そのhttp応答を使用して、画像が存在するかどうかを知ることができます:)

于 2012-02-15T20:55:43.747 に答える
2

エラー抑制演算子が悪ではない非常にまれなケースがあり、これはその 1 つです。

if(@!is_array(getimagesize($mediapath))){
            $mediapath = '';
        } 
        return $mediapath;

@ステートメントの接頭辞に注意してください。エラー、警告、または通知が抑制されます。致命的なエラーが発生した場合、スクリプトは何も表示せずに終了することに注意してください。

于 2012-02-15T20:55:44.603 に答える
2

それはひどく非効率的なテスト方法です。PHP は、ファイルの内容を getimagesize() に渡す前に、イメージ全体をダウンロードする必要があります。

curl を使用した方がよいでしょう。各 URL に対してリクエストを発行しHEAD、200 または 404 レスポンスを取得するかどうかを確認します。これは比較的安価で、URL ごとに 1 つの TCP 接続といくつかのパケット (たとえば、4k のデータ転送) しかなく、完全な画像ファイルごとに 200+k になります。

于 2012-02-15T20:56:05.607 に答える