Разархивируйте файл с помощью php

Я хочу разархивировать файл, и это отлично работает

system('unzip File.zip'); 

Но мне нужно передать имя файла через URL-адрес и не может заставить его работать, это то, что у меня есть.

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

Что мне не хватает? Я знаю, что это должно быть чем-то маленьким и глупым.

Спасибо,

Я могу только предположить, что ваш код появился из учебника где-то в Интернете? В этом случае, хорошая работа, пытаясь понять это самостоятельно. С другой стороны, тот факт, что этот код действительно может быть опубликован в Интернете, как правильный способ распаковать файл, немного пугает.

PHP имеет встроенные расширения для работы со сжатыми файлами. Для этого не нужно использовать system вызовы. Документы ZipArchive – это один из вариантов.

 $zip = new ZipArchive; $res = $zip->open('file.zip'); if ($res === TRUE) { $zip->extractTo('/myzips/extract_path/'); $zip->close(); echo 'woot!'; } else { echo 'doh!'; } 

Кроме того, как прокомментировали другие, $HTTP_GET_VARS был устаревшим с версии 4.1 …, который был reeeeeally давно. Не используйте его. Вместо этого используйте $_GET .

Наконец, будьте очень осторожны, принимая любой вход, передаваемый скрипту через переменную $_GET .

ВСЕГДА САНИТАРНЫЙ ПОЛЬЗОВАТЕЛЬ.


ОБНОВИТЬ

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

 // assuming file.zip is in the same directory as the executing script. $file = 'file.zip'; // get the absolute path to $file $path = pathinfo(realpath($file), PATHINFO_DIRNAME); $zip = new ZipArchive; $res = $zip->open($file); if ($res === TRUE) { // extract it to the path we determined above $zip->extractTo($path); $zip->close(); echo "WOOT! $file extracted to $path"; } else { echo "Doh! I couldn't open $file"; } 

Пожалуйста, не делайте этого так (передача 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 something else» должно быть «что-то $ var something else» (в двойных кавычках).

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

 $master = 'someDir/zipFileName'; $data = system('unzip -d yourDestinationDir '.$master.'.zip'); 

Я обновил ответ @rdlowrey на более чистый и лучший код. Это будет распаковать файл в текущий каталог с помощью __DIR__ .

 <?php // config // ------------------------------- // only file name + .zip $zip_filename = "YOURFILENAME.zip"; ?> <!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 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>'; } ?> End Script. </div> </body> </html> 

Я обновил ответ 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> 

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

 system('unzip $master.zip'); 

К этому

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

или этот

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

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

 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'; } 
 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; } 

Используйте ниже 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'; } ?> 

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

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

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

 <?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?

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

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

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

  $master = $_GET["master"]; system('unzip $master.zip'); `enter code here`