ini_set() 没有被阻止,但我得到 "Warning: ini_set() has been disabled for security reasons"

ini_set() is not blocked, yet I get "Warning: ini_set() has been disabled for security reasons"

我为这个奇怪的问题苦思了好几个小时。我的 Magento 显示错误:

Exception #0 (Exception): Warning: ini_set() has been disabled for security reasons 
/path/to/vendor/magento/framework/Session/SessionManager.php 
on line 598

这是第 598 行的样子:

598: $result = ini_set('session.use_only_cookies', '1');

奇怪的部分来了。当我在此行 598 上方添加以下内容时:

597: echo ini_get('disable_functions');die;
598: $result = ini_set('session.use_only_cookies', '1');

我明白了:

passthru,shell_exec,system

在此禁用功能列表中没有 ini_set,但不知何故 Magento 设法认为它因“安全原因”而被阻止...

我已经检查了服务器上所有可能的 PHP 配置。 ini_set() 未在任何地方被阻止。这让我很难受。

怎么回事?


编辑 1

我在 Magento 外部创建了一个测试脚本,内容如下:

var_dump(ini_set('display_errors', 'Off'));
var_dump(ini_get('display_errors') );

这是我设置的任何 ini 值...

NULL string(0) ""

您的托管服务提供商启用了 PHP 中内置的一些安全措施。

我的第一个猜测是令人愉快的名字 Snuffleupagus. Among many other things, it features comprehensive control of ini settings 以及以非常精细的方式阻止函数调用的能力。另一方面,我没有看到任何有关禁用 phpinfo() 的信息,您说它没有显示任何内容;并且您的错误消息表明该函数已转换为 no-op 并带有警告,而不是错误。 (随后 Magento 将其提升为异常。)

无论哪种方式,除了联系您的托管服务提供商之外,您很可能无能为力。