當達到最大執行時間時,是否有一種方法可以捕獲致命錯誤,併爲用戶提供更好的消息?PHP捕獲最大執行時間錯誤
回答
嘗試文件執行後設置一個「完成」標誌和註冊關斷功能的功能將檢查該標誌是否定義
我原來的答案是行不通的,因爲你無法捕捉到致命的錯誤。如果您想要閱讀它,請檢查修訂歷史記錄。
我唯一的猜測是你可以使用register_shutdown_function
。在腳本的開始處設置一個變量,並在腳本成功完成時將其清除。編寫檢查該變量,並作用於它,如果它仍然設置的功能,然後應用使用register_shutdown_function
http://php.net/manual/en/function.register-shutdown-function.php
在閱讀前兩個答案後,我必須自己測試register_shutdown_function()
- 我不認爲它會運行。畢竟,一旦沒有更多內存或執行時間已過,用戶函數如何運行?我很驚訝地發現關機功能做運行,即使在OOM的情況下,或執行時間已經過時。概念證明:
要測試內存限制:
<?php
function asdf() { echo "omg\n"; }
register_shutdown_function('asdf');
ini_set('memory_limit', '1000');
$x = '';
while(true) {
$x .= 'lkajsdlfkjasldkfjlaskdfjasldkfj';
}
輸出:
PHP Fatal error: Allowed memory size of 262144 bytes exhausted (tried to allocate 169540 bytes) in /home/scratch.php on line 9
PHP Stack trace:
PHP 1. {main}() /home/scratch.php:0
Fatal error: Allowed memory size of 262144 bytes exhausted (tried to allocate 169540 bytes) in /home/scratch.php on line 9
Call Stack:
0.0002 81360 1. {main}() /home/scratch.php:0
omg
要測試的執行時間:
cat scratch.php
<?php
function asdf() { echo "omg\n"; }
register_shutdown_function('asdf');
set_time_limit(1);
while(true) {}
輸出:
PHP Fatal error: Maximum execution time of 1 second exceeded in /home/scratch.php on line 7
PHP Stack trace:
PHP 1. {main}() /home/scratch.php:0
Fatal error: Maximum execution time of 1 second exceeded in /home/scratch.php on line 7
Call Stack:
0.0002 80200 1. {main}() /home/scratch.php:0
omg
請注意,要讓您的消息在之前顯示PHP的錯誤輸出,您必須完全禁用PHP的錯誤輸出。無論如何,這是生產場所的最佳實踐。
達到最大執行時間!=允許的內存耗盡 很難讓循環和睡眠函數使腳本達到最大執行時間,睡眠凍結執行時間計數器... – shfx 2010-04-20 21:38:03
我的不好。編輯帖子以測試執行時間限制而不是內存耗盡 – 2010-04-20 22:27:35
如果沒有辦法從API級別捕獲錯誤,那麼只要發生致命錯誤,PHP引擎就應該能夠在硬盤上轉儲內存,就像Windows在看到「藍屏」時所做的一樣。
- 1. 最大執行時間PHP錯誤
- 2. 捕獲超過最大執行時間?
- 3. PHP最大執行時間
- 4. 最大執行時間錯誤
- 5. 最大執行時間錯誤處理
- 6. 最大執行時間致命錯誤
- 7. 間歇性地獲取「最大執行時間」錯誤
- 8. PHP致命錯誤:最大的執行時間超過
- 9. Xampp + Php Websocket最大執行時間錯誤
- 10. 如何解決PHP中的最大執行時間錯誤?
- 11. 增加php的最大執行時間
- 12. PHP循環最大執行時間
- 13. PHP的最大執行時間
- 14. PHP:「最大執行時間」立即
- 15. php最大執行時間忽略php.ini
- 16. 增加PHP最大執行時間
- 17. PHP:最大執行時間0超出
- 18. 最大執行時間php.ini
- 19. 最大執行時間
- 20. 運行cron.php thows「超出最大執行時間」致命錯誤
- 21. PHP最長執行時間?
- 22. PHP最長執行時間
- 23. 另一個最大的執行時間致命錯誤
- 24. 致命錯誤:超過30秒的最大執行時間
- 25. 致命錯誤:超過400秒的最大執行時間
- 26. 致命錯誤:超過0秒的最大執行時間
- 27. wamp服務器最大執行時間錯誤
- 28. 致命錯誤:超過x秒的最大執行時間
- 29. Facebook的圖形錯誤最大的執行時間超過
- 30. 如何調試「最大執行時間」致命錯誤?
只是打敗了我 - 我正在重寫我的答案沿這些線 – 2010-04-20 21:00:14
;)這很酷,你的回答更加精確 – shfx 2010-04-20 21:05:02
謝謝!那就是訣竅。 – AdamA 2010-04-21 15:39:57