【问题标题】:Trying to install ssh2 on php尝试在 php 上安装 ssh2
【发布时间】:2011-12-16 14:55:03
【问题描述】:

首先我运行的是 PHP 5.3.3、CentOS 5.7 (2.6.18-274.3.1.el5xen)

其次,我基本上不知道自己在做什么......对不起!

首先我从http://www.libssh2.org/ 安装了libssh2。运行配置,制作,制作安装。不是真的了解所有这些东西,但按照在线说明似乎可以工作。

然后跑了

pecl install ssh2

到目前为止一切顺利。

按照说明在 php.ini 中添加了相关的扩展行。重启apache:

service httpd restart

一切都好。

但是在 phpInfo() 中找不到任何对 ssh 的引用。

试过

php -m | grep ssh2

并得到以下错误:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/ssh2.so' - /usr/lib64/php/modules/ssh2.so: undefined symbol: libssh2_sftp_readdir_ex in Unknown on line 0

我做错了什么/错过了什么,我该如何解决?

【问题讨论】:

  • 您是否将该行添加到正确的 php.ini 文件中?
  • 我发了财。如果我没有,它就不会尝试加载扩展,也不会出现错误! :)
  • 我在哪里可以找到它提到@liquorvicar 的 ssh2.c 文件?当我解压 tar.gz 文件时,有一个 /test/ssh2.c 和 /example/ssh2.c?我在“配置”和“制作”之后再次检查,没有新的文件副本出现在任何地方。这些文件中的任何一个都不是目录名称,它们不包含您提供的链接中指定的行? :(
  • @Codemonkey 我不是 PECL 内部工作的专家,因为我必须安装的任何东西都是开箱即用的,但我的猜测是 PECL 带有一个 ssh2.c 文件。也许对PECL有更多了解的人可以澄清这是否属实,如果是这样,您如何下载PECL模块并在安装前更改文件。

标签: php ssh pecl


【解决方案1】:

我在使用 CentOs 6.3 时遇到了类似的问题,我按照这个 guide 有点不同。

1) 安装所需的包:

yum install automake make php-devel libtool openssl-devel gcc++ gcc

2) 更改目录(/usr/lib/php 如果您有 32 位操作系统):

cd /usr/lib64/php

3) 下载源码(2013/02/28最新,查看最新here):

wget http://pecl.php.net/get/ssh2-0.12.tgz

4) 创建一个构建目录(我不喜欢在我的系统中乱七八糟)并解压包:

mkdir build-dir
mv ssh2-0.12.tgz build-dir
cd build-dir
tar xzvf ssh2-0.12.tgz

5) 准备编译步骤并编译:

phpize
./configure –with-ssh2
make

6) 复制系统中的模块(/usr/lib/php/modules/ssh2.so 如果你有 32 位操作系统):

cp modules/ssh2.so /usr/lib64/php/modules/ssh2.so

7) 更改配置并将这一行添加到/etc/php.d/ssh2.ini(虽然我不需要在我的设置中这样做,可能是因为我过去已经这样做了):

extension=ssh2.so

8) 如果需要,可以删除构建目录:

cd ../../
rm -f build-dir

【讨论】: