Как разархивировать файл на сервере (linux) с php кодом

Я пробовал много кода, но не работает.

<?php
$file = $_GET['file'];

if (isset($file))
{
echo "Unzipping " . $file . "<br>";
if(system('unzip '. $file.' -d dirtounzipto ' ))
{echo 'GGWP';}else{echo 'WTF';}

exit;
}?>

Как я могу распаковать на сервере. с кодом «system» или «shell_exec».

0

Решение

$zip_filename = "test.zip";
$zip_extract_path = "/";
try{
$zip_obj = new ZipArchive;
if (file_exists($zip_filename)) {
$zip_stat = $zip_obj->open($zip_filename);
if ($zip_stat === TRUE) {
$res = $zip_obj->extractTo($zip_extract_path);
if ($res === false) {

throw new Exception("Error in extracting file on server.");

}
$zip_obj->close();


} else {
throw new Exception("Error in open file");
}
} else {
throw new Exception("zip file not found for extraction");
}
}catch (Exception $e) {

echo $e->getMessage();
}
4

Другие решения

Пожалуйста, хорошо используйте PHP ZipArchive библиотека:

<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
$zip->extractTo('/my/destination/dir/');
$zip->close();
echo 'ok';
} else {
echo 'failed';
}
?>

Требование к версии: PHP> = 5.2.0, PECL zip> = 1.1.0


ОБНОВИТЬ Для автоматического создания пути назначения вы можете использовать:

mkdir($path, 0755, true);

которые создают папки, необходимые автоматически.

1

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

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

//folder name as per zip file name
$foldername = basename($file, ".zip");

mkdir($foldername, 0755, true);
$path = $path . "/" . $foldername;

$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";
}
0
По вопросам рекламы [email protected]