PHP: Issues with Unzipping Files from a ZIP Archive

I’m attempting to upload a .zip file to a server and extract its contents using PHP.

First, I move the uploaded .zip file to my target path:

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

Next, I try to unzip the .zip file with the ZipArchive class:

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);

In this code, $target_path points directly to the .zip file, while $path is the relative path to the folder ending with a /.

From the error message, I know that the path to the .zip file is correct since I can see the files I want to copy. However, I’m encountering the following error:

copy(zip://…/Customer/Test/Screen Links/HTML_Content/WETTERKARTE.zip#WETTERKARTE/alt/fs_panel.svg): Failed to open stream: operation failed in D:\xampp\htdocs\MVM_RED_VIOLET\php\AX_upload_PIC.php on line 60

This indicates that fs_panel.svg (the first file in the ZipArchive) is being found, but I can’t copy the file from the ZipArchive to an external folder.

I’ve also attempted using $zip->extractTo(), but it runs without error and does not extract any files.

I’m looking for assistance in resolving this issue.

function unzip($zipFile, $destination) {
    $zip = new ZipArchive();
    if ($zip->open($zipFile) === TRUE) {
        $zip->extractTo($destination);
        $zip->close();
        echo 'Extraction successful!';
    } else {
        echo 'Failed to open the ZIP file.';
    }
}

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

This code directly extracts all contents of the ZIP file to the specified destination.

Does $dir exist at the end of execution?