作曲家更新时数组中尾随逗号的 PHP 7.2 语法错误

cba*_*nar 5 php syntax-error composer-php

我跑Ubuntu 16.04PHP 7.2.29Composer 1.10.5。我正在尝试更新 acomposer update但是当它开始更新列出的包时,最终会到达数组中带有尾随逗号的包,这开始抛出语法错误

PHP Parse error:  syntax error, unexpected '' => ' (T_ENCAPSED_AND_WHITESPACE) in /var/www/vendor/yiisoft/extensions.php on line 52
Run Code Online (Sandbox Code Playgroud)

我试图直接在包(供应商目录)中更正这些错误,这确实允许我继续前进......除了错误永远不会停止!(更新:我知道不推荐这样做,它仅用于测试目的)

样品(更新):

这些是抛出该语法错误的供应商文件示例。在所有这些(以及更多)中,数组文件的最后几行被指出是原因。如果我删除尾随逗号,错误会继续查找包含尾随逗号的下一个供应商文件。

样品来自 /vendors/yiisoft/extensions.php

  'creocoder/yii2-nested-sets' => 
  array (
    'name' => 'creocoder/yii2-nested-sets',
    'version' => '0.9.0.0',
    'alias' => 
    array (
      '@creocoder/nestedsets' => $vendorDir . '/creocoder/yii2-nested-sets/src',
    ),
  ),
);
Run Code Online (Sandbox Code Playgroud)

样品来自 /vendors/composer/autoload_classmap.php

    'yii\\widgets\\Pjax' => $vendorDir . '/yiisoft/yii2/widgets/Pjax.php',
    'yii\\widgets\\PjaxAsset' => $vendorDir . '/yiisoft/yii2/widgets/PjaxAsset.php',
    'yii\\widgets\\Spaceless' => $vendorDir . '/yiisoft/yii2/widgets/Spaceless.php',
);
Run Code Online (Sandbox Code Playgroud)

样品来自 /vendors/composer/autoload_namespaces.php

    'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib'),
    'DaveChild\\TextStatistics' => array($vendorDir . '/davechild/textstatistics/src'),
    '' => array($vendorDir . '/mofodojodino/profanity-filter/src'),
);
Run Code Online (Sandbox Code Playgroud)

据我了解,尾随逗号是一种相当普遍的做法,不会在 PHP 中引起任何问题。

谁能告诉我发生了什么或者我接下来可以调查什么?

额外细节

我想正在安装的程序包不应该问题,因为这似乎是一个PHP宽的错误,但以防万一,这是一个旧版本的Craft CMS 3.0.34,运行上Yii 2.0.15.1。我正在努力更新此版本,但由于这些问题我无法更新。然而,抛出错误的软件包各不相同......我的意思是......在放弃那场愚蠢的战斗之前,我编辑了大约 6 个不同供应商的文件。

更新

收到一些反馈后,我发现在云服务器上运行相同的设置没有描述的问题。表明以某种方式在 VirtualBox/Vagrant 设置上运行它正在触发它。

小智 -2

看起来 Composer 没有使用 PHP 7.2(或更高版本)。您可以通过php -v在命令行上运行来测试这一点。要查看您是否安装了 PHP 7.2,您至少应该能够php7.2在较新版本的 ubuntu 上执行此操作。

希望能帮助到你

  • 请通过编辑来为您的答案添加更多解释。为什么需要 PHP 7.2?如果这是一个逗号问题(如标题中所示),则支持此问题的最低版本是 PHP 4 (4认同)