簡體   English   中英

PHP require語句 - 失敗,但拋出E_WARNING而不是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM