【问题标题】:How to install a PECL package with composer?如何使用 composer 安装 PECL 包?
【发布时间】:2020-03-05 21:19:10
【问题描述】:

我希望用 Composer 安装一个 PEAR 包(特别是来自 pecl.php.net 的 mongodb)。

我可以使用以下 composer.json 从主“pear”通道安装一个包:

{ "repositories": [{
            "type": "pear",
            "url": "https://pear.php.net"
        }],
    "require": { "pear-pear/http": "*" }
}

(注意:https://getcomposer.org/doc/05-repositories.md#pear 的原始示例不起作用)

但我得到了:

请求的包pear-pecl/mongodb在任何版本都找不到,可能包名有错别字

...当我尝试设置“pecl”频道时:

"require": { "pear-pecl/mongodb": "*" }

我可以看到带有pear list-channels的pecl频道:

$ pear list-channels
Registered Channels:
====================
Channel      Alias   Summary
doc.php.net  phpdocs PHP Documentation team
pear.php.net pear    PHP Extension and Application
                     Repository
pecl.php.net pecl    PHP Extension Community Library

我可以使用pear install pecl/mongodb 安装相同的软件包。

【问题讨论】:

    标签: php composer-php pear pecl


    【解决方案1】:

    pecl/mongodb 是二进制驱动程序。我看不出作曲家如何能够将它本地安装到项目中。我认为您无法通过 composer 安装任何 PECL 扩展。

    Composer 可以管理项目的 PHP 依赖项,这些依赖项需要包含有效的 composer.json 文件才能被识别为包。

    如果您检查pecl/mongodb repo,您将看不到这样的东西。这是一个 C 语言项目,需要作为运行时扩展进行编译和安装。

    PECL 扩展并不意味着安装在项目中,这样做也没有意义;但需要为 PHP 运行时安装和启用。当您运行 pear install pecl/mongodb 时,您正在为使用相同运行时的所有项目安装二进制扩展。

    【讨论】:

    • 所以 Composer 仅适用于项目本地包,而 PEAR 是纯 PHP 和 C 包的混合,两者都安装在系统范围内?听起来很奇怪。
    • 是的,这很奇怪。但是 PEAR 和 PECL 早于 Composer。您可以使用 composer 全局安装一些包(参见--global)。如果它是一个有效的包(例如,有一个composer.json 定义),你甚至可以安装非 PHP 文件。但是 PECL 扩展是二进制的,需要在运行时安装。 Composer 帮不了你。并且无论如何都没有composer.json 文件,因此撰写不会将它们视为“包”。
    【解决方案2】:

    由于 pecl.php.net 存储库已损坏,因此无法使用 Composer 安装 PECL 包(请参阅https://bugs.php.net/bug.php?id=76719 和相关票证)。

    可以用

    添加到composer.json
    { "repositories": [
            {   "type": "pear",
                "url": "https://pecl.php.net"
            }],
        "require": {
           "pear-pecl/mongodb": "*"
        }}
    

    但由于https://pecl.php.net/rest/c/Authentication/packagesinfo.xml 中的 XML 损坏,安装失败

    【讨论】:

      猜你喜欢
      • 2021-06-05
      • 2012-10-11
      • 2015-09-26
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 2021-05-25
      相关资源
      最近更新 更多