3

私のスクリプトには、次の行があります。

$test = @imagecreatefrompng($name);
if ($test) { ... }

がディスク上の既存のファイルを表していることは確かです$nameが、そのファイルが有効な PNG ファイルではない場合 (転送エラーま​​たは悪意のあるユーザーのいずれかが原因で) を処理する必要があります。そういう場合は何もしないで対処したい。

ただし、上記のコードを指定すると、PHP インタープリターは最初の行で停止し、次のエラー メッセージが表示されます。

imagecreatefrompng() [function.imagecreatefrompng]: 'foobar.png' は有効な PNG ファイルではありません

' @' はこのエラー メッセージを抑制falseし、ドキュメントに記載されているように関数を返す必要はありませんでしたか? エラーが発生する可能性があることを知っていて、実行を中断しないことを PHP に伝えるにはどうすればよいですか?

4

2 に答える 2

7

ファイルで使用できmime_content_typeます。

$image = 'file.png';
if(is_file($image) && mime_content_type($image_type) == 'image/png'){
    // Image is PNG
}else{
    // Not PNG
}

これにより、画像がファイルと PNG であることが保証されます。

于 2011-01-18T09:23:58.863 に答える
2

「@」はエラーを抑制するように設計されており、おそらく警告メッセージが表示されます。

例外を使用してそれを行うことができます。

try {
    $test = imagecreatefrompng($name);
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

詳細はこちら

于 2011-01-18T09:25:39.593 に答える