使用phpseclib从SFTP服务器列出tar.gz文件中的文件而不下载它

时间:2017-08-02 09:46:42

标签: php gzip sftp tar phpseclib

我正在使用SFTP服务器。如何在不下载和解压缩文件的情况下查看.tar.gz(5 GB大小)文件中的文件列表?我正在使用phpsiclib1.0.7。 我成功登录SFTP服务器并列出所有目录。为此,我使用了以下代码。

<?php
include('Net/SFTP.php');
$sftp = new Net_SFTP('sftp.tripadvisor.com');
if (!$sftp->login('username', 'password')) {
  exit('Login Failed');
} else {
  $current_dir= $sftp->nlist();
  $sftp->nlist('drop/listings/');
}
?> 

2 个答案:

答案 0 :(得分:0)

引用"Limitations > Random access" section of Wikipedia "tar" article

  

与其他存档格式(如DAR或Zip)相比,tar格式的另一个缺点是,没有关于文件内容的信息的集中位置(各种类型的“目录”)。 因此,要列出存档中文件的名称,必须仔细阅读整个存档并查找文件开始的位置。

  • “通读整个档案” - 这实际上意味着下载整个档案,您不想做的事情。
  • “查找文件开始的位置” - 为此,您需要随机访问存档文件。虽然SFTP协议允许随机访问文件,但您的tar实际上是在gzip文件中。压缩文件,至少是gzip格式,不允许随机访问。

在我看来,与维基百科文章的措辞相反,你不需要“读取整个档案”,你可以从一个文件开始跳到另一个文件。什么稍好一点。但是只要.tar在.gz中,它就无法真正帮助你。

答案 1 :(得分:0)

您可以使用Php Phar扩展名来提取5Gb tar.gz文件。解压缩文件后,您可以使用scandir函数读取解压缩文件夹的内容。

要自动执行提取和列出文件的过程,您可以使用SSHPass实用程序。您可以使用exec函数从Php运行SSHPass。 exec函数的输出应该显示文件列表。