2009-09-01 8 views
14
私が getimagesize($img)にしようとしているときに

イメージが存在しない場合は、エラーが発生します。ファイルが存在するかどうか最初にチェックするのではなく、エラーを処理するだけです。getimagesizeがファイルを見つけることができないときのハンドルエラー

どうやってtry catchが動作するのか分かりませんが、私は次のようにします:

try: getimagesize($img) $works = true 
catch: $works = flase 

答えて

40

このコード:

if ($data = getimagesize('not-existing.png')) { 
    echo "OK"; 
} else { 
    echo "NOT OK"; 
} 

はあなたに

Warning: getimagesize(not-existing.png) [function.getimagesize]: 
    failed to open stream: No such file or directory 
を取得します


ソリューションは、そのエラーをマスクするために、@ operatorを使用することです:

if ($data = @getimagesize('not-existing.png')) { 
    echo "OK"; 
} else { 
    echo "NOT OK"; 
} 

ファイルが存在しないため、$データがまだfalseになります。警告は表示されません。


もう1つの解決策は、getimagesizeを使用する前にcheck if the file existsです。このような何かをするだろう:ファイルが存在しない場合、getimagesizeが呼び出されない

if (file_exists('not-existing.png') && 
    ($data = getimagesize('not-existing.png')) 
    ) { 
    echo "OK"; 
} else { 
    echo "NOT OK"; 
} 

-

まだ何の警告を意味しており、この解決策は、あなたがイメージに使用すべきものではありません別のサーバーに接続し、HTTP経由でアクセスします(この場合は、リモートサーバーへの2つの要求を意味するため)。

ローカル画像の場合は、これは大丈夫でしょう。私が見るのは、読み取りエラーがマスクされていないときに生成される通知だけです。


最後に:

  • 私は、エラーがお使いの者協会のサーバー上に表示することができるよう
  • そして、本番サーバー上のものを表示されませんでしたでしょう - display_errorsを参照して、その;-)
  • について
+4

マインドます:そして、私はそれが次のようになり、別の解決策を見つけました。卑劣なことはありませんが、最悪の瞬間に起こります... – ya23

+1

@ ya23:true;しかし、あなたは非常に不運にならなければならないでしょう^^そして、私は@でマスキングエラーを好きではありません:もしあなたがそれを使用していて問題があるなら、それは一般的にすぐにデバッグするのに苦労します.-( –

+1

@かなり汚い:) – Gigala

7

地獄に行く汚いハッカーゾンビに電話してください。しかし、私は通常、警告出力を出力バッファにキャッチし、バッファをチェックすることでこの問題を回避します。私が言ったように、

ob_start(); 
$data = getimagesize('not-existing.png'); 
$resize_warning = ob_get_clean(); 
if(!empty($resize_warning)) { 
    print "NOT OK"; 
    # We could even print out the warning here, just as PHP would do 
    print "$resize_warning"; 
} else { 
    print "OK" 
} 

プログラマの天国で居心地の良い場所を取得する方法はないが、それが機能不全エラー処理に来るとき、男は男が何をしている何をしなければならない。これを試してみてください。

+7

あなたは地獄に行く汚いハッカーゾンビです。 – Seb

5

このような古いトピックを作成して申し訳ありません。最近、同様の問題が発生し、代わりにこのトピックが見つかりました。宗教上の理由から、私は「@」が悪い判断だと思う。file_exists()は、ファイルは、ファイルがちょうどメソッドの呼び出しの間に削除されることがありますよう、getimagesize()はまだ、失敗する可能性が存在するよう指示すると、

function exception_error_handler($errno, $errstr, $errfile, $errline) { 
    throw new Exception($errstr); 
} 
set_error_handler("exception_error_handler"); 

try { 
    $imageinfo = getimagesize($image_url); 
} catch (Exception $e) { 
    $imageinfo = false; 
} 
関連する問題