【问题标题】:What file operations are available with ssh2:// in PHPPHP 中 ssh2:// 可以进行哪些文件操作
【发布时间】:2012-10-16 21:02:05
【问题描述】:

我正在重写一个在本地服务器上处理和排序文件的函数,该函数可以在通过 ssh 连接到达的远程服务器上执行此操作。

现有系统使用 pecl ssh2 库来抓取特定文件,例如:

if ($stream = @fopen("ssh2.sftp://$sftp/$filename", "r")) {
//do stuff...
}

但我还不知道文件名。我使用

在本地工作
$file_path =  ABSOLUTE_PATH . UPLOAD_URL . $importfolder . '/';
$file = '*.xml';
$files = glob($file_path.$file);

我无法让 glob() 通过 ssh 服务器工作

$files = glob("ssh2.sftp://$sftp/*.xml");

(尽管目录中有许多 xml 文件,但总是返回空白(sftp 连接到单个目录)。

我怎样才能做到这一点?我可以在这里使用 glob() 之类的函数吗?

【问题讨论】:

    标签: php file-io sftp glob


    【解决方案1】:

    您可以简单地使用ssh2 functions...

    即。

    $session = ssh2_connect('some.server', 22);
    ssh2_auth_password($session, 'username', 'password');
    $stream = ssh2_exec($session, 'ls -la /some/path');
    stream_set_blocking($stream, true);
    echo "list of files: " . stream_get_contents($stream);
    

    【讨论】:

    • 看不到任何不需要传递文字文件路径的文件
    • 您可以执行shell命令来查找您的文件,例如lsfind | grep等更新了答案...
    • 不幸的是,我似乎没有为此清除:“无法请求在远程主机上执行命令”
    • 我可以执行常规的 sftp 移动功能并已通过身份验证,但没有命令行许可
    【解决方案2】:

    你可以这样做:

    <?php
    include('Net/SFTP.php');
    
    $sftp = new Net_SFTP('www.domain.tld');
    if (!$sftp->login('username', 'password')) {
        exit('Login Failed');
    }
    
    print_r($sftp->nlist()); // == $sftp->nlist('.')
    print_r($sftp->rawlist()); // == $sftp->rawlist('.')
    ?>
    

    (使用phpseclib, a pure PHP SFTP implementation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-14
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 2020-12-21
      • 1970-01-01
      相关资源
      最近更新 更多