php - SSH2 在新服务器上不工作

标签 php libssh2 ssh2-sftp

我们已经更换了托管公司,ssh2 工作的地方不再工作了。我们在新服务器上启用了 ssh2 并启用了 allow_url_fopen

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

但是,我现在收到以下错误。 无法打开远程文件: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() 函数发生了什么。

最佳答案

在尝试不同选项数小时后,我终于遇到了这个问题。 http://php.net/manual/en/wrappers.ssh2.php

我改变了这个: $fetch_string = "ssh2.sftp://$sftp". $远程目录。 $remote_file;

为此: $fetch_string = "ssh2.sftp://user:password@mywebsiteorip.com". $远程目录。 $remote_file;

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

我不确定在较新的版本中,他们是否只是弃用了 ssh2_sftp() 函数,或者它是否只是一个像 @billynoah 提到的错误,因为上面的链接甚至没有使用它.

我知道这有多痛苦,所以希望它能帮助其他人!

关于php - SSH2 在新服务器上不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41169693/

相关文章:

node.js - 查询远程服务器的操作系统

node.js - 无法使用 Node js 从 SFTP 下载大文件

php - 如何在Windows Server上的PHP中触发500 Internal Server Error

php - SELECT SUM 带日期变量,用于 prestashop

php - php、wamp、windows 中的 SSH2

c++ - 当目标路径存在时 curl SFTP 重命名

javascript - 为从 ssh2-sftp-client 中的缓冲区上传的文件分配名称?

php - 由 php 调用时 curl 未正确执行

php - MySQL:今天是谁 "on"在两个不同的日期之间

c - 在 libgit2 中使用 SSH 身份验证