lib descomprimir descargar clase php unzip
docsdocs

descomprimir - Descomprime un archivo con php



ziparchive lib php (12)

Quiero descomprimir un archivo y esto funciona bien

system(''unzip File.zip'');

Pero necesito pasar el nombre del archivo a través de la URL y no puedo hacer que funcione, esto es lo que tengo.

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

¿Qué me estoy perdiendo? Sé que tiene que ser algo pequeño y estúpido que estoy pasando por alto.

Gracias,


¿Solo puedo suponer que su código proviene de un tutorial en algún lugar en línea? En ese caso, buen trabajo tratando de resolverlo por ti mismo. Por otro lado, el hecho de que este código podría publicarse en línea en alguna parte, ya que la forma correcta de descomprimir un archivo es un poco alarmante.

PHP tiene extensiones integradas para tratar con archivos comprimidos. No debería haber necesidad de usar llamadas al system para esto. ZipArchive docs es una opción.

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

Además, como han comentado otros, $HTTP_GET_VARS ha quedado en desuso desde la versión 4.1 ... que fue hace mucho tiempo atrás. No lo uses Usa el $_GET superglobal en su lugar.

Finalmente, tenga mucho cuidado al aceptar cualquier entrada que se pase a un script a través de una variable $_GET .

SIEMPRE SANITIZE LA ENTRADA DEL USUARIO.

ACTUALIZAR

Según su comentario, la mejor manera de extraer el archivo zip en el mismo directorio en el que reside es determinar la ruta de acceso al archivo y extraerlo específicamente a esa ubicación. Entonces, podrías hacer:

// 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"; }


PHP tiene su propia clase incorporada que se puede utilizar para descomprimir o extraer contenidos de un archivo comprimido. La clase es ZipArchive. A continuación se muestra el código PHP simple y básico que extraerá un archivo zip y lo colocará en un directorio específico:

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

Si desea algunas características avanzadas, a continuación se muestra el código mejorado que verificará si el archivo zip existe o no:

<?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"; } ?>

Fuente: ¿Cómo descomprimir o extraer archivos zip en PHP?


Por favor, no lo haga así (pasando GET var para ser parte de una llamada al sistema). Use docs lugar.

Por lo tanto, su código debería verse así:

$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 }

Y para responder a su pregunta, su error es "algo $ var algo más" debería ser "algo $ var algo más" (entre comillas dobles).


Simplemente intente esto yourDestinationDir es el destino para extraer o eliminar -d yourDestinationDir para extraer al directorio raíz.

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


Solo cambia

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

Para este

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

o este

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


Solo usa esto:

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

en su código $master se pasa como una cadena, el sistema buscará un archivo llamado $master.zip

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


Usando getcwd() para extraer en el mismo directorio

<?php $unzip = new ZipArchive; $out = $unzip->open(''wordpress.zip''); if ($out === TRUE) { $unzip->extractTo(getcwd()); $unzip->close(); echo ''File unzipped''; } else { echo ''Error''; } ?>


Use el siguiente código PHP, con el nombre del archivo en el "nombre" URL param

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


puedes usar la función preempaquetada

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

Cómo usarlo.

if(unzip_file($file["name"],''uploads/'')){ echo ''zip archive extracted successfully''; }else{ echo ''zip archive extraction failed''; }


respuesta de a un código más limpio y mejor. Esto descomprimirá un archivo proporcionado dentro del formulario en el directorio actual usando 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>


Actualicé la respuesta de @rdlowrey a un código más limpio y mejor. Esto descomprimirá un archivo en el directorio actual usando __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>


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