簡體   English   中英

使用PHP提取Zip存檔

[英]Extract a Zip Archive using PHP

我想要做的基本上是提取服務器上Zip存檔的內容。以下是一些代碼:

$entry="test.zip";

    $zip = new ZipArchive;

    if ($zip->open($entry,ZIPARCHIVE::OVERWRITE) === TRUE)
    {
        $zip->extractTo('unpacked');
        $zip->close();

     }else 
     {
        echo ‘failed’;

     }

目錄“ unpacked”對每個人都是可寫的,並且ZipArchive類的所有已使用方法都返回true。 但是,沒有提取任何東西。 有沒有人碰巧知道什么會導致這種行為? 任何提示將不勝感激...謝謝!

如果您使用的是PHP 5.2.0或更高版本,是否可以先檢查zlib擴展名http://www.zlib.net/

您還可以檢查PECL擴展名。為了訪問ZipArchive,您還可以嘗試zip_open,zip_read進行檢查。

萬一失敗,您應該回顯$zip因為其中包含錯誤。 此外,我猜您可能沒有對test.zip的必需權限。

如果此代碼是內部代碼,並且可以安全地假設您不會將此代碼從Linux移至Windows(反之亦然),則還可以選擇執行本地系統命令,這可能有助於解決問題。 。

<?php

echo `unzip myarchive.zip`; 
echo `tar -xzf myotherarchive.tar.gz`;

?>

在開發內部使用和/或維護腳本時,我通常選擇簡單的系統調用,因為它更符合sysadmins曾經使用的命令。

如果您的zip歸檔文件很大,有時您將無法在服務器允許的最長執行時間內提取所有文件。

如果您無法更改php.ini中的maximum_execution_time,則唯一的解決方案是使用JavaScript提取一個文件,然后提取另一個文件。 在第一個javascript請求中,您需要提取存檔中的文件數

$nbr_of_files = $zip->numFiles;

在您使用zip檔案中的ID號為每個文件提取一個文件之后,

$zip->extractTo('unpacked', array($zip->getNameIndex($file_nbr)));

請嘗試從ZipArchive打開方法中刪除ZIPARCHIVE :: OVERWRITE標志。 (如果您遵循了其他答案中的建議,則該標志可能無法正常運行,並且可能是問題的根源。)

我也有同樣的問題。 解決方案:

$zip->extractTo(public_path() .'/restoreDb/extracted/');

添加public_path()輔助函數。

暫無
暫無

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

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