2

我们改变了托管公司,而 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()功能发生了什么。

4

5 回答 5

6

经过数小时尝试不同的选择后,我终于遇到了这个问题。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 提到的一个错误,因为上面的链接甚至没有使用它。

我知道这是多么痛苦,希望它能帮助别人!

于 2016-12-15T22:14:51.887 回答
3

这里 $fetch_string = "ssh2.sftp://$sftp" 。$remote_dir 。$远程文件;

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

于 2017-03-30T20:41:36.197 回答
1

很可能与 ssh2 扩展中的这个错误有关——我最近遇到的这个错误:

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

这会破坏 Wordpress 中的 ssh2 更新功能:

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

于 2016-12-15T20:09:37.230 回答
1

我也面临同样的问题,我很挣扎。对我来说它现在固定了。
这就是我所做的:
我的 PHP 版本:5.6.25
从以下位置下载了最新的 php_ssh2.dll: https ://phpfashion.com/php-ssh2-dll-for-php-5-6-and-7-0 (php_ssh2 .dll for PHP 5.6 x64)
替换了以下位置的php_ssh2.dll : “C:\wamp64\bin\php\php5.6.25\ext”并重新启动了我的所有服务。

于 2017-06-07T11:06:52.870 回答
0

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

于 2017-03-09T16:07:11.357 回答