Недопустимые изображения PHP и обработка ошибок

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

imagepng($image);

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

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

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

$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);

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


person Matt Slaney    schedule 04.04.2010    source источник
comment
В конкретном примере, который вы взяли, у вас будет ошибка синтаксического анализа (синтаксическая ошибка: нет точки с запятой), что означает, что PHP-скрипт даже не начнет свое выполнение ;; и если вы добавите точку с запятой, вы получите фатальную ошибку (вызов несуществующей функции) ;; в любом случае вы ничего не можете сделать: вы не можете восстановиться после них — лучшее решение — просмотреть файлы журналов вашего сервера.   -  person Pascal MARTIN    schedule 04.04.2010
comment
p.s. Если перед попыткой отобразить в браузере изображение не определяется, выдается ошибка ниже. Изображение genimage.php?Number=4 не может быть отображено, так как оно содержит ошибки. На самом деле я загружаю указанное изображение php и использую его в приложении, поэтому мне было бы полезно записать ошибки в виде нового изображения и вместо этого отправить его. Кроме того, ошибка, фактически представленная в браузере, совершенно бесполезна для меня, потому что я знаю, что она содержит ошибки ... Я хочу знать обычные вещи PHP ... Номер строки проблемы, предполагаемая проблема и т. Д. ... Спасибо .   -  person Matt Slaney    schedule 04.04.2010
comment
И последнее. Есть ли способ просто не возвращать изображение и вместо этого писать более подробное сообщение об ошибке... такое, которое на самом деле дает немного больше информации о том, где в моем php-скрипте произошла ошибка   -  person Matt Slaney    schedule 04.04.2010


Ответы (1)


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

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

person Matti Virkkunen    schedule 04.04.2010