PHP 7.2 - 缺少扩展 returns 没有错误 - 停止执行
PHP 7.2 - Missing extensions returns no errors - Stops execution
我从星期三开始就在和这个问题作斗争,我在 PHP 5.6
和 PHP 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 个错误。
参见示例:
- 第一条评论
https://secure.php.net/manual/en/errorfunc.configuration.php#ini.display-errors
- Eljakim 对 How to get useful error messages in PHP?
的评论
编辑:
捕捉 errors/exceptions 也很有用(见评论)
try {
// Your code
} catch(Throwable $e) {
echo $e->getMessage();
}
您可以捕获 Error
或 Throwable
(捕获异常和错误 (> PHP 5))
我从星期三开始就在和这个问题作斗争,我在 PHP 5.6
和 PHP 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 个错误。
参见示例:
- 第一条评论 https://secure.php.net/manual/en/errorfunc.configuration.php#ini.display-errors
- Eljakim 对 How to get useful error messages in PHP? 的评论
编辑: 捕捉 errors/exceptions 也很有用(见评论)
try {
// Your code
} catch(Throwable $e) {
echo $e->getMessage();
}
您可以捕获 Error
或 Throwable
(捕获异常和错误 (> PHP 5))