安装SSH2 for PHP以在OSX 10.9.1上的Xampp Apache服务器上运行

时间:2013-12-23 02:15:14

标签: php macos apache xampp libssh2

我在运行OS X 10.9.1的Mac上运行Xampp,我正在尝试开发一个通过Ajax调用调用PHP脚本的网页。 Xampp在此用于开发目的,并不打算构成在线页面的后端。

PHP脚本需要通过ssh连接到远程机器,原因我是 计划使用ssh2库。当我尝试运行命令时:

  

$ connection = ssh2_connect('my.remote.machine.address',5432);

我收到以下错误:

  

致命错误:在第8行的/Applications/XAMPP/xamppfiles/htdocs/Project/getdata.php中调用未定义的函数ssh2_connect()

并且,通过调用'phpinfo()',似乎没有安装ssh2。我成功地在Windows,Ubuntu和Scientific Linux上使用了ssh2_connect,一周之后我似乎无法弄清楚我在OSX上做得不对,我怀疑可能存在路径损坏或与Apache交互的问题服务器OSX随附。这是我尝试过的:

予。 MacPorts和PECL方法(参考:http://lassebunk.dk/2011/05/26/installing-ssh2-for-php-on-mac-os-x/):

  • 已经存在于我的计算机上的东西:xcode(来自iStore),MacPorts(来自他们网站的安装程序),PHP 5.4.17以及显然是OSX附带的Apache服务器,我不得不停下来:
  

sudo apachectl stop

这样Xampp就可以了。

  • 运行命令:
  

sudo port install libssh2

因为libssh2和openssl库是在php中使用ssh2_connect的先决条件(参考:http://www.php.net/manual/en/ssh2.requirements.php);根据phpinfo(),openssl似乎已经安装在Xampp上。

  • 安装Pear:
  

sudo php /usr/lib/php/install-pear-nozlib.phar

  • 安装了Homebrew(否则'pecl install'命令失败):
  

ruby​​ -e“$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)”

  • RAN:
  

brew install autoconf

  • 现在我终于能够跑了:
  

$ sudo pecl install ssh2-0.12

以“/ opt / local”作为前缀

  • 现在我有了一个很好的ssh2.so文件,我将其添加到相关的php.ini:
  

/应用/ XAMPP / xamppfiles /等

添加以下行:

  

延长= /选择/本地/ LIB / php54 /扩展/无调试非ZTS-20100525 / ssh2.so

  • 从Xampp附带的GUI重新启动Xampp Apache Web服务器,但仍未找到ssh2。

II。从终端方法编译ssh2.so(参考:zizifu的评论http://www.php.net/manual/en/ssh2.installation.php):

  

./配置

     

     

make install

  

phpize

     

./ configure --with-ssh2

     

     

make install

  • 再次获得ssh2.so文件,将其添加到相关的php.ini,重启服务器,但仍无法正常工作。

很抱歉,如果这有太多细节,希望我提供的信息可以指出我做错了什么;我真的很感激任何解决方案/提示/事情来尝试解决这个问题。

1 个答案:

答案 0 :(得分:4)

您考虑过phpseclib, a pure PHP SSH2 implementation了吗?它有许多advantages over libssh2,包括改进的可移植性和速度。例如:

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>