我们更改了托管公司,并且ssh2在其中工作的位置不再有效。我们在新服务器上启用了ssh2
,并启用了allow_url_fopen
。SSH2无法在新服务器上工作
我能看到的唯一区别是旧服务器使用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?它是否有适当的权限? – ivanivan
我可以手动进行身份验证,并且连接可以正常工作。当我说新服务器时,我指的是脚本所在的位置,用于调用其他服务器。文件存在的其他服务器根本没有改变。只是托管上述脚本的服务器。 – MagentoMan
禁用防火墙并查看效果(SSH脚本所在的服务器)。哦,你已经可以成功地发出SSH请求了吗?如果是这样,那么可能是@ivanivan提到的文件权限问题。 – webDev