Как правильно использовать Try-Catch Exception? - PullRequest
2 голосов
/ 15 мая 2011
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');
}

В приведенном выше коде, когда код в блоке try завершается неудачей, управление не передается блоку catch.Я получаю вывод как ошибку, так как https://graph.facebook.com/xxxxxx/picture не является допустимым JPEG.На самом деле, если это не JPEG, это будет GIF в этом контексте.Так может ли кто-нибудь помочь мне в этом?

1 Ответ

7 голосов
/ 15 мая 2011

imagecreatefromjpeg не выдает исключение, если оно терпит неудачу.Для получения дополнительной информации об этом см. PHP: Как корректно управлять ошибками? .

Было бы лучше использовать функцию , упомянутую в комментариях к документации PHP дляfunction :

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;
}

Таким образом, вы полностью избегаете проблемы, поскольку она просто не пытается проанализировать файл как JPEG, если он не один.

...