Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Creando la función unzip en php
#1
Esta es la función que utilizo para descomprimir un archivo.
Incluye las siguientes opciones:
* Descomprimir en cualquier directorio que te guste
* Descomprimir en el directorio del archivo zip
* Descomprimir en un directorio con el nombre del archivo zip en el directorio del archivo zip. (es decir .: C: \ test.zip será descomprimido en C: \ test \)
* Sobrescribir archivos existentes o no
* Se crea directorios no existentes con los create_dirs función ($ path)

Usted debe usar rutas absolutas con barras inclinadas (/) en lugar de barras invertidas (\).
Lo he comprobado con PHP 5.2.0 con extensión php_zip.dll cargada


Código PHP:
<?php
/**
* Unzip the source_file in the destination dir
*
* @param   string      The path to the ZIP-file.
* @param   string      The path where the zipfile should be unpacked, if false the directory of the zip-file is used
* @param   boolean     Indicates if the files will be unpacked in a directory with the name of the zip-file (true) or not (false) (only if the destination directory is set to false!)
* @param   boolean     Overwrite existing files (true) or not (false)
*  
* @return  boolean     Succesful or not
*/
function unzip($src_file, $dest_dir=false, $create_zip_name_dir=true, $overwrite=true) 
{
  if ($zip = zip_open($src_file)) 
  
{
    if ($zip) 
    
{
      $splitter = ($create_zip_name_dir === true) ? "." : "/";
      if ($dest_dir === false) $dest_dir = substr($src_file, 0, strrpos($src_file, $splitter))."/";
      
      
// Create the directories to the destination dir if they don't already exist
      create_dirs($dest_dir);

      // For every file in the zip-packet
      while ($zip_entry = zip_read($zip)) 
      
{
        // Now we're going to create the directories in the destination directories
        
        
// If the file is not in the root dir
        $pos_last_slash = strrpos(zip_entry_name($zip_entry), "/");
        if ($pos_last_slash !== false)
        {
          // Create the directory where the zip-entry should be saved (with a "/" at the end)
          create_dirs($dest_dir.substr(zip_entry_name($zip_entry), 0, $pos_last_slash+1));
        }

        // Open the entry
        if (zip_entry_open($zip,$zip_entry,"r")) 
        
{
          
          
// The name of the file to save on the disk
          $file_name = $dest_dir.zip_entry_name($zip_entry);
          
          
// Check if the files should be overwritten or not
          if ($overwrite === true || $overwrite === false && !is_file($file_name))
          {
            // Get the content of the zip entry
            $fstream = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));

            file_put_contents($file_name, $fstream );
            // Set the rights
            chmod($file_name, 0777);
            echo "save: ".$file_name."<br />";
          }
          
          
// Close the entry
          zip_entry_close($zip_entry);
        }       
      
}
      // Close the zip-file
      zip_close($zip);
    }
  } 
  
else
  {
    return false;
  }
  
  return true
;
}

/**
* This function creates recursive directories if it doesn't already exist
*
* @param String  The path that should be created
*  
* @return  void
*/
function create_dirs($path)
{
  if (!is_dir($path))
  {
    $directory_path = "";
    $directories = explode("/",$path);
    array_pop($directories);
    
    
foreach($directories as $directory)
    {
      $directory_path .= $directory."/";
      if (!is_dir($directory_path))
      {
        mkdir($directory_path);
        chmod($directory_path, 0777);
      }
    }
  }
}

// Extract C:/zipfiletest/zip-file.zip to C:/zipfiletest/zip-file/ and overwrites existing files
unzip("C:/zipfiletest/zip-file.zip", false, true, true);

// Extract C:/zipfiletest/zip-file.zip to C:/another_map/zipfiletest/ and doesn't overwrite existing files. NOTE: It doesn't create a map with the zip-file-name!
unzip("C:/zipfiletest/zip-file.zip", "C:/another_map/zipfiletest/", true, false);

?>


Posibles temas similares...
Tema Autor Respuestas Vistas Último mensaje
  [Duda] Necesito traspasar una funcion js a php midd_98 4 466 31-03-2017, 06:05 PM
Último mensaje: avdarie
  Enviar correos con cabaceras usando la funcion mail() torgar22 0 355 28-02-2015, 02:44 PM
Último mensaje: torgar22
  Funcion rand y mt_rand yarq 2 563 07-03-2014, 06:54 PM
Último mensaje: KeviNxDTM
  [ayuda] enviar link en funcion mail() php esteban 3 3,526 15-02-2013, 04:03 AM
Último mensaje: ouch01
  Funcion para calcuar [PHP] classes 3 964 15-06-2012, 04:46 AM
Último mensaje: AbaddonOrmuz
  Pregunta sobre la función "preg_match" mauro770 8 1,759 10-12-2011, 05:20 PM
Último mensaje: Kevin9908
Triste Problemas Con Funcion en PHP xester2011 2 816 16-10-2011, 03:04 PM
Último mensaje: xester2011
  Simple funcion para crear urls amigables reysoft 2 719 20-04-2011, 06:10 PM
Último mensaje: papi



Usuarios navegando en este tema: 1 invitado(s)