PHP - copiar un archivo de zip a una ruta mas corta dentro del zip

 
Vista:

copiar un archivo de zip a una ruta mas corta dentro del zip

Publicado por Antonio (2 intervenciones) el 30/12/2019 19:48:57
Buenos dias compañero, haber si me pueden echar una mano, tengo un zip que se genera de la consulta que introduce el usuario, pero la ruta al archivo pdf dentro del zip es muy larga, como podria hacer con copy u otra forma para acortar la ruta dentro del zip. Saludos les envio el codigo php. Si alquien me puede echar una mano se lo agradezco.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
//Se recibe el n° de folio mediante el array ($_post) y se comprueba que el campo no este vacio, y se
//establece luego la conexion a la bd para descargar el pdf directo si se entra con el N° de folio
if (empty($_POST["inputFolio"]))exit("No proporcionaste ningún codigo");
    $conexion = conectar_PostgreSQL( "postgres", "postgres", "localhost", "geo_data_cartop" ); //no esta vacio se hace la busqueda
 
    //se hace la busqueda por el input del folio introducido, se crea el obj busqueda
    $objBusqueda = buscar($conexion, $_POST["inputFolio"]);
    if( $objBusqueda == null )exit("No se encontró");
 
	//** se crea el array para recorrer c/u de los obj devueto por la busqueda y crear el zip con esos archivos
    $archivos = array();
 
	//----------------------------- AQUÍ LO INTENTO HACER ----------------------------------
        // ------ABAJO ESTA  LA CREACION DEL ZIP CON SU  CABECERA ------------
 
    foreach($objBusqueda as $obj){ //se le asigna a la variable objbusqueda el valor de la variable obj
		$folder = "evalsoil/dibujo/".$obj->id_folio;
		//$cur_dir = getcwd();
		$destino = $_POST["inputFolio"];   //----- seria LA ruta NUEVA MAS CORTA;
		mkdir($destino);
		if (file_exists($folder)){
			$archivo = $folder."/".$obj->id_folio.".pdf";  //------ ruta larga
 
 
			if (!file_exists($archivo))exit("Archivo no existente");
				array_push($archivos, $archivo); //insertamos uno o mas elementos al final del array
 
 
		}
    }
 
	copy($folder, $destino);
 
 
    //-se manda el array con los archivos si al menos existe un archivo
    if(count($archivos)> 0)
        download($archivos);
 
	//*rename("$folder" , "$destino");
?>
 
 
 <?php
 
    //** se crea una funcion para crear el zip, con los archivos que contendra el array
    function createZip($files = array(), $destination = '', $overwrite = false) {
 
        if(file_exists($destination) && !$overwrite) { return false; }
		//se da validacion del archivo
        $validFiles = [];
        if(is_array($files)) { //si es un array que contiene la variable files se itera nuevamente y se le asigna el valor
        foreach($files as $file) {
            if(file_exists($file)) {
                $validFiles[] = $file;
            }
        }
        }
		//contamos elementos de validacion
        if(count($validFiles)) {
        $zip = new ZipArchive();
        if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
            return false;
        }
		//recorremos los elementos de la validFelis y le asignamos  el valor $file
        foreach($validFiles as $file) {
            $zip->addFile($file,$file);
        }
 
		//se cierra el zip y comprobamos que existe el archivo
        $zip->close();
        return file_exists($destination);
        }
		else{
			return false;
			}
    }
 
    //- se crea la funcion para la descarga del archivo pdf
    function download($archivos){
        //** se manda llamar la funcion creazip, enviando un nombre para el archivo zip y el array con la url de los archivos
        $fileName = 'Consulta_'.date('Ymd-His') . '.zip'; //nombre del archivo con la fecha
        $files_to_zip = $archivos;
		//$archivos = $destino;
 
        $result = createZip($files_to_zip, $fileName);
        header('Content-Description: File Transfer'); // ver cabecera en php http s://w w w.php.net/manual/es/function.header.php
        header('Content-Type: application/octet-stream');//flujo de info http s://w ww.php.net/manual/en/function.readfile.php
        header("Content-Disposition: attachment; filename=\"".$fileName."\"");
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header("Content-Length: ".filesize($fileName));
        ob_clean();
        flush();
        readfile($fileName);
        @unlink($fileName);
    }
 
 
 
 
 
    //- se crea la funcion que realiza la busqueda de (sap) mediante la conexion y se extrae el n° de Folio en la consulta
    function buscar( $conexion, $id ){
 
        //** se crea un arreglo con los ids ingresados en el array separados por coma
        $ids_array = explode(",", $id); //divide la cadena (string) y lo guarda en un array original usando el delimitador(,)
        $ids_array = array_map('trim', $ids_array); // Se llama al array y se eliminan espacios entre ids del input
        $swhere= "";
        if(is_numeric($ids_array[0]))
            $swhere="id_folio='" .$ids_array[0] ."'";
        else
            $swhere="sap='" .$ids_array[0] ."'";
 
		//** si existe mas de un folio entonces lo agregamos al WHERE de la consulta
        if(count($ids_array) > 1){
                //** pero por cada id separado, creamos un where omitiendo el primero
                for($i=1; $i< count($ids_array); $i++)
                {
                    if(is_numeric($ids_array[$i]))
                        $swhere .= " or id_folio='".$ids_array[$i]."'";
                    else
                        $swhere .= " or sap='".$ids_array[$i]."'";
                }
        }
 
		//Se genera la variable consulta a la tabla de la base de datos especificada arriba
        $sql = "SELECT id_folio,sap FROM public.cat_planos_entregados WHERE ".$swhere;
 
		/*$devolver = null;*/
 
        //**se crea un arreglo para guardar los objetos extraidos de la base de datos
        //echo $sql;
        $devolver=array();
 
        // Ejecutar la consulta:
        $rs = pg_query( $conexion, $sql);
        if( $rs )
        {
            // Si se encontró el registro, se obtiene un objeto en PHP con los datos de los campos: si tiene valores que devuelva el campo de la consulta que se hizo
            if( pg_num_rows($rs) > 0 )
                //** agregamos los objetos al array devolver, pasando el resultado de la consulta como un objeto
                while ($datos = pg_fetch_object($rs)) {
                    array_push($devolver, $datos); //se obtienen los registro con el nombre del campo de ese obj
                }
        } /*return $devolver;*/
        else{
            $devolver = null;
        }
 
        //** ahora se devuelve el array con todos los objetos encontrados en la BD o null en caso no encontrar nada en la consulta
        return $devolver;
    }
 
	//- Para establecer la conexion a la base de datos con argumenetos ($usuario, $pass, $host, $db)
    function conectar_PostgreSQL( $usuario, $pass, $host, $db)
    {
        $conexion = pg_connect( "user=".$usuario." ".
								"password=".$pass." ".
								"host=".$host." ".
								"dbname=".$db
								) or die( "Error al conectarse: ".pg_last_error() );
			return $conexion;
    }
 
 ?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder