PHP неверное изображение и обработка ошибок - PullRequest
3 голосов
/ 04 апреля 2010

Используя PHP-функции Image и GD, вы можете использовать следующий метод для окончательного вывода изображения php

imagepng($image);

Иногда, по какой-либо причине изображение может не отображаться, обычно ошибка не в изображении, а в том, что фактические функции php не выполняются успешно. Однако это приводит к тому, что возвращается пустое изображение, которое мне не помогает.

Я хочу знать, есть ли способ обнаружить пустое или недействительное изображение и создать новое изображение, записать ошибки в новое изображение с помощью imagestring (), а затем отобразить это новое (отладочное) изображение.

например, успешно отображаемое изображение без ошибок:

$image  = imagecreate(256, 256); //create image
imagecolortransparent($image, $BLUE); //set transparent
imagefilledrectangle($image, 0, 0, 256, 256, $BLUE); //fill with 'transparent colour'

//Draw a border round the image
imageline($image, 0, 0, 0, 255, $Black);
imageline($image, 0, 0, 255, 0, $Black);
imageline($image, 255, 0, 255, 255, $Black);
imageline($image, 0, 255, 255, 255, $Black);

imagestring($image, 1, 10, 10, "I am an image!", $Black);

imagepng($image);
imagedestroy($image);

но если я затем внесу некоторые ошибки в php-скрипт, которые могут или не могут быть связаны с фактическим созданием образа, то php-скрипт завершится неудачно, и изображение не будет видно ...

$image  = imagecreate(256, 256); //create image
imagecolortransparent($image, $BLUE); //set transparent
imagefilledrectangle($image, 0, 0, 256, 256, $BLUE); //fill with 'transparent colour'

//Draw a border round the image
imageline($image, 0, 0, 0, 255, $Black);
imageline($image, 0, 0, 255, 0, $Black);
imageline($image, 255, 0, 255, 255, $Black);
imageline($image, 0, 255, 255, 255, $Black);

imagestring($image, 1, 10, 10, "I am an image!", $Black);

/* I am here to cause problems with the php script 
** and cause the execution to fail, I am a function 
** that does't exist...
**
** and I am missing a semi colon! ;)*/
non_existant_function() 

imagepng($image);
imagedestroy($image);

На данный момент я хочу создать новое изображение, как указано выше, но вместо него я изображение! текст Я бы поставил фактическую ошибку, которая произошла.

1 Ответ

2 голосов
/ 04 апреля 2010

То, что вы хотите сделать, это ловить ошибки PHP, а не обнаруживать «пустое изображение». Вы можете использовать set_error_handler () для определения пользовательского обратного вызова, который вызывается при возникновении ошибки.

Такие вещи, как ошибки синтаксического анализа, следует отлаживать перед публикацией кода, но это должно помочь вам обнаружить случайные ошибки (обрыв соединения с базой данных, что угодно).

...