Php SSH2在新服务器上不工作
我们已经改变了托管公司,在ssh2工作的地方,它不再工作了。我们在新服务器上启用了Php SSH2在新服务器上不工作,php,libssh2,ssh2-sftp,Php,Libssh2,Ssh2 Sftp,我们已经改变了托管公司,在ssh2工作的地方,它不再工作了。我们在新服务器上启用了ssh2,同时启用了allow\u url\u fopen 我能看到的唯一区别是旧服务器使用的是PHP5.4.45,而新服务器使用的是PHP5.6.28 但是,我现在得到以下错误。 无法打开远程文件:ssh2。sftp://Resource id#337/my/directory/file.txt 下面是我的代码示例: $remote_host = "myhostinfohere"; $remote_port =
ssh2
,同时启用了allow\u url\u fopen
我能看到的唯一区别是旧服务器使用的是PHP5.4.45
,而新服务器使用的是PHP5.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\u scp\u recv()
轻松地将文件复制到我的服务器上,它工作正常,因此我不确定fopen()
函数发生了什么。很可能与ssh2扩展中的此错误有关-我最近遇到了:
这破坏了Wordpress中的ssh2更新功能:
经过几个小时的尝试,我终于遇到了这个问题 我改变了这一点:
$fetch\u string=“ssh2.sftp://$sftp”$远程目录$远程文件代码>
为此:
$fetch\u string=“ssh2。sftp://user:password@我的网站”$远程目录$远程文件代码>
并预设fopen()
函数开始工作
我不确定在较新的版本中,是否只是弃用了ssh2\u sftp()
函数,或者它只是一个类似@billynoah的bug,因为上面的链接甚至没有使用它
我知道这是多么痛苦,希望它能帮助别人 确保在(Powershell)服务器上启用了sftp服务此处$fetch\u string=“ssh2.sftp://$sftp”$远程目录$远程文件
使用intval($sftp)而不是$sftp我也遇到了同样的问题,我为此付出了很多努力。对我来说,它现在已经修好了。
这就是我所做的:
我的PHP版本:5.6.25
从以下位置下载最新的php_ssh2.dll:(php 5.6 x64的php_ssh2.dll)
替换了以下位置的php\u ssh2.dll“C:\wamp64\bin\php\php5.6.25\ext”&重新启动了我的所有服务。您能在新服务器上使用相同的用户/密码手动进行身份验证吗?新服务器上是否存在/my/directory/file.txt?它是否具有适当的权限?我可以手动进行身份验证,并且连接正常。当我说new server时,我指的是脚本所在的位置,用于调用另一台服务器。文件所在的另一台服务器根本没有更改。只有承载上述脚本的服务器。禁用防火墙并查看效果(SSH脚本所在的服务器)。哦,你已经可以成功地发出SSH请求了,对吗?。如果是这样,那么这可能是@ivan.Which服务器提到的文件权限问题,即承载上述脚本的服务器?不幸的是,我无法在包含该文件的服务器上禁用防火墙。您的SSH脚本(上面的脚本)所在的服务器…非常有趣。非常感谢。我直到现在才看到这一点。让我做一些进一步的挖掘。我刚刚验证了我可以使用ssh2\u scp\u recv()
将文件复制到我的服务器,尽管我更喜欢使用fopen()
。有什么想法吗?这很酷-我必须在php7/wordpress安装中试一试,看看是否有帮助。这应该被标记为正确答案,尽管解决方案看起来很奇怪-在从5.4切换到5.6.30后出现了相同的问题-没有一个ssh2方法起作用,唯一的解决方案是在fopen中使用完整的url。这个解决方案对我很有效。幸亏