如何正确使用Try-Catch Exception?

Mah*_*esh 2 php facebook try-catch

try{
  $src = imagecreatefromjpeg('https://graph.facebook.com/'.$jsonfriends["data"][$randf]["id"].'/picture');
} catch (Exception $z){
  $src = imagecreatefromgif('https://graph.facebook.com/'.$jsonfriends["data"][$randf]["id"].'/picture');
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,当'try'块中的代码失败时,控件不会传递给'catch'块.我得到输出错误,因为https://graph.facebook.com/xxxxxx/picture不是有效的JPEG.实际上,如果它不是JPEG,那么在这种情况下它就是GIF.所以有人可以帮我这个吗?

Seb*_*olm 8

imagecreatefromjpeg如果失败则不会抛出异常.有关它的更多信息,请参阅PHP:如何正常管理错误?.

你最好使用函数的PHP文档的注释中提到的函数:

function open_image ($file) {
    $size = getimagesize($file);
    switch($size["mime"]){
        case "image/jpeg":
            $im = imagecreatefromjpeg($file); //jpeg file
            break;
        case "image/gif":
            $im = imagecreatefromgif($file); //gif file
            break;
        case "image/png":
            $im = imagecreatefrompng($file); //png file
            break;
        default: 
            $im=false;
            break;
    }
    return $im;
}
Run Code Online (Sandbox Code Playgroud)

这样,您可以完全避免这个问题,因为它不会尝试将文件解析为JPEG(如果不是一个).