parallel
安装了运行 Laravel 7的扩展的 PHP 7.4.16 (ZTS) 。
ini_get('disable_functions');
返回一个空字符串。
我可以编写一个从主进程调用的脚本,setlocal(0,0)
它可以正常工作而不会引发异常。当库尝试从parallel/Runtime
线程中调用它时,会引发此错误。
$disabled = ini_get('disable_functions'); // empty string
//works
setlocale(0,0);
$thread = new \parallel\Runtime(app_path().'/../bootstrap/parallel.php');
$future = $thread->run(function() {
$disabled = ini_get('disable_functions'); // empty string
// throws setlocale() has been disabled for security reasons
setlocale(0, 0);
});
var_dump([
'value' => $future->value(),
'cancelled' => $future->cancelled(),
'done' => $future->done(),
]);
我已经转储了parallel\Runtime
线程内部和外部的所有 ini 设置。它们完全匹配,并且该功能未标记为禁用。
编译时指令是否以某种方式禁用了此功能?