06/05/2010, 04:13
|
| | Fecha de Ingreso: mayo-2010
Mensajes: 6
Antigüedad: 14 años, 6 meses Puntos: 1 | |
Descomprimir zip al subir el fichero Buenas. Estaba encargandome de un upload de ficheros, que funciona perfectamente como se puede ver en el codigo que muestro.
Código:
<?php
$dir = "eulen"; //Change this to the correct dir RELATIVE TO WHERE THIS SCRIPT IS, or /full/path/
//MIME types to allow, Gif, jpeg, zip ::Edit this to your liking
$types = array("application/pdf","image/png","image/x-png","audio/wav","image/gif","image/jpeg", "image/png", "image/pjpeg","application/x-zip-compressed","application/zip");
// Nothing to edit below here.
//Function to do a directory listing
//function scandir($dirstr) {
// echo "<pre>\n";
// passthru("ls -l -F $dirstr 2>&1 ");
// echo "</pre>\n";
//}
//Check to determine if the submit button has been pressed
if((isset($_POST['submit']))){
//Shorten Variables
$tmp_name = $_FILES['upload']['tmp_name'];
$new_name = $_FILES['upload']['name'];
$path = $_POST['subdir'];
$fullpath = "$dir$path/";
$fullpath = str_replace("..", "", str_replace("\.", "", str_replace("//", "/", $fullpath)));
$clean_name = ereg_replace("[^a-z0-9._]", "", str_replace(" ", "_", str_replace("%20", "_", strtolower($new_name) ) ) );
// lets see if we are uploading a file or doing a dir listing
if(isset($_POST['Dir'])){
echo "Directorio asignado en $fullpath\n";
scandir("$fullpath");
}else{
//Check MIME Type
if ((in_array($_FILES['upload']['type'], $types)) and (!file_exists($fullpath.$clean_name))){
// create a sub-directory if required
if (!is_dir($fullpath)){
mkdir("$fullpath", 0755);
}
//Move file from tmp dir to new location
move_uploaded_file($tmp_name,$fullpath . $clean_name);
$filesize = $_FILES['userfile']['size'];
echo "$clean_name of {$_FILES['upload']['size']} bytes fue correctamente guardado en $fullpath";
}else{
//Print Error Message
echo "<small>File <strong><em>{$_FILES['upload']['name']}</em></strong> No se pudo guardar - tipo de archivo incorrecto o ya existente</small><br/>";
//Debug
$name = $_FILES['upload']['name'];
$type = $_FILES['upload']['type'];
$size = $_FILES['upload']['size'];
$tmp = $_FILES['upload']['name'];
echo "Name: $name<br />Type: $type<br />Size: $size<br />Tmp: $tmp";
}
}
} else {
} ?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<fieldset>
<legend>Sube archivos</legend>
<p align = "left">Elegir otro directorio por defecto <input type="checkbox" name="Dir" value="on" /><br />
Fichero a subir <input type="file" name="upload" /> <br />
Guardar en/Cambiar directorio por defecto: <input type="text" name="subdir" value="<?php $path = $_POST['subdir']; echo "$path";?>" /> (Puede estar en blanco) **El directorio será creado si no existe<br />
<input type="submit" name="submit" value="Subir fichero/cambiar carpeta" />
</fieldset>
</form>
</body>
</html>
El caso, es que estaba intentando añadir la condición de que si un archivo era un zip, que lo descomprimiese al subirlo, pero por más que lo intento, no consigo que esa parte de la función funcione bien, el caso, me vendría bien ayuda para saber en que parte implementarla para evitar problemas.
Vendría siendo esto la parte que trabaja con el zip.
Código:
<?php
$zip = zip_open($_FILES['upload']['tmp_name']);
while($zip_entry = zip_read($zip)) {
$entry = zip_entry_open($zip,$zip_entry);
$filename = zip_entry_name($zip_entry);
$target_dir = $dir.substr($filename,0,strrpos($filename,'/'));
$filesize = zip_entry_filesize($zip_entry);
if (is_dir($target_dir) || mkdir($target_dir)) {
if ($filesize > 0) {
$contents = zip_entry_read($zip_entry, $filesize);
file_put_contents($dir.$filename,$contents);
}
}
}
?>
He probado varias cosas pero no consigo que me funcione ¿Qué debería hacer? |