【发布时间】:2016-12-15 17:08:11
【问题描述】:
我们更改了托管公司,而 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() 函数发生了什么。
【问题讨论】:
-
您可以在新服务器上使用相同的用户/密码手动进行身份验证吗? /my/directory/file.txt 是否存在于新服务器上?它有适当的权限吗?
-
我可以手动进行身份验证,并且连接确实有效。当我说新服务器时,我的意思是脚本所在的位置用于调用另一台服务器。文件所在的另一台服务器根本没有改变。只是托管上述脚本的服务器。
-
禁用防火墙看看效果(SSH脚本所在的服务器)。哦,您已经可以成功发出 SSH 请求了吧?如果是这样,那可能是@ivanivan 提到的文件权限问题。
-
托管上述脚本的是哪台服务器?不幸的是,我无法禁用包含该文件的服务器上的防火墙。
-
你的 SSH 脚本(上面的脚本)所在的服务器 ...