簡體   English   中英

PHP 7.2-缺少擴展名不會返回錯誤-停止執行

[英]PHP 7.2 - Missing extensions returns no errors - Stops execution

自從星期三以來,我就一直在與這個問題作斗爭,經過我在PHP 5.6PHP 7.2 (也是7.1)之間的研究和測試之后得出的結果是:我的PHP 7不會抱怨或注意到環境中缺少擴展。

取而代之的是,它只是在沒有錯誤消息的情況下停止執行。

為什么PHP 7.x在腳本中間*停止執行,並且不再為缺少PHP擴展名而發出錯誤通知或提示?

*通常位於函數需要使用特定PHP擴展的位置。

環境

Operating System :  Debian GNU/Linux 9.6 (stretch)
Web Server       :  nginx/1.10.3
PHP              :  PHP 7.2.12

的/etc/apt/sources.list

# deb cdrom:[Debian GNU/Linux 9.2.1 _Stretch_ - Official amd64 NETINST 20171013-13:07]/ stretch main

#deb cdrom:[Debian GNU/Linux 9.2.1 _Stretch_ - Official amd64 NETINST 20171013-13:07]/ stretch main

deb http://ftp.de.debian.org/debian/ stretch main
deb-src http://ftp.de.debian.org/debian/ stretch main

deb http://security.debian.org/debian-security stretch/updates main
deb-src http://security.debian.org/debian-security stretch/updates main

# stretch-updates, previously known as 'volatile'
deb http://ftp.de.debian.org/debian/ stretch-updates main
deb-src http://ftp.de.debian.org/debian/ stretch-updates main

問題

雖然PHP 5.6抱怨缺少驅動程序或功能無效,但它只是在必要時在我的代碼中間停止執行,而沒有錯誤消息。

示例 :如果未安裝其中一些擴展,則會發生問題:

php7.2-mysql
php7.2-mbstring
php7.2-soap
php7.2-simplexml

這個問題確實令人困惑,因為我在/etc/php/7.2/fpm/php.ini啟用了錯誤報告和顯示錯誤,啟動錯誤,並且還可以使用...

ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting( E_ALL | E_STRICT);

...在我的代碼中。 但是,對於缺少的擴展名,不會顯示任何消息或錯誤。

當函數調用缺少必要的擴展名時,PHP 7.2是否不再會引發錯誤? 還是php.ini的默認設置中有一些配置錯誤?

我在這里想念什么?


20181210

最后,這是我自己的錯,我已經將我的路由器腳本嘗試/捕獲異常和Throwables到一個變量中,但是那時沒有轉儲或調試它們。 對不起,整個麻煩

附加重要說明

為了確保使我在這里理解的問題是 :對於大多數常見錯誤,例如拼寫錯誤的函數,錯誤的語法,聲明,require,缺少文件等,我可以得到錯誤通知和異常。 但是我的問題是PHP 7.2無法注意到缺少某些php擴展名,而是在頁面或日志上提供了一些反饋,它只是停留在需要php擴展名的功能上。

您是否正在使用php-fpm執行php 7.2? php.ini對於php-fpm無效。 在這種情況下,您需要更新php-fpm.conf文件。

php-fpm的正確行是:

; enable display of errors
php_flag[display_errors] = on
php_flag[display_startup_errors] = on

您是否嘗試過error_reporting(-1)

看來error_reporting( E_ALL | E_STRICT)不能處理所有解析/語法錯誤。

參見例如:

編輯:捕獲錯誤/異常也很有用(請參閱評論)

try {
     // Your code
} catch(Throwable $e) {
    echo $e->getMessage();
}

您可以捕獲ErrorThrowable (捕獲異常和錯誤(> PHP 5))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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