63

当我composer --version在 macOS 终端中运行时,我收到以下错误。

PHP 警告:preg_match():JIT 编译失败:第 755 行 phar:///usr/local/bin/composer.phar/vendor/symfony/console/Application.php 中没有更多内存

Warning: preg_match(): JIT compilation failed: no more memory in phar:///usr/local/bin/composer.phar/vendor/symfony/console/Application.php

在第 755 行 PHP 警告:preg_match():JIT 编译失败:第 759 行 phar:///usr/local/bin/composer.phar/vendor/symfony/console/Application.php 中没有更多内存

Warning: preg_match(): JIT compilation failed: no more memory in phar:///usr/local/bin/composer.phar/vendor/symfony/console/Application.php

在第 759 行 PHP 警告:preg_split():JIT 编译失败:第 654 行 phar:///usr/local/bin/composer.phar/vendor/symfony/console/Application.php 中没有更多内存

Warning: preg_split(): JIT compilation failed: no more memory in phar:///usr/local/bin/composer.phar/vendor/symfony/console/Application.php

在第 654 行 PHP 警告:preg_split():JIT 编译失败:第 1091 行 phar:///usr/local/bin/composer.phar/vendor/symfony/console/Application.php 中没有更多内存

Warning: preg_split(): JIT compilation failed: no more memory in phar:///usr/local/bin/composer.phar/vendor/symfony/console/Application.php

在第 1091 行 PHP 警告:preg_replace():JIT 编译失败:第 36 行 phar:///usr/local/bin/composer.phar/vendor/symfony/console/Formatter/OutputFormatter.php 中没有更多内存

Warning: preg_replace(): JIT compilation failed: no more memory in phar:///usr/local/bin/composer.phar/vendor/symfony/console/Formatter/OutputFormatter.php

在第 36 行

  [ErrorException]                                          
  preg_match_all(): JIT compilation failed: no more memory
4

8 回答 8

146

这是一个已知的 PHP 7.3错误,已经修复。

作为临时解决方法,编辑您的 php.ini 文件(在我的情况下vi /usr/local/etc/php/7.3/php.ini:),通过更改禁用 PHP PCRE JIT 编译:

;pcre.jit=1

pcre.jit=0
于 2018-12-10T16:13:07.627 回答
35

我通过禁用 PCRE jit 编译解决了这个问题。

我想你通过自制软件安装了 php 7.3。

如果是这样,请使用以下内容创建一个zzz-myphp.iniin :/usr/local/etc/php/7.3/conf.d

; My php.ini settings
; Fix for PCRE "JIT compilation failed" error
[Pcre]
pcre.jit=0
于 2018-12-10T10:21:44.870 回答
13

其他答案建议通过配置文件禁用 PCRE JIT。这行得通,但需要注意的是:这会为所有使用这些 INI 文件的引擎调用禁用 PCRE JIT 。因此,您将无法获得可能更广泛的功能的 JIT 改进,这可能是不希望的。

composer只能通过以下方式禁用 JIT:

php -d pcre.jit=0 composer.phar ...
于 2018-12-14T02:20:02.690 回答
3

在 PHP 7.1.24 中没有 'pcre.jit' php.ini 文件,所以你必须设置 memory_limit:128M(如果你增加这个)。

于 2019-04-12T11:44:27.773 回答
3

它通过以下步骤为我工作:

  1. 打开终端并运行 php --ini
  2. 打开路径“加载的配置文件:/usr/local/php5/lib/php.ini”中的文件php.ini https://prnt.sc/p9tspy
  3. 找到 pcre.jit 并将 ;pcre.jit=1 更改为 pcre.jit=0
于 2019-09-23T13:44:16.183 回答
0

感谢您的回答.. 我通过命令 composer.phar 然后导出路径解决了它。例子:

$composer.phar
$export PATH=/usr/local/php5/bin:$PATH
$composer.phar --version
于 2018-12-12T17:38:54.287 回答
-1

我得到了同样的错误。我使用 PHP 7.3.7 在我的 Mac OS 10.11.6 上安装了 MAMP 5.4 并安装了 Composer。它似乎可以工作,但是当我尝试安装 Yii2 甚至检查版本时,它给了我错误...

$composer.phar --version
Fatal error: Uncaught ErrorException: preg_match_all(): JIT compilation failed: no more memory in phar:///Users/kristin/Sites/htdocs/composer.phar/vendor/symfony/console/Formatter/OutputFormatter.php:137

将 php.ini 中的 memory_limit 从 128M 增加到任何值都不能解决问题,并且 pcre.jit=1 已被注释掉,因此将其关闭也没有任何作用。

这是有效的:

我只是将导出路径更改为以前版本的目录(实际上并未在 MAMP 的首选项中降级)并且它起作用了!

$export PATH=/Applications/MAMP/bin/php/php7.2.20/bin:$PATH
$composer.phar --version
Composer version 1.9.0 2019-08-02 20:55:32

如果有人能解释为什么这会奏效,我将不胜感激。干杯。

于 2019-08-17T21:37:43.543 回答
-1

这对我有用 -

  alias composer='php -d pcre.jit=0 /usr/local/bin/composer'

它不需要旧版本的 PHP,并且特定于作曲家。要在 shell 闭包中持续存在,请编辑并添加到 ~/.bash_profile。

于 2020-07-05T23:47:31.563 回答