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
0