2017-08-02 83 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訪問權限。 –

相關問題