![](/img/trans.png)
[英]How can I test the require function in PHPUnit? Expect E_COMPILE_ERROR
[英]PHP require statement - Fails, but throws E_WARNING instead of E_COMPILE_ERROR
我將系統中的文件移動到組織的子文件夾,從而打破了require
語句的相對路徑。 這應該導致E_COMPILE_ERROR
警告。 但是,應用程序中的自定義錯誤處理程序將錯誤捕獲為E_WARNING
,而不是該錯誤。 因此,我們的客戶處理程序記錄了消息,並且生成的PHP屏幕顯示為空,就像die();
跑了。 這是我們的本地處理程序創建的日志:
E_WARNING main(XXXXXX.php): failed to open stream: No such file or directory xxx/xxx.php Line 9 01-26-2012 09:44:27 AM 01-26-2012 10:03:24 AM
值得注意的是,我們的系統仍在使用可憐的舊PHP 4
。
任何想法為什么會拋出E_WARNING? 由於我們看不到任何錯誤消息,因此需要更長的時間來確定問題所在。
編輯:該應用程序肯定是在做一個要求。 自定義錯誤處理程序只是使用PHP的set_error_handler函數。 因此,除了警告,通知和用戶錯誤之外,不應該調用它。
附加編輯:
也許結構與此有關? 以下是它的工作原理:( - >表示包括,=>表示要求)
main-> File1.php => File2.php
它是否會引發警告,因為包含了File1.php,但不是必需的? 這可能對我有意義,但似乎是一個小故障? 我可能需要在PHP 5上測試它。
解析度
我已經瀏覽了我們的應用程序,發現了這個:
error_reporting(E_ERROR | E_WARNING | E_PARSE);
因此,E_COMPILE_ERROR將不會顯示。 此外,@ DaveRandom對於它發出警告,然后拋出致命錯誤是正確的。
將其更改為error_reporting(E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); 顯示錯誤消息。
當您在不存在的文件上調用它時,需要至少發出一次此警告。 然后它發出一個E_COMPILE_ERROR
並死掉。
但是 :
使用用戶定義的函數無法處理以下錯誤類型:E_ERROR,E_PARSE,E_CORE_ERROR,E_CORE_WARNING, E_COMPILE_ERROR ,E_COMPILE_WARNING,以及調用set_error_handler()的文件中引發的大部分E_STRICT。
因此,您的自定義錯誤處理程序永遠不會捕獲我害怕的錯誤。
它確實在做要求嗎? E_WARNING似乎暗示你使用include而不是require ...或者PHP4在這方面表現不同? 我老實說不記得了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.