PHP:无法从 ZIP 存档中提取文件

问题描述 投票:0回答:1

我正在尝试将 .zip 文件上传到服务器并解压缩。

首先,我将上传的 .zip 文件移动到我的 $target_path

$target_Path = $path . basename($_FILES['file']['name']);
move_uploaded_file($_FILES['file']['tmp_name'], $target_Path);

然后我尝试使用 PHP 中的 ZipArchive 解压缩 .zip 文件 (ZipArchive)

 function unzip($zipFile, $destination) {
                $zip = new ZipArchive();
                $zip->open($zipFile);
                for($i=0; $i<$zip->numFiles; $i++) {
                    $file=$zip->getNameIndex($i);
                    if(substr($file,-1) == '/') continue;
                    $lastDelimiterPos = strrpos($destination.$file, '/');
                    $dir = substr($destination.$file, 0, $lastDelimiterPos);
                    if (!file_exists($dir)) {
                        mkdir($dir, 0777, true);
                    }
                    $name = substr($destination.$file, $lastDelimiterPos + 1);
                    echo $dir. "/" .$name;
                    copy("zip://$zipFile#$file","$dir/$name");
                }

                $zip->close();
            }

            unzip($target_Path, $path);

$target_path 是直接到 .zip 文件的相对路径

$path是以“/”结尾的文件夹的相对路径

通过错误消息我知道,我的 .zip 文件路径必须正确(我看到了我想要复制的文件)
我得到的错误:
复制(zip://../Customer/Test/Screen Links/HTML_Content/WETTERKARTE.zip#WETTERKARTE/alt/fs_panel.svg):无法打开流:操作在D:\ xampp \ htdocs \ MVM_RED_VIOLET \ php \中失败AX_upload_PIC.php 第 60 行
所以我知道找到了 fs_panel.svg(ZipArchive 中的第一个文件)。

我只是不知道如何将文件从 ZipArchive 复制到外部文件夹。

我还尝试了 zip->extractTo - 这只给我没有错误,但也没有文件 - 它只是说它没有做任何事情就可以工作。

php zip extract php-ziparchive
1个回答
0
投票

试试这个:

<?php
function unzip($zipFile, $destination) {
    $zip = new ZipArchive();
    
    // Try to open the zip file
    if ($zip->open($zipFile) === TRUE) {
        // Check if the destination directory exists, if not create it
        if (!file_exists($destination)) {
            mkdir($destination, 0777, true);
        }

        // Extract the contents of the zip file to the destination
        if ($zip->extractTo($destination)) {
            echo "Files extracted successfully to $destination.";
        } else {
            echo "Failed to extract files.";
        }

        // Close the zip archive
        $zip->close();
    } else {
        echo "Failed to open the zip file.";
    }
}

// Example usage
$target_path = $path . basename($_FILES['file']['name']);  // Path where the uploaded zip is saved
move_uploaded_file($_FILES['file']['tmp_name'], $target_path);

unzip($target_path, $path);  // Extract the zip file to the destination folder
?>
© www.soinside.com 2019 - 2024. All rights reserved.