Как автоматически распаковать загруженные zip-файлы с помощью PHP? [Дубликат]

Используйте json.Decoder , чтобы пройти через JSON.

func check(d *json.Decoder, path []string) error {
    // Get next token from JSON
    t, err := d.Token()
    if err != nil {
        return err
    }

    delim, ok := t.(json.Delim)

    // There's nothing to do for simple values (strings, numbers, bool, nil)
    if !ok {
        return nil
    }

    switch delim {
    case '{':
        keys := make(map[string]bool)
        for d.More() {
            // Get field key
            t, err := d.Token()
            if err != nil {
                return err
            }
            key := t.(string)

            // Check for duplicates
            if keys[key] {
                fmt.Printf("Duplicate %s\n", strings.Join(append(path, key), "/"))
            }
            keys[key] = true

            // Check value
            if err := check(d, append(path, key)); err != nil {
                return err
            }
        }
        // Consume trailing }
        if _, err := d.Token(); err != nil {
            return err
        }

    case '[':
        i := 0
        for d.More() {
            if err := check(d, append(path, strconv.Itoa(i))); err != nil {
                return err
            }
            i++
        }
        // Consume trailing ]
        if _, err := d.Token(); err != nil {
            return err
        }

    }
    return nil
}

Вот как это можно назвать:

data := `{"a": "b", "a":true,"c":["field_3 string 1","field3 string2"], "d": {"e": 1, "e": 2}}`
if err := check(json.NewDecoder(strings.NewReader(data)), nil); err != nil {
    log.Fatal(err)
}

Выход:

Duplicate a
Duplicate d/e

Запустите его на игровой площадке

151
задан George Garchagudashvili 21 January 2016 в 11:18
поделиться

10 ответов

Просто используйте это:

  $master = $_GET["master"];
  system('unzip' $master.'.zip'); 

в вашем коде $master передано как строка, система будет искать файл с именем $master.zip

  $master = $_GET["master"];
  system('unzip $master.zip'); `enter code here`
396
ответ дан George Garchagudashvili 27 August 2018 в 06:39
поделиться

Пожалуйста, не делайте этого так (передача GET var является частью системного вызова). Вместо этого используйте ZipArchive .

Итак, ваш код должен выглядеть так:

$zipArchive = new ZipArchive();
$result = $zipArchive->open($_GET["master"]);
if ($result === TRUE) {
    $zipArchive ->extractTo("my_dir");
    $zipArchive ->close();
    // Do something else on success
} else {
    // Do something on error
}

И чтобы ответить на ваш вопрос, ваша ошибка «что-то $ var что-то» else 'должен быть "что-то $ var something else" (в двойных кавычках).

26
ответ дан Aleksandar Vucetic 27 August 2018 в 06:39
поделиться

Я обновил ответ Morteza Ziaeemehr на более чистый и лучший код. Это будет распаковать файл, предоставленный в форме, в текущий каталог с использованием DIR.

<!DOCTYPE html>
<html>
<head>
  <meta charset='utf-8' >
  <title>Unzip</title>
  <style>
  body{
    font-family: arial, sans-serif;
    word-wrap: break-word;
  }
  .wrapper{
    padding:20px;
    line-height: 1.5;
    font-size: 1rem;
  }
  span{
    font-family: 'Consolas', 'courier new', monospace;
    background: #eee;
    padding:2px;
  }
  </style>
</head>
<body>
  <div class="wrapper">
    <?php
    if(isset($_GET['page']))
    {
      $type = $_GET['page'];
      global $con;
      switch($type)
        {
            case 'unzip':
            {    
                $zip_filename =$_POST['filename'];
                echo "Unzipping <span>" .__DIR__. "/" .$zip_filename. "</span> to <span>" .__DIR__. "</span><br>";
                echo "current dir: <span>" . __DIR__ . "</span><br>";
                $zip = new ZipArchive;
                $res = $zip->open(__DIR__ . '/' .$zip_filename);
                if ($res === TRUE) 
                {
                    $zip->extractTo(__DIR__);
                    $zip->close();
                    echo '<p style="color:#00C324;">Extract was successful! Enjoy ;)</p><br>';
                } 
                else 
                {
                    echo '<p style="color:red;">Zip file not found!</p><br>';
                }
                break;
            }
        }
    }
?>
End Script.
</div>
    <form name="unzip" id="unzip" role="form">
        <div class="body bg-gray">
            <div class="form-group">
                <input type="text" name="filename" class="form-control" placeholder="File Name (with extension)"/>
            </div>        
        </div>
    </form>

<script type="application/javascript">
$("#unzip").submit(function(event) {
  event.preventDefault();
    var url = "function.php?page=unzip"; // the script where you handle the form input.
    $.ajax({
     type: "POST",
     url: url,
     dataType:"json",
           data: $("#unzip").serialize(), // serializes the form's elements.
           success: function(data)
           {
               alert(data.msg); // show response from the php script.
               document.getElementById("unzip").reset();
             }

           });

    return false; // avoid to execute the actual submit of the form
  });
</script>
</body>
</html> 
0
ответ дан Community 27 August 2018 в 06:39
поделиться
function extract_zip($Sourse_file, $extract_folder){
    $zip = new ZipArchive() ;
    if (!$zip->open($Sourse_file) == TRUE) {
        return false;
    }
    $zip->extractTo($extract_folder);
    $zip->close();
        return true;
}
0
ответ дан Cricketlog Live 27 August 2018 в 06:39
поделиться

PHP имеет свой собственный встроенный класс, который можно использовать для распаковки или извлечения содержимого из zip-файла. Класс ZipArchive. Ниже приведен простой и простой PHP-код, который будет извлекать zip-файл и помещать его в конкретный каталог:

<?php
$zip_obj = new ZipArchive;
$zip_obj->open('dummy.zip');
$zip_obj->extractTo('directory_name/sub_dir');
?>

Если вы хотите, чтобы некоторые дополнительные функции были ниже, это улучшенный код, который проверяет, файл существует или нет:

<?php
$zip_obj = new ZipArchive;
if ($zip_obj->open('dummy.zip') === TRUE) {
   $zip_obj->extractTo('directory/sub_dir');
   echo "Zip exists and successfully extracted";
}
else {
   echo "This zip file does not exists";
}
?>

Источник: Как распаковать или извлечь zip-файлы в PHP?

0
ответ дан Faruque Ahamed Mollick 27 August 2018 в 06:39
поделиться

Используйте ниже PHP-код с именем файла в URL-адресе param «name»

<?php

$fileName = $_GET['name'];

if (isset($fileName)) {


    $zip = new ZipArchive;
    $res = $zip->open($fileName);
    if ($res === TRUE) {
      $zip->extractTo('./');
      $zip->close();
      echo 'Extracted file "'.$fileName.'"';
    } else {
      echo 'Cannot find the file name "'.$fileName.'" (the file name should include extension (.zip, ...))';
    }
}
else {
    echo 'Please set file name in the "name" param';
}

?>
0
ответ дан huync 27 August 2018 в 06:39
поделиться

Используя getcwd() для извлечения в том же каталоге

<?php
$unzip = new ZipArchive;
$out = $unzip->open('wordpress.zip');
if ($out === TRUE) {
  $unzip->extractTo(getcwd());
  $unzip->close();
  echo 'File unzipped';
} else {
  echo 'Error';
}
?>
0
ответ дан Rubyx 27 August 2018 в 06:39
поделиться

Просто попробуйте этот файл yourDestinationDir, чтобы извлечь или удалить -d yourDestinationDir, чтобы извлечь из корневого каталога.

$master = 'someDir/zipFileName';
$data = system('unzip -d yourDestinationDir '.$master.'.zip');
4
ответ дан Samuel Kwame Antwi 27 August 2018 в 06:39
поделиться

Просто измените

system('unzip $master.zip');

На это

system('unzip ' . $master . '.zip');

или этот

system("unzip {$master}.zip");

0
ответ дан user3225732 27 August 2018 в 06:39
поделиться

вы можете использовать предварительно упакованную функцию

function unzip_file($file, $destination){
    // create object
    $zip = new ZipArchive() ;
    // open archive
    if ($zip->open($file) !== TRUE) {
        return false;
    }
    // extract contents to destination directory
    $zip->extractTo($destination);
    // close archive
    $zip->close();
        return true;
}

Как ее использовать.

if(unzip_file($file["name"],'uploads/')){
echo 'zip archive extracted successfully';
}else{
  echo 'zip archive extraction failed';
}
0
ответ дан user889030 27 August 2018 в 06:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: