2017-08-02 75 views
1

我与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/'); 
} 
?> 
+0

那你试试这么远吗?你能提供你的代码吗?请参阅[如何提出一个好问题](https://stackoverflow.com/help/how-to-ask) –

+0

这是什么意思“读”?你不能直接下载并在本地处理它吗?或者你是否需要/想要做更多的事情?请解释! –

+0

文件大小为5 GB。所以我不想下载。只需要读取文件名。 –

回答

0

报价"Limitations > Random access" section of Wikipedia "tar" article

相比其它压缩格式(如DAR或Zip)的tar格式的另一个缺点是,有关于该文件的内容的信息不集中的位置(一个“目录”的种类)。 因此,要列出存档中文件的名称,必须通读整个存档并查找文件的起始位置。

  • “贯穿整个档案读” - 这实际上意味着下载整个档案,你不想做的事。
  • “找地方文件开始” - 对于那些你需要的归档文件的随机访问。虽然SFTP协议允许随机访问文件,但您的tar实际上是在gzip文件中。而压缩文件,至少是gzip格式,不允许随机访问。

在我看来,违背了维基百科文章的写法,你并不需要“贯穿整个档案读”,用户可于一个文件跳过开始另一个。有什么更好的。但只要.tar是.gz,它并不能真正帮助你解决问题。

0

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

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

+0

OP不想下载5GB存档。 –

+0

他们不需要下载档案。 SSHPass允许从脚本远程登录。归档文件在服务器上解压缩。可以使用tar -xvzf命令来提取归档文件。 Php Phar不需要 –

+0

虽然这是一种可能的解决方法,但问题是关于SFTP。 OP没有提及他们是否拥有对服务器的shell访问权限。 –

相关问题