在Windows机器上安装SSH2的PHP

21

我正在尝试在一个Windows+Apache机器上安装this。 文档中提到SSH2需要OpenSSLlibssh2库。 我已经在我的php.ini文件中添加了这些行:

extension=php_openssl.dll
extension=php_ssh2.dll

我已经重新启动了Apache,但它仍然无法工作(Fatal error: Call to undefined function ssh2_connect())。

有人能向我解释如何安装此服务吗?

8个回答

30

这是我完成它的方法:

  1. 这个位置下载Win32 SSH2 PECL扩展(选择适当的版本);

  2. 提取存档的内容并:

    • php_ssh2.dllphp_ssh2.pdb文件放置在ext文件夹中(例如C:\ php \ ext );
    • 复制libssh2.dll文件到C:\Windows\system32和(如果您使用的是Win64)C:\Windows\SysWOW64文件夹;
  3. 运行以下命令注册DLL:

    C:\> regsvr32 libssh2.dll
    
  4. 重启了Apache。

最后说明

如果你使用的是PHP x64,则需要查找SSH2库/ DLL的x64版本。 此网站提供了一些针对PHP编译的Win64库,请先尝试这里。

希望这能有所帮助。


1
我正在尝试使用Phing在命令行中设置它。按照您的说明,php -i显示SSH2支持已启用,但是尝试运行Phing任务却导致Windows消息出现PHP崩溃。有什么提示可以帮助解决问题吗? - Rarst
1
通过更新 Web 栈中的所有内容和版本,问题得到了解决。可能是某些 DLL 冲突或其他问题。 - Rarst
适用于PHP 5.3.27和PHP 5.4.15版本的系统。运行完美! - Milan
我正在使用PHP 5.6,但可能没有什么希望了,因为没有可下载的.dll文件,而且vc11不兼容。 - Christian
@Christian:我也需要在PHP5.6中实现这个功能,如果你有什么想法,请务必告诉我们 :) - J23
1
对于PHP 7.1,我必须从此位置获取:http://pecl.php.net/package/ssh2/1.1.2/windows(线程安全版本)。我按照这个答案中描述的方式将这些文件复制到我的php/ext目录中。尝试运行regsvr32对我没有用,但我不确定它是否必要。我在php目录中找到了一个libssh2.dll的副本。 - Richard

12

如果有人在安装SSH2时遇到了问题,以下是我是如何做的:

1)从PHP.net下载适合的版本SSH2 PECL库。

2)将 libssh2.dll 复制到 System32 [x86] 或 SysWOW64 [x64] 文件夹。

3)将 php_ssh2.dllphp_ssh2.pdb 复制到 php/ext 文件夹中。

4)从 php.ini 中的 ;extension=php_ssh2.dll 行中删除 ';' 。如果 php.ini 上没有此行,则添加它。

5)重新启动 Apache


在xampp上,我不得不将libssh2.dll复制到C:\ xampp \ php文件夹中,但当我运行脚本时,xampp停止工作。 - Mukesh
将扩展 DLL 文件放置在 PHP 的 "ext" 子文件夹中,这是它应该所属的位置。 - StanE
1
libssh2.dll不在下载文件中!我应该从哪里获取它? - Morteza Hasanabadi

8
  1. php_ssh2.dll放置在ext文件夹中。
  2. libssh2.dll放置在php文件夹中。
  3. 重新启动IIS

对我来说这很有效。

  • PHP 5.4.25 NTS + Windows Server 2012

1
我个人(在Windows 7上)不得不将这些库添加到 C:\Windows\SysWOW64 (32位系统为 C:\Windows\System32)。 - jave.web

5
如果您正在运行xamp 3.2.1和PHP 5.6.8,这可能会对您有所帮助。
按照alex b的建议,在此页面(link)下载与您的php版本(和位数)相对应的软件包。
我已经下载并替换了C:\ xampp \ php \ ext,它可以工作!
希望这有所帮助,问候。

5.6 x86版本的DLL包含恶意软件。其他版本暂不清楚。 - djdy

4

3
我安装了PHP 5.6.25/7.0.10和MySQL 5.7.14的WAMP,目前正在使用PHP 7.0。我遇到了相同的错误。我使用phpinfo()检查了OpenSSL和libssh2库是否正常工作(您可以Google如何检查)。在确认它们正常工作后,我从http://pecl.php.net/package/ssh2/1.0/windows(也可以在http://windows.php.net/downloads/pecl/releases/ssh2/)下载了php_ssh2.dll的7.0版本,并将其放置在php\ext文件夹中。然后,我在php.ini文件中使用extension=php_ssh2.dll包含它。
然后它出现在phpinfo()中。它工作了。希望这有所帮助。

1

以下是对我有效的解决方法。我的版本是xampp v.3.2.1 apache 2.2,面临相同的问题,尝试将dll文件放置在不同的c:位置,但均失败,最终采取了以下措施。

1.) 从http://pecl.php.net/package/ssh2/0.12/windows下载特定版本的dll文件,并提取文件。

请注意,即使您使用64位版本的Windows,也要根据您的php版本下载32位版本的THREAD SAFE ssh,即Thread Safe(TS)x86

2.) 在C:\xampp\php(标准安装)中添加/替换libssh2.dll

3.) 在C:\xampp\php\ext(标准安装)中添加/替换php_ssh2.dll和php_ssh2.pdb

4.) 重新启动apache服务器

非常完美地解决了问题

干杯


1
请问我从哪里可以获取适用于版本:Apache/2.4.18 (Win32) OpenSSL/1.0.2e PHP/7.0.6 on x86 Architecture的libssh2.dll和php_ssh2.dll?通过检查phpinfo.php,它显示OpenSSL已启用。我很难找到合适的dll文件。尝试了很多但都不起作用。任何帮助将不胜感激。 - tejas033

0
首先,你的问题揭示了两个误解:
  1. 要求部分实际上是这样说的:

    需要 OpenSSL 和 libssh2 库。确保安装了开发库,一个典型的包名称可能是 openssl-dev。

    它不是在谈论 PHP 扩展,而是在谈论与 PHP 无关的第三方库。

  2. extension=php_ssh2.dll 要求你实际上在 PHP 的 ext 目录中有一个名为 php_ssh2.dll 的文件,你可能没有它,主要是因为它没有捆绑在 PHP 中。

如果我们检查安装章节,我们可以看到 SSH2 是一个 PECL 扩展。有一些带有说明的链接,但我可以总结一下重要信息:

  • 您需要一个与您的PHP安装相匹配的php_ssh2.dll文件。
  • PHP团队和PECL团队都不分发这样的文件。
  • 在Windows上安装PECL扩展很困难。您需要下载C源代码,获取C编译器并自己制作文件,或者找到已经为您完成此操作的人。

话虽如此,除非您搜索php_ssh2.dll并找到相关内容,否则您可能会运气不佳。


我在我的服务器上有 php_ssh2.dll,我已经从这里下载了它:http://www.php.net/releases/#5.2.6 >> PECL 5.2.6 Win32 二进制文件。 - LaYle
也许你可以建议我另一种使用密钥通过PHP进行SFTP的方法? - LaYle
@LaYle - 你正在使用PHP/5.2.6吗? - Álvaro González
@LaYle - 看起来已经有很多问题了。这个答案表明PHP具有内置支持 :-? - Álvaro González
3
就此而言,Windows 版本的 php_ssh2 可在 http://windows.php.net/downloads/pecl/releases/ssh2/ 下载。 - Sebastian Zartner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接