自周三以来,我一直在与这个问题作斗争,经过PHP 5.6
和PHP 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
解决方案
最后,这是我自己的错,我已经将我的Router-Script尝试将异常和Throwables尝试/捕获到变量中,但是那时没有转储或调试它们。对不起,整个麻烦事
其他重要说明
为确保我能理解这里的问题:对于大多数常见错误,例如拼写错误的函数,错误的语法,声明,require,缺少文件,我都会收到错误通知和异常等等。但是我的问题是
PHP 7.2
不能注意到缺少某些php扩展名,而是在页面或日志上提供了一些反馈,它只是停留在需要php扩展名的功能上
答案 0 :(得分:1)
您是否使用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
答案 1 :(得分:1)
您尝试过error_reporting(-1)
吗?
看来error_reporting( E_ALL | E_STRICT)
不能处理所有解析/语法错误。
例如参见
编辑: 捕获错误/异常也很有用(请参阅评论)
try {
// Your code
} catch(Throwable $e) {
echo $e->getMessage();
}
您可以捕获Error
或Throwable
(捕获异常和错误(> PHP 5))