SSH2无法在新服务器

时间:2016-12-15 17:08:12

标签: php libssh2 ssh2-sftp

我们已经更改了托管公司,ssh2正在运行的地方已经不再适用了。我们在新服务器上启用了ssh2并启用了allow_url_fopen

我能看到的唯一区别是旧服务器使用PHP 5.4.45而新服务器使用PHP 5.6.28

但是,我现在收到以下错误。 Could not open remote file: ssh2.sftp://Resource id #337/my/directory/file.txt

以下是我的代码示例:

$remote_host = "myhostinfohere";
$remote_port = 22;
$remote_user = "myuser";
$remote_pass = "mypassword";
$remote_dir = "/my/directory/";
$remote_file = 'file.txt';

try {
    $remote_conn = ssh2_connect($remote_host, $remote_port);    
} catch (Exception $e) {
    die("could not connect to ".$remote_host);
}

try {
    ssh2_auth_password($remote_conn, $remote_user, $remote_pass);
} catch (Exception $e) {
    die("Password failed on ".$remote_host);
}

$sftp = ssh2_sftp($remote_conn);

$fetch_string = "ssh2.sftp://$sftp" . $remote_dir . $remote_file;

//If I add this it says it doesn't exists for some reason even though I can see the file if I log in remotely.
$fileExists = file_exists($fetch_string);
if (!$fileExists) { 
    die('File does not exist');
}

$stream = fopen($fetch_string, 'r');

if (!$stream) {
    die("Could not open remote file: " . $fetch_string . "\n");
}

同样,这个相同的代码适用于旧服务器,但不适用于新服务器。我错过了什么?我可以使用ssh2_scp_recv()轻松将文件复制到我的服务器,这样可以正常工作,因此我不确定fopen()函数发生了什么。

5 个答案:

答案 0 :(得分:5)

经过几个小时尝试不同的选择后,我终于碰到了这个。 http://php.net/manual/en/wrappers.ssh2.php

我改变了这个:     $fetch_string = "ssh2.sftp://$sftp" . $remote_dir . $remote_file;

对此:     $fetch_string = "ssh2.sftp://user:password@mywebsiteorip.com" . $remote_dir . $remote_file;

然后fopen()函数开始工作。

我不确定在新版本中是否只是弃用了ssh2_sftp()函数,或者它是否只是像@billynoah那样的bug,因为上面的链接甚至没有使用它。

我知道这有多大的痛苦,所以希望它会帮助别人!

答案 1 :(得分:3)

这里$ fetch_string =" ssh2.sftp:// $ sftp" 。 $ remote_dir。 $ remote_file;

使用intval($ sftp)而不是$ sftp

答案 2 :(得分:1)

很可能与ssh2扩展中的这个错误相关 - 我刚刚遇到这个错误:

https://bugs.php.net/bug.php?id=71376

它破坏了Wordpress中的ssh2更新功能:

https://core.trac.wordpress.org/ticket/35517

答案 3 :(得分:1)

我也遇到了同样的问题而且我经常挣扎。对我来说现在已经修好了。
这就是我所做的:
我的PHP版本: 5.6.25
https://phpfashion.com/php-ssh2-dll-for-php-5-6-and-7-0下载最新的php_ssh2.dll(PHP 5.6 x64的php_ssh2.dll)
替换了以下位置的 php_ssh2.dll " C:\ wamp64 \ bin \ php \ php5.6.25 \ ext" &重启了我所有的服务。

答案 4 :(得分:0)

确保在(Powershell)服务器上启用了sftp服务