PHP 7.2 语法错误在 composer 更新时数组中的尾随逗号

PHP 7.2 syntax error on trailing comma in array on composer update

提问人:cballenar 提问时间:4/12/2020 最后编辑:cballenar 更新时间:3/29/2023 访问量:1452

问:

我正在运行 、 和 .我正在尝试更新一个,但是当它开始更新列出的包时,最终会到达数组中带有尾随逗号的包,这开始引发语法错误Ubuntu 16.04PHP 7.2.29Composer 1.10.5composer update

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

我试图直接在软件包(供应商目录)中纠正这些错误,这确实允许我继续前进......除了错误永远不会停止! (更新:我知道不建议这样做,它只是为了测试目的)

示例(更新):

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

样品来源/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',
    ),
  ),
);

样品来源/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',
);

样品来源/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'),
);

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

谁能告诉我发生了什么,或者我下一步可以研究哪里?

其他详细信息

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

更新

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

composer-php 语法错误

评论

2赞 Jens 4/12/2020
这回答了你的问题吗?PHP解析/语法错误;以及如何解决它们
3赞 Barmar 4/12/2020
如果您从第三方库收到语法错误,则应与库作者一起处理。
1赞 Ali Ali 4/19/2020
可能是文件系统的问题,请 github.com/composer/composer/issues/8608 检查
1赞 Taron Saribekyan 4/20/2020
你是在虚拟机上运行还是在真正的 Ubuntu 16.04 上运行?
1赞 cballenar 4/21/2020
@AliAli谢谢你,我简直不敢相信我是唯一一个遇到这种情况的人。我今晚将开始测试,与帖子的作者相同。

答:

-2赞 Laus Brandt 4/19/2020 #1

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

希望对您有所帮助

评论

4赞 Nico Haase 4/19/2020
请通过编辑为您的答案添加更多解释。为什么需要 PHP 7.2?如果这是一个逗号的问题(如标题中给出的那样),则支持它的最低版本是 PHP 4