Autor
|
Tema: Unzip "al aire" (Leído 6,277 veces)
|
|
dimitrix
|
¡Hola a todos!
Tengo una duda, necesitaría crear una función que descomprima un zip en una carpeta temporal.
Y que pueda acceder a cada uno de los ficheros de esa carpeta, pero que, al terminar el PHP se borrara todo, sin que yo le diga nada.
Esto lo digo más que nada por si a mitad proceso, ocurre un error, que no se guarde basura que luego no se borre.
¿Cómo lo podría hacer?
Un abrazo!
|
|
|
|
|
En línea
|
|
|
|
|
|
|
dimitrix
|
Hola Adrialmend, antes que nada, gracias por el mensaje.
Había pensado en eso, pero lo que busco es algo que se borre (quizás en tmp) sin tener que borrarlo yo, más que nada por si PHP es interrumpido y falla par aque no se quede de por vida.
Un abrazo!
|
|
|
|
|
En línea
|
|
|
|
Adrialmend
Desconectado
Mensajes: 38
|
Hola Adrialmend, antes que nada, gracias por el mensaje.
Había pensado en eso, pero lo que busco es algo que se borre (quizás en tmp) sin tener que borrarlo yo, más que nada por si PHP es interrumpido y falla par aque no se quede de por vida.
Un abrazo!
Supongo que todo el script lo harás a la vez. También supongo que con esos datos los harás algo y luego borrarás. El codigo irá en un mismo script y será automatico, no tienes que tocar nada. Si puedes danos más pistas e intentaré ayudarte. PD: Perdona si no te estoy entendiendo  Un saludo y de nada, para eso estamos para ayudarnos.
|
|
|
|
|
En línea
|
|
|
|
|
engel lex
|
dejar en la rutina que se limpie el directorio si consigue algo
|
|
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
gAb1
Desconectado
Mensajes: 731
|
Eso suena a trabajo de las excepciones PHP. Con los bloques try y catch (opcionalmente finally en php 7 o era 5.6?) podrás manejar las excepciones que hayas definido (cuando algo no sale como quieres). Sería algo así: - Primero la función que elimina el directorio y todo lo que contiene (esto serviria para muchas otras cosas, asi que lo puedes poner en tu clase functions, o como la llames): // Recursively remove the directory with all its content public function removeDirectory($path) { $exit = FALSE; if ( FALSE !== $path && is_dir($path) ) { $files = new FilesystemIterator($path, FilesystemIterator::SKIP_DOTS); foreach ($files as $file) { (is_dir($file)) ? $this->removeDirectory($file) : unlink($file); } } return $exit; }
- Ahora el script en sí, lo que querias hacer: // Supongo que esto lo tendrás en tu index.php (donde declaras e inicializas las clases) require('functions.php'); $functions = new functions(); // aquí generas el nombre aleatorio y creas la carpeta $folder = ''; // no se pudo crear la carpeta } // Para comprobar que existe usamos la función realpath() // que devolverá FALSE si no existe, o la ruta si existe $path = realpath('/home/user/website.com/' . $folder); if ( FALSE !== $path ) { // Ahora es donde entra try/catch/finally en acción try { // aquí puedes hacer la operación con total seguridad // ya que si falla, se ejecutará lo que haya en catch/finally {} // cualquier error (else if o $mysqli->error) lo puedes manejar con throw new Exception('mensaje de error con variable: ' $variable); // por ejemplo if ($x == $y) { } else throw new Exception('x (' . $x . ' no es igual a y (' . $y . ')'); } catch (Exception $e) { // aquí puedes loguear que ha habido un error // el mensaje de error se encuentra dentro de $e // viene bien para debuguear y estar pendiente de los listillos } finally { // finalmente se limpian los archivos temporales // esto se ejecutará siempre despues de lo que hay en try, y en caso de fallar, lo de catch $functions->removeDirectory($path); } }
Sencillo, ¿no?  Esto es más que nada para que te hagas una idea de como funciona, la idea básica es esa, tener 3 bloques, dos que se ejecutan siempre (primero y ultimo) y otro que se ejecuta solo en caso de que el primero falle. Pero no estamos hablando de errores de php, si no errores de los distintos escenarios, que no son problema del código, si no del input de los usuarios y de las distintas variables. Los errores propios de php deben ser solucionados antes de producción.
|
|
|
|
|
En línea
|
|
|
|
Adrialmend
Desconectado
Mensajes: 38
|
A eso me refería yo, a los try catch. Gracias por mencionarlo. Espero que te sirva
Gracias Gabi por el código
Un saludo
|
|
|
|
|
En línea
|
|
|
|
|
dimitrix
|
Muchas gracias a todos!
|
|
|
|
|
En línea
|
|
|
|
|
#!drvy
|
Podrías usar el ZipArchive de PHP y evitar tener que descomprimir. <?php $zip = new ZipArchive(); $zip->open('readme.zip'); /* Obtener lista con los archivos dentro del ZIP */ for($fileIndex = 0, $files=array(); $fileIndex < $zip->numFiles; ++$fileIndex){ $files[$fileIndex] = $zip->getNameIndex($fileIndex); } /* Buscar un archivo concreto y obtener su contenido El getFromName se puede hacer directamente sin listar archivos pero es para ver el ejemplo xD */ $readme = $zip->getFromName('readme.txt'); } else { $readme = 'No existe ese archivo.'; } echo PHP_EOL, $readme, PHP_EOL;
Te evitas descomprimir por tu cuenta incluso aunque falle el script. http://www.php.net/ziparchiveSaludos
|
|
|
|
« Última modificación: 29 Julio 2016, 17:11 pm por #!drvy »
|
En línea
|
|
|
|
|
| Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
De donde puedo descargar utilidades: "Formas", "Estilos", "Motivos", D
Diseño Gráfico
|
Ad0nis
|
2
|
12,066
|
2 Septiembre 2006, 15:48 pm
por Ad0nis
|
|
|
Lineas "al aire"
Programación Visual Basic
|
engel lex
|
6
|
5,716
|
23 Enero 2010, 09:21 am
por BlackZeroX
|
|
|
recursos visual basic, """"""proceso inmortal"""""
Análisis y Diseño de Malware
|
Dark4ngel
|
7
|
18,828
|
3 Noviembre 2011, 10:42 am
por Dark4ngel
|
|
|
China prohíbe pseudónimos "controvertidos" como "Obama" o "Putin" en internet
Noticias
|
wolfbcn
|
0
|
11,829
|
5 Febrero 2015, 14:58 pm
por wolfbcn
|
|
|
Rusia asegura que el avión estrellado en el Sinaí "se destruyó en el aire"
« 1 2 3 »
Foro Libre
|
El_Andaluz
|
20
|
8,589
|
3 Noviembre 2015, 19:21 pm
por Slava_TZD
|
|