簡體   English   中英

PHP將zip文件視為空文件

[英]PHP handles a zip file as if it's empty

這是我正在使用的代碼的精簡版本。

$url = "http://server.com/getDaFile";

//Get the file from the server
$zip_file_contents = file_get_contents($url);
//Write file to disk
file_put_contents("file.zip", $zip_file_contents);

//open zip file
$zip = zip_open("file.zip");

if(is_resource($zip))
{
    while($zip_entry = zip_read($zip))
    {
        if(zip_entry_open($zip, $zip_entry, 'r'))
        {
            //Read the whole file
            $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));

            /*
            Do stuff with $buf!!!
            */

            zip_entry_close($zip_entry);
        }
    }

    zip_close($zip);
}
else
{
    echo "Not a resource. Oh noes!\n";
}

因此:獲取文件,將其保存到磁盤,解壓縮以提取其中包含的文件,對文件進行處理。 這里的問題是,由於某種原因,我無法弄清楚, zip_read返回FALSE ,好像無法讀取ZIP存檔中的文件。 $zip確實包含資源,我已經檢查了var_dump

令我感到奇怪的是,我使用頂部的URL將ZIP文件下載到PC上,手動將其上傳到PHP服務器,並注釋掉對file_get_contentsfile_put_contents的調用,因此PHP使用本地版本。 當我這樣做時, zip_read可以在ZIP內正確找到正確數量的文件,並按需要進行處理。

我也嘗試這樣做: $zip = zip_open($url)但是$zip無法通過is_resource($zip)檢查。

我的代碼顯然有問題,因為該URL有效並返回了一個有效的ZIP存檔。 它是什么?

所以我終於找到了問題所在。 遵循@diolemo的建議,我在十六進制編輯器中打開了服務器的ZIP存檔。 這是我在頂部找到的,然后是常規的ZIP二進制數據: http : //pastebin.com/vQEXJtTN

事實證明,ZIP文件的實際內容中混入了一個PHP錯誤。 不確定如何解決此問題(但肯定知道它與HTTP標頭有關),我嘗試了此人的代碼,而且,您知道我的代碼現在可以正常工作了!

得到教訓? 即使看起來沒問題,也不要信任您的數據(7-Zip和Winrar都成功打開了文件)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM