【问题标题】:Read a file from a ZIP file on FTP with PHP without downloading whole archive使用 PHP 从 FTP 上的 ZIP 文件中读取文件,无需下载整个存档
【发布时间】:2021-07-06 08:32:30
【问题描述】:

我想从包含许多其他 .txt 文件的 .zip 文件中读取 .txt 文件内容。但希望不需要下载.zip文件到本地机器..

如何使用zip_open/zip_read 之类的函数来做到这一点?

$path = 'Data/2021';

ftp_login($conn,$user,$pass);
     
ftp_chdir($conn,$path);
 
ftp_pasv($conn,TRUE);
 
foreach (ftp_nlist($conn,".") as $Lot_Zip) {
    $Lot_Zip = Trim($Lot_Zip);
    
    $Lot_Zip_Name = substr($Lot_Zip,0,10);
    
    if (preg_match("/$Lot_Zip_Name/i",$ParsedLot_String)){
           
        echo "processing ", $Lot_Zip, " ...\n";    

        // $Lot_Zip = $path.'/'.$Lot_Zip also can't be zip_open
        $zip = zip_open($Lot_Zip);
       
        echo "ZIP: ", $zip ,"\n";  //return value is 11
       
        if ($zip)
        {
            while ($zip_entry = zip_read($zip))
            {
                echo "Name: " . zip_entry_name($zip_entry) . "\n";
            }
        }
    }
}

【问题讨论】:

    标签: php ftp zip


    【解决方案1】:

    打开与 FTP 服务器的连接不会使函数神奇地使用 FTP 服务器上的文件。 zip_open($Lot_Zip) 中的 $Lot_Zip 指的是运行 PHP 脚本(网络服务器?)的机器上的 local 文件,而不是 FTP 服务器上的文件。对于一些 PHP 函数,您可以使用ftp:// URL wrapper 来引用 FTP 服务器上的文件。但我相信 已弃用 zip_open 和最新的 FtpArchive 都不支持 URL 包装器。它们只能处理本地文件。

    所以最简单的解决方案是将存档从 FTP 服务器下载到本地机器/网络服务器。

    一般来说,在 FTP 服务器上处理 ZIP 文件相当复杂。使用 ZIP 文件需要随机访问文件内容,而这在 FTP 协议中并不容易实现。

    请参阅此相关 (Python) 问题,该问题更详细地讨论了该问题:
    Get files names inside a zip file on FTP server without downloading whole archive

    【讨论】:

    • 所以我的问题是如何在FTP服务器上处理ZIP文件而不下载到本地,甚至访问Zip中的.txt文件。我知道这很复杂,但如果可以实现的话
    • 太复杂了,在这里你很难得到答案。除非有现成的库可以做到。
    猜你喜欢
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    相关资源
    最近更新 更多