我正在将我的网站从安装在共享 Web 托管帐户(DreamHost)上的 PHP v.5 迁移到运行 PHP 7.3.11。迁移后,我开始注意到偶尔会收到这些警告:
警告:preg_match_all():JIT 内存分配失败,PCRE JIT 将被禁用。这可能是由于安全限制引起的。要么授予 PHP 分配可执行内存的权限,要么设置 pcre.jit=0
最后一个警告来自代码中的这一行,它应该替换页面上发布的 HTML 中的特殊标记:
if(preg_match_all("/\[".$tagBegin."(\S)+\]/U", $html, $matches, PREG_OFFSET_CAPTURE) !== false)
有没有在v.7.3中需要我做出不同的改变以避免这个警告?
/tmp
被挂载为noexec
,Dreamhost 似乎没有使用 SELinux,在任何情况下原因都不重要)。PHP 然后显示此消息,回退到非 JIT PCRE,并继续禁用 JIT 进行处理。这就是为什么此消息仅在某些时候出现,而页面则正常显示。解决方法是将pcre.jit=0
放入php.ini
,请参见我在下面的评论中的说明。 - joelhardi