当前位置:  开发笔记 > 编程语言 > 正文

无法让SFTP在PHP中运行

如何解决《无法让SFTP在PHP中运行》经验,为你挑选了4个好方法。

我正在用PHP编写一个简单的SFTP客户端,因为我们需要通过n个远程服务器以编程方式检索文件.我正在使用PECL SSH2扩展.

不过,我遇到了一个障碍.php.net上的文档表明你可以这样做:

$stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r');

但是,我有一个尝试类似的ls方法

public function ls($dir)
{
    $rd = "ssh2.sftp://{$this->sftp}/$dir";
    $handle = opendir($rd);
    if (!is_resource($handle)) {
        throw new SFTPException("Could not open directory.");
    }

    while (false !== ($file = readdir($handle))) {
        if (substr($file, 0, 1) != '.'){
            print $file . "\n";
        }
    }
    closedir($handle);
}

我收到以下错误:

PHP Warning:  opendir(): Unable to open ssh2.sftp://Resource id #5/outgoing on remote host

这非常有意义,因为当您将资源转换为字符串时会发生这种情况.文档错了吗?我尝试用主机,用户名和主机替换资源,但这也不起作用.我知道路径是正确的,因为我可以从命令行运行SFTP,它工作正常.

有没有其他人尝试过使用SFTP的SSH2扩展?我错过了一些明显的东西吗?

更新:

我在内部的另一台机器上安装了sftp,它运行得很好.所以,我试图连接到的服务器必须有一些不起作用.



1> Luis Gustavo..:

连接到SFTP服务器并且需要连接到根文件夹(例如,用于读取文件夹的内容)时,如果仅使用"/"作为路径,则仍会出现错误.

我找到的解决方案是使用路径"/./",这是一个引用根文件夹的有效路径.当您登录的用户只能访问其自己的根文件夹且没有可用的完整路径时,这非常有用.

因此,当尝试读取根文件夹的内容时,服务器的请求应该是这样的:

$rd = "ssh2.sftp://{$this->sftp}/./";


你是受欢迎的@BradenAnderson,我在这里找到了很多答案,我认为我提供的答案是公平的
这是正确的答案.从PHP 5.2和5.4之间的某个时间引入了一个错误,它破坏了对根目录的访问.感谢您提供解决方法!
我在https://bugs.php.net/bug.php?id=64169上添加了一个指向您答案的链接.

2> Calin Blaga..:

对于php版本> 5.6.27使用intval()

$sftpConnection = ssh2_connect($host);
$sftp = ssh2_sftp($sftpConnection);
$fp = fopen("ssh2.sftp://" . intval($sftp) . $remoteFile, "r");

https://bugs.php.net/bug.php?id=73597


这是正确的答案!谢谢.

3> safoo..:

我有类似的问题.我假设你正在做类似的事情:

    $dir = "ssh2.sftp://{$sftp}{$remote_dir}"; 
    $handle = opendir($dir);

$remote_dir从根开始的完整路径何时open_dir起作用.如果$remote_dir只是'/'或'',那么我会像你那样得到'无法打开'错误.

在我的情况下,似乎ssh连接在根文件夹而不是像ftp那样的'home'目录.你提到它在不同的服务器上工作,所以我想知道它是否只是一个配置问题.



4> Max..:

PHPSECLIB:http://phpseclib.sourceforge.net/是让PHP在PHP中工作的最简单方法(即使在Windows上),而不安装任何扩展等.SSH的东西完全在PHP类中实现.

你使用是这样的:

login('username', 'password')) {
    exit('Login Failed');
}

echo $sftp->pwd();
?>

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有