imagecreatefrompng ошибка - как обнаружить и обработать? - PullRequest
3 голосов
/ 18 января 2011

В моем скрипте есть следующие строки:

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

Я уверен, что $name представляет существующий файл на диске, но я должен обработать случаи, когда этот файл не является допустимым файлом PNG (либо из-за ошибки передачи, либо из-за злонамеренного пользователя). Я хочу разобраться с такими случаями, вообще ничего не делая.

Однако, учитывая приведенный выше код, мой интерпретатор PHP останавливается на первой строке со следующим сообщением об ошибке:

imagecreatefrompng () [function.imagecreatefrompng]: 'foobar.png' не является допустимым файлом PNG

Разве '1013 *' не должен был подавить это сообщение об ошибке и иметь функцию, возвращающую false, как описано в документации? Как я могу сказать PHP, что я знаю, что может произойти ошибка и не прервет выполнение?

Ответы [ 2 ]

7 голосов
/ 18 января 2011

Вы можете использовать mime_content_type для файла.

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

Это обеспечит изображение в формате PNG.

1 голос
/ 18 января 2011

'@' предназначен для подавления ошибок, и вы, вероятно, получите предупреждение.

Вы можете сделать это, используя исключения, например,

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

Подробнее здесь

...