2010-04-04 33 views
3

使用PHP的圖像和GD功能,可以用下面的方法來最終輸出的PHP圖片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); 

在這一點上我想上面一樣,但在更換我的圖像創建一個新的形象!文本我會把發生的實際錯誤。

+0

用你已經採取的具體例子,你會有一個解析錯誤*(語法錯誤:無分號)*,這意味着PHP腳本甚至不會開始執行;;並且如果添加分號,則會發生致命錯誤*(調用一個不存在的函數)* ;;無論哪種情況,您都無法做到:您無法從這些中恢復 - 最好的解決方案是觀察服務器的日誌文件。 – 2010-04-04 14:35:08

+0

p.s.如果在嘗試顯示在瀏覽器中之前未檢測到圖像,則會提供以下錯誤。 圖像「genimage.php?Number = 4」無法顯示,因爲它包含錯誤。 我實際上正在下載所說的php圖像,並在應用程序中使用它,所以它將有助於我將錯誤編寫爲新圖像併發送。 此外,實際上在瀏覽器中提供的錯誤對我來說是無用的,因爲我知道它包含錯誤...我想知道通常的PHP的東西......問題的行號,假定的問題等。 。 謝謝。 – 2010-04-04 14:38:58

+0

最後一件事 有沒有一種方法可以簡單地不返回圖像,而是寫一個更全面的錯誤信息......一個實際上提供了一些更深入的瞭解,在我的PHP腳本錯誤發生在哪裏 – 2010-04-04 14:39:48

回答

2

你想要做的就是捕捉PHP錯誤,而不是檢測到「空白圖像」。您可以使用set_error_handler()來定義發生錯誤時調用的自定義回調。

諸如分析錯誤之類的事情是在發佈代碼之前應該調試的東西,但是這應該可以幫助您檢測到隨機錯誤(數據庫連接正在死亡,什麼)。