我正在運行一個腳本,它需要一個未正確包含在我的腳本中的文件。爲什麼E_WARNING的行爲像E_ERROR?
PHP Fatal error: require_once(): Failed opening required 'Math/BigInteger.php' (include_path='.:/usr/share/php:/usr/share/pear') in /myDir/Net/SSH2.php on line 746
我有一個error_handler
設置,記錄每一個錯誤,我得到:
function script_error_handler($errno, $errstr, $errfile, $errline){
echo "IN ERROR HANDLER\n";
$GLOBALS['errors'][] = array(
'errno' => $errno,
'errstr' => $errstr,
'errfile' => $errfile,
'errline' => $errline
);
return true;
}
我也有一個shutdown_function
後來在錯誤去決定成敗(除其他事項外)。該功能的一部分打印我記錄的錯誤。
function shutdown_handler($io) {
print_r($GLOBALS['errors']);
echo "\n";
//irrelevant stuff ommitted
}
奇怪的是,這樣做的輸出如下所示:
Array
(
[0] => Array
(
[errno] => 2
[errstr] => require_once(Math/BigInteger.php): failed to open stream: No such file or directory
[errfile] => /myDir/Net/SSH2.php
[errline] => 746
)
)
根據PHP的Predefined Constants,2
爲E_WARNING
的值。
2 | E_WARNING (integer) | Run-time warnings (non-fatal errors). Execution of the script is not halted.
這似乎是與Fatal Error
輸出我剛纔得到清晰的衝突。爲什麼我在這種情況下不能獲得E_ERROR
?這裏發生了什麼?
你能說明你是如何註冊處理程序的? –
我可以,但我不明白這是如何相關的。當我從這兩個處理程序獲得輸出時,他們顯然正在註冊並被調用。 – MirroredFate
看起來你在下面有一個答案可能不需要,所以沒有麻煩。然而,如果您發佈完整的測試用例,然後在提出問題時回答他們的問題,它可以讓人們更容易幫助您。 –