PHP Загрузить и извлечь Zip - PullRequest
0 голосов
/ 25 мая 2011

Я пытаюсь запустить скрипт, который позволяет загружать .zip и извлекать содержимое.Я взял образец кода онлайн, который должен работать, и добавил класс в начале, потому что мой провайдер не имеет правильно скомпилированной функции zip.

Я оставил большой комментарий в серединегде я застреваюНе уверен, что это как-то связано с тем, что он работает на IIS?

.zip-файл загружается туда, куда я ожидал, и я могу вручную вернуть его обратно и извлечь файлы.Я хочу извлечь файлы здесь, зациклить их, если это файлы изображений, а затем добавить их в базу данных галерей изображений ... хотя обо всем по порядку.Нужно понять, почему я не вижу содержимое почтового индекса ...

<?php // need this bc of ISP settings
require($_SERVER['DOCUMENT_ROOT']."/_classes/ZipArchive.php");
?><?php
if($_FILES["zip_file"]["name"]) {
    $filename = $_FILES["zip_file"]["name"];
    $source = $_FILES["zip_file"]["tmp_name"];
    $type = $_FILES["zip_file"]["type"];

    $name = explode(".", $filename);
    $accepted_types = array('application/zip', 'application/x-zip-compressed', 'multipart/x-zip', 'application/x-compressed');
    foreach($accepted_types as $mime_type) {
         if($mime_type == $type) {
             $okay = true;
             break;
          } 
    }
    $continue = strtolower($name[1]) == 'zip' ? true : false;
    if(!$continue) {
        $message = "The file you are trying to upload is not a .zip file. Please try again.";
    }

    // I set up the _TEST dir with 777 permissions
    $target_path = $_SERVER['DOCUMENT_ROOT']."/_TEST/".$filename;
    if(move_uploaded_file($source, $target_path)) {
        $zip = new ZipArchive();
        $x = $zip->open($target_path);

        // **********************************************************
        // $x returns an error here
        // code: ER_OPEN
        // http://php.net/manual/en/function.ziparchive-open.php
        // Not sure why?????
        // **********************************************************

        if ($x === true) {
           $zip->extractTo($_SERVER['DOCUMENT_ROOT']."/_TEST/");
           $zip->close();
           unlink($target_path);
           $message = "Your .zip file was uploaded and unpacked.";
        }
        else {
           $message =  'failed';
        }
    } else {    
        $message = "There was a problem with the upload. Please try again.";
    }
}
?>

Ответы [ 2 ]

1 голос
/ 25 мая 2011

Не решение, а обходной путь: у вас есть контроль над машиной? Если это так, установите 7-zip (в Windows) или unzip, используйте system('unzip ...') или system('7z ...') для распаковки zip-архива.

0 голосов
/ 09 июня 2011

Интернет-провайдер установил необходимые компоненты для работы zip, так что теперь все в порядке. Спасибо @timdream за альтернативный подход.

...