禁止覆盖php.ini的PHP代码error_reporting

时间:2018-08-08 07:56:42

标签: php fpm

我可以禁止PHP覆盖$($('.total_cost')[0]) error_reporting设置吗?并仅从php.ini获得此设置。

php.ini

但是此PHP行位于项目核心中,我无法对其进行编辑,并且我不需要php.init file have: error_reporting = E_ERROR|E_PARSE PHP code have: error_reporting(E_WARNING|E_PARSE);

2 个答案:

答案 0 :(得分:1)

  

我可以禁止PHP覆盖php.ini错误报告设置吗?

可以使用disable_functions配置指令在代码中禁止使用error_reporting()函数。缺点是你不能拥有

disable_functions = error_reporting

为每个虚拟主机设置(即通过php_admin_value),但必须在主php.ini中设置,这在某些配置中可能会出现问题。

我也相信您的问题暴露了另一个问题,您不是在这里解决它,而是解决它。

答案 1 :(得分:0)

编辑:发生在我身上,您可以使用php runkit来做到这一点,而不用弄乱源代码,

选项1: 安装runkit(https://github.com/zenovich/runkit / https://github.com/runkit7/runkit7),在php.ini中添加runkit.internal_override=1,然后运行

runkit_function_rename("error_reporting","original_error_reporting");
runkit_function_add("error_reporting",function(int $ignored = NULL){return original_error_reporting();});

在运行您想要的代码之前(您也可以将此代码添加到auto_prepend_file php.ini选项指向的文件中,以确保它在任何其他代码之前运行)

  • 或选项2:编辑php解释器源代码

在php-src / Zend / zend_builtin_functions.c中找到

/* {{{ proto int error_reporting([int new_error_level])
   Return the current error_reporting level, and if an argument was passed - change to the new level */
ZEND_FUNCTION(error_reporting)

然后在下面找到

if (ZEND_NUM_ARGS() != 0) {

替换为

if (0) {

然后重新编译PHP,瞧,忽略error_reporting参数:)

在git版本ab8094c666048b747481df0b9da94e08cadc4160中,它是7.3.0-dev(在7.3.0-beta1之后),它位于第736行,请参见https://github.com/php/php-src/blob/ab8094c666048b747481df0b9da94e08cadc4160/Zend/zend_builtin_functions.c#L736