しようとしているときにgetimagesize($img)
画像が存在しない場合、エラーが発生します。ファイルが存在するかどうかを最初に確認したくありません。エラーを処理するだけです。
どのようtry catch
に機能するかはわかりませんが、次のようなことをしたいです:
try: getimagesize($img) $works = true
catch: $works = flase
しようとしているときにgetimagesize($img)
画像が存在しない場合、エラーが発生します。ファイルが存在するかどうかを最初に確認したくありません。エラーを処理するだけです。
どのようtry catch
に機能するかはわかりませんが、次のようなことをしたいです:
try: getimagesize($img) $works = true
catch: $works = flase
あなたが言ったように、存在しないファイルで使用すると、 getimagesize は警告を生成します:
このコード:
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
解決策は、 @ 演算子
を使用してそのエラーをマスクすることです。
if ($data = @getimagesize('not-existing.png')) {
echo "OK";
} else {
echo "NOT OK";
}
ファイルが存在しないため、 $data は false のままです。ただし、警告は表示されません。
もう 1 つの解決策は、getimagesize を使用する前に、ファイルが存在するかどうかを確認することです。このようなことができます:
if (file_exists('not-existing.png') &&
($data = getimagesize('not-existing.png'))
) {
echo "OK";
} else {
echo "NOT OK";
}
ファイルが存在しない場合、getimagesize は呼び出されません。つまり、警告はありません。
それでも、このソリューションは、リモート サーバーへの 2 つの要求を意味するため、別のサーバー上にあり、HTTP 経由でアクセスする (この場合) 画像に使用するべきものではありません。
ローカル画像の場合、それで十分だと思います。私が目にする唯一の問題は、読み取りエラーがマスクされていないときに生成される通知です。
ついに :
display_errors
、を参照してください;-)Call me a dirty hacker zombie who will be going to hell, but I usually get around this problem by catching the warning output into an output buffer, and then checking the buffer. Try this:
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"
}
Like I said, not the way to get a cozy place in programmer's heaven, but when it comes to dysfunctional error handling, a man has to do what a man has to do.
こんな古い話題ですみません。最近、同様の問題が発生し、代わりにこのトピックが解決策であることがわかりました。宗教上の理由から、「@」は悪い判断だと思います。そして、別の解決策を見つけました。それは次のようになります。
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;
}