Php 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工作的地方,它不再工作了。我们在新服务器上启用了
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。这个解决方案对我很有效。幸亏