【问题标题】:Install PECL SSH2 extension for PHP为 PHP 安装 PECL SSH2 扩展
【发布时间】:2010-10-08 08:13:50
【问题描述】:

我正在尝试安装它 http://fr2.php.net/manual/en/book.ssh2.php 在 Centos 5(RHEL 5 的一个分支)上。

我安装了位于 /usr/lib 中的 libssh2(yum install libssh2),当我安装 SSH2 扩展(通过 pecl install -f ssh2)时,我收到了这条消息

正在检查默认路径中的 ssh2 文件...未找到 配置:错误:找不到所需的 libssh2 库。您可以从http://sourceforge.net/projects/libssh2/ 获取该软件包 错误:`/tmp/pear/download/ssh2-0.11.0/configure --with-ssh2=/usr' 失败

如果我设置 /usr/lib,我会收到相同的消息

错误:`/tmp/pear/download/ssh2-0.11.0/configure --with-ssh2=/usr/lib' 失败

问题出在哪里?

【问题讨论】:

    标签: php ssh


    【解决方案1】:

    通过http://sourceforge.net/projects/libssh2/ 的tar.gz 安装libssh2 有很大帮助(--with-ssh2=/usr/local/include/)。

    但是“yum install libssh2-devel”是一个更好的主意。

    【讨论】:

    • 您是从哪个存储库获取的?我在默认或 Atomic 中找不到它。
    • 我们不需要pecl install吗?
    • 此安装不需要 PECL,但您可能有其他解决方案。
    • 这让生活更轻松。谢谢!安装 libssh2-devel 后,您可以“pecl install ssh-1.1.2”或任何最新版本,它会工作。编辑:没有意识到这是一个 2009 threadn 仍然有效。 :P
    【解决方案2】:
    $ sudo pecl channel-update pecl.php.net
    $ sudo apt-get install libssh2-1-dev
    $ sudo pecl install -a ssh2-0.12
    $ echo 'extension=ssh2.so' | sudo tee /etc/php5/mods-available/ssh2.ini > /dev/null
    $ sudo php5enmod ssh2
    

    【讨论】:

    • 在 Vagrant 上的 Ubuntu 机器上运行良好。
    • 如果你的 Vagrant box 运行的是 php 7,sudo pecl install -a ssh2-1.0 按照their documentation
    • 我按照说明进行操作,当我通过 apache 运行 php 时,模块可用。但不是当我从命令行运行 php 时。这个时候你会怎么做?
    【解决方案3】:

    yum install libssh2-devel 对我不起作用:

    没有可用的软件包 libssh2-devel。

    所以我从rpmfind下载了rpm包并用rpm -ivh安装

    之后只是将extension=ssh2.so 添加到/etc/php.d/ssh2.ini

    【讨论】:

      【解决方案4】:

      这是从@klay 更新的answer + 来自@avn 的修改,来自 PHP 7.x 的工作解决方案下的评论。

      $ sudo pecl channel-update pecl.php.net
      $ sudo apt-get install libssh2-1-dev
      $ sudo pecl install -a ssh2-1.0
      $ echo 'extension=ssh2.so' | sudo tee /etc/php/7.2/mods-available/ssh2.ini > /dev/null
      $ sudo phpenmod ssh2
      

      关于线路:

      echo 'extension=ssh2.so' | sudo tee /etc/php/7.2/mods-available/ssh2.ini > /dev/null
      

      确保路径/etc/php/7.2/mods-available 有效且与您的php 版本匹配。

      【讨论】:

        【解决方案5】:

        我在 Centos 上运行,这些答案都不是我的完整解决方案。我关注了these instructions:

        $ sudo yum install -y gcc php-devel php-pear libssh2 libssh2-devel
        

        但是php-devel 不会安装,抱怨冲突。我搜索了 yum 以找到我可用的 php 开发包

        ​​>
        $> yum search php|grep devel
        ...
        php55u-devel.x86_64 : Files needed for building PHP extensions
        php56u-devel.x86_64 : Files needed for building PHP extensions
        php70u-devel.x86_64 : Files needed for building PHP extensions
        ...
        

        所以我跑了

        $> sudo yum install -y php56u-devel
        

        而且它安装得很干净。然后,按照说明继续,我跑了

        $ pecl install -f ssh2
        

        然后编译。然后我将扩展添加到 php

        $ touch /etc/php.d/ssh2.ini
        $ echo extension=ssh2.so > /etc/php.d/ssh2.ini
        

        在我的系统上,而不是

        $ /etc/init.d/httpd restart
        

        我不得不这样做

        $ sudo /bin/systemctl restart  php-fpm.service 
        

        这就是安装的所有步骤。最后确认:

        $> php -m|grep ssh2
        ssh2
        

        【讨论】:

          【解决方案6】:

          我遇到了这个问题:

          我使用的是 Pair.com“高级”托管帐户,因此我的权限有限。我不认为我可以 yum 或 aptitude 或任何其他预编译包。

          我已经下载并编译了 libssh2。在pecl 过程中,它会询问库的位置。它在“~/usr/local/lib”中,我尝试了几种变体,包括完全限定的。但我一直收到同样的错误。

          错误消息没有准确说明它要查找的文件。 libssh2.so 在该目录中。我知道输出应该是 ssh2.so。我想知道是否应该有 ss2.something 或 libssh.nothing?

          我就这样修好了。就我而言,在编译 libssh2 之后,我下载了 PEAR 压缩包。诀窍是:

          ./configure --with-ssh2=<libssh2 location> --prefix=<libssh2 location>
          

          另一个技巧是,由于 Pair.com 正在运行 FreeBSD,我必须执行“cd”。在 ./configure 命令之后。否则,make 会产生“Permission denied”错误。显然,这对于所有 *nix BSD 风格都是必需的。

          【讨论】:

            【解决方案7】:

            错误:

            checking for ssh2 files in default path... not found
            configure: error: The required libssh2 library was not found.
            

            ...可以在the source code看到。

            代码中的逻辑表明,如果在/usr/local、/usr 或可选--with-ssh2=[DIR] 指令提供的路径中找不到/include/libssh2.h,它将引发此错误。换句话说,在不自定义指令的情况下,它需要找到以下之一:

            /usr/local/include/libssh2.h
            /usr/include/libssh2.h
            

            如果它通过了这个检查,那么它假定它可以在/usr/local/lib 或/usr/lib 找到libssh2 lib。

            希望以上信息足以帮助某人调试他们的问题。我自己的案例是相当具体和不寻常的(在自定义安装路径中使用 Homebrew 的 macOS),但如果它对其他人有帮助,这是我可怕的 hacky 解决方法。完美运行哈哈

            简而言之,我正在创建两个临时符号链接,以便 pecl 可以在它期望的位置找到 ssh2。

            # First check that neither /usr/local/include nor /usr/local/lib exists
            
            sudo ln -s /usr/local/CustomInstallPath/Homebrew/Cellar/libssh2/1.9.0_1/include /usr/local/include
            sudo ln -s /usr/local/CustomInstallPath/Homebrew/Cellar/libssh2/1.9.0_1/lib /usr/local/lib
            pecl install -a ssh2-1.3.1
            sudo rm -rf /usr/local/include
            sudo rm -rf /usr/local/lib
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-04-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-09-21
              • 2019-04-13
              • 1970-01-01
              相关资源
              最近更新 更多