安装PHP的PECL SSH2扩展

brvekthn  于 11个月前  发布在  PHP
关注(0)|答案(7)|浏览(103)

我正试图在Centos 5(RHEL 5的一个分支)上安装这个http://fr2.php.net/manual/en/book.ssh2.php
我安装了libssh 2(yum install libssh 2),它位于/usr/lib中,当我安装SSH 2扩展(通过pecl install -f ssh 2)时,我得到以下消息
正在检查默认路径中的ssh 2文件...未找到配置:错误:找不到所需的libssh 2库。您可以从http://sourceforge.net/projects/libssh2/获取该软件包错误:/tmp/pear/download/ssh 2 -0.11.0/configure --with-ssh 2 =/usr'失败 如果我设置/usr/lib,我会得到同样的消息 错误:/tmp/pear/download/ssh 2 -0.11.0/configure --with-ssh 2 =/usr/lib'失败
问题出在哪里?

gblwokeq

gblwokeq1#

http://sourceforge.net/projects/libssh2/通过tar.gz安装libssh 2非常有用(--with-ssh 2 =/usr/local/include/)。
但是:

yum install libssh2-devel

字符串
是个更好的主意

4szc88ey

4szc88ey2#

$ 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

字符串

w41d8nur

w41d8nur3#

这是来自@serghei的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版本匹配。

jckbn6z7

jckbn6z74#

yum install libssh2-devel不适合我:
没有可用的libssh 2-devel包。
所以我从rpmfind下载了rpm软件包,并与rpm -ivh一起安装
之后,刚刚添加了extension=ssh2.so/etc/php.d/ssh2.ini

3htmauhk

3htmauhk5#

我在Centos上运行,这些答案对我来说都不是完整的解决方案。these instructions

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

字符串
但是php-devel无法安装,抱怨冲突。我搜索了yum,想找到我有哪些可用的phpdevel包

$> 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

krugob8w

krugob8w6#

我遇到了这个问题:
我使用的是Pair.com“高级”托管帐户,所以我可以做的事情有点受限。我不认为我可以yumaptitude或任何其他预编译包。
我下载并编译了libssh 2。在pecl过程中,它会询问库的位置。它位于“~/usr/local/lib”中,我尝试了几种变体,包括完全限定的。但我不断得到同样的错误。
错误信息没有准确地说明它要查找的文件。libssh2.so在该目录中。我知道输出应该是ssh2.so。我想知道是否应该有ss2.something,或者libssh.nothing?
我就这样解决了。在我的例子中,编译libssh 2之后,我下载了PEARtarball。诀窍是:

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

字符串
另一个技巧是,由于Pair.com运行的是FreeBSD,所以我必须在./configure命令之后添加一个“cd .”。否则,make将产生“Permission denied”错误。显然,这是必要的所有 *nix BSD口味。

fcipmucu

fcipmucu7#

错误:

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

字符串
可以在源代码中看到。
代码中的逻辑显示,如果在/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
希望上面的信息足以帮助人们调试他们的问题。我自己的情况相当具体和不寻常(macOS与Homebrew在一个自定义安装路径),但如果它可以帮助其他人,这里是我可怕的黑客解决方案。工作完美lol
简而言之,我创建了两个临时符号链接,以便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

相关问题