PHP 7.2 - 缺少扩展 returns 没有错误 - 停止执行

PHP 7.2 - Missing extensions returns no errors - Stops execution

我从星期三开始就在和这个问题作斗争,我在 PHP 5.6PHP 7.2(也是 7.1)之间的研究和测试后的结果是:我的 PHP 7 没有抱怨或注意到我的环境中缺少扩展。

相反,它只是在没有错误消息的情况下停止执行。

问题

为什么 PHP 7.x 在脚本中间停止执行*并且不再触发错误通知或缺少 PHP-Extensions 的提示?

* 主要在函数需要使用特定 PHP-Extension.

的位置

环境

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

Solution

At the end it was my own fault, I've let my Router-Script try/catch Exceptions and Throwables into an variable, but doesn't dumped or debuged them then. Sorry for the whole hasse

Additional important note

To make sure that I made the issue here comprehensible: I can get error-notices and exceptions for most of the common errors like misspelling a function, wrong syntax, declaration, require, missing-file and so on. But my issue here is that PHP 7.2 isn't able to notice that some php-extension is missing and instead to giving some feedback on page or log, it just stops at the function which would/should require the php-extension.

您是否正在使用 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) 似乎没有处理所有 parse/syntax 个错误。

参见示例:

编辑: 捕捉 errors/exceptions 也很有用(见评论)

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

您可以捕获 ErrorThrowable(捕获异常和错误 (> PHP 5))