【发布时间】:2019-12-08 01:44:53
【问题描述】:
我正在将我的网站从安装在共享网络托管帐户(在 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 中我需要做一些不同的事情来避免该警告吗?
【问题讨论】:
-
有一个错误提交here。我认为这与您的问题有关。
-
PHP 中没有错误(还有其他 PHP PCRE JIT 错误)但@c00000fd 的问题不是错误。 PHP 尝试为 PCRE JIT 获取可执行内存并被 Dreamhost 的配置阻止(我认为因为
/tmp已挂载noexec,Dreamhost 似乎没有使用 SELinux,无论如何原因并不重要)。然后 PHP 显示此消息,回退到非 JIT PCRE,并在禁用 JIT 的情况下继续处理。这就是为什么此消息有时仅出现而页面在其他情况下显示正常的原因。解决方法是将pcre.jit=0放入php.ini,请参阅下面我对该答案的评论。