PHP - Ruta de una carpeta mediante una variable

 
Vista:

Ruta de una carpeta mediante una variable

Publicado por Adriana Bello (3 intervenciones) el 22/03/2017 22:32:00
Antes que todo muy buen día, tarde, o noche según lean este Post.

Me dirijo ante esta comunidad para solicitar una ayuda que aunque sea quizás un poco tonta la consulta, a mi en lo particular me atormenta.

Me encuentro en un proyecto, donde cargo unos archivos PDF, después esos archivos son reasignados a "x" cantidad de usuario, al momento en que el usuario solicita esos archivos, ellos son modificados, se insertan los datos del usuario, y se forza una descarga mediante el navegador de todos los archivos solicitados en un Zip.

Codigo Completo:


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
168
-<?php
 include('../Usuario/config.php');
 require_once('FPDI/fpdf.php');
 require_once('FPDI/fpdi.php');
 define('FPDF_FONTPATH','../FPDI/font/');
 
 session_start();
 
mysql_connect ($dbhost, $dbusername, $dbuserpass);
mysql_select_db($dbname) or die('No se puede seleccionar la base de datos');
 
// Crear la imagen (imagecreatetruecolor ( width, height ))
$im = imagecreatetruecolor(1200, 50);
 
// Crear algunos colores imagecolorallocate ( resource $image, r, g, b)
$blanco = imagecolorallocate($im, 255, 255, 255);
$gris   = imagecolorallocate($im, 128, 128, 128);
$gris2   = imagecolorallocate($im, 17, 17, 17);
$negro  = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 1200, 50, $blanco);
 
// El texto a pintar
$texto = 'Nombre y Apellido:'.$_SESSION["s_username"].' - Cedula:'.$_SESSION["s_cedula"].' - Escuela:'.$_SESSION["s_escuela"];
// Reemplaze la ruta con su propio ruta a la fuente
$fuente = 'times.ttf';
 
// Agregar el texto imagettftext ( resource $image, size, angle, x, y, color, fontfile, text )
 
imagettftext($im, 20, 0, 20, 20, $gris2, $fuente, $texto);
 
// Usar imagepng() resulta en texto más claro, en comparación con imagejpeg()
imagepng($im,"yo.png");
imagedestroy($im);
 
 
 
 
class PDF extends FPDI
{
function Footer()
{
    // Positionnement à 1,5 cm du bas
    $this->SetY(-15);
    // Police Arial italique 8
//    $this->SetFont('Arial','I',8);
    // Numéro de page
    //$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
	$this->Image('yo.png',40,10,140);
}
}
 
/*Inicio Del Codigo Guardar PDF en 1 Carpeta por Numero de Cedula*/
$ruta = './MateriaPDF/';
$destino = './fuente/';
 
$query = mysql_query("SELECT Materia FROM expediente
	WHERE cedula = '".$_SESSION["s_cedula"]."'") or die(mysql_error());
 
 
while ($res = mysql_fetch_array($query))
{
 
$fuentex = $ruta.$res['Materia'];
//echo $fuentex.'<br>';
//echo $res['Materia'].'<br>';
$pdf = new PDF();
 
$pagecount = $pdf->setSourceFile($fuentex);
//$pdf->SetFont('../FPDI/font/calligra.ttf','',12);
$pdf->addPage();
for ($n = 1; $n <= $pagecount; $n++)
{
$tplIdx = $pdf->importPage($n, '/MediaBox');
//$tplIdx = $pdf->importPage($n);	
$pdf->useTemplate($tplIdx, 10, 10, 180);
    if ($n != $pagecount) {
        $pdf->AddPage();
 
}
    }
 
$cedula = $_SESSION["s_cedula"];
 
//Creo la Carpeta
$carpeta = $destino.$cedula;
if (!file_exists($carpeta)) {
    mkdir($carpeta, 0777, true);}
 
//Asigno contenido a la carpeta
$archivopdf = $carpeta."/".$cedula.'_'.$res['Materia'].'.pdf';
 
$pdf->Output($archivopdf);
/*Fin Del Codigo Guardar PDF en 1 Carpeta por Numero de Cedula*/
 
}
 
/* primero creamos la función que hace la magia
 * esta funcion recorre carpetas y subcarpetas
 * añadiendo todo archivo que encuentre a su paso
 * recibe el directorio y el zip a utilizar 
 */
function agregar_zip($dir, $zip) {
  //verificamos si $dir es un directorio
  if (is_dir($dir)) {
    //abrimos el directorio y lo asignamos a $da
    if ($da = opendir($dir)) {
      //leemos del directorio hasta que termine
      while (($archivo = readdir($da)) !== false) {
        /*Si es un directorio imprimimos la ruta
         * y llamamos recursivamente esta función
         * para que verifique dentro del nuevo directorio
         * por mas directorios o archivos
         */
        if (is_dir($dir . $archivo) && $archivo != "." && $archivo != "..") {
          echo "<strong>Creando directorio: $dir$archivo</strong><br/>";
          agregar_zip($dir . $archivo . "/", $zip);
 
          /*si encuentra un archivo imprimimos la ruta donde se encuentra
           * y agregamos el archivo al zip junto con su ruta 
           */
        } elseif (is_file($dir . $archivo) && $archivo != "." && $archivo != "..") {
          echo "Agregando archivo: $dir$archivo <br/>";
          $zip->addFile($dir . $archivo, $dir . $archivo);
        }
      }
      //cerramos el directorio abierto en el momento
      closedir($da);
    }
  }
}
 
//fin de la función
//creamos una instancia de ZipArchive
$zip = new ZipArchive();
 
/*directorio a comprimir
 * la barra inclinada al final es importante
 * la ruta debe ser relativa no absoluta
 */
$dir = "Fuente"; /*Ruta Dinamica*/
 
//ruta donde guardar los archivos zip, ya debe existir
$rutaFinal = "archivos";
 
if(!file_exists($rutaFinal)){
  mkdir($rutaFinal);
}
 
$archivoZip = $cedula;
 
if ($zip->open($archivoZip, ZIPARCHIVE::CREATE) === true) {
  agregar_zip($dir, $zip);
  $zip->close();
 
  //Muevo el archivo a una ruta
  //donde no se mezcle los zip con los demas archivos
  rename($archivoZip, "$rutaFinal/$archivoZip");
 
  //Hasta aqui el archivo zip ya esta creado
  //Verifico si el archivo ha sido creado
  if (file_exists($rutaFinal. "/" . $archivoZip)) {
    echo "Proceso Finalizado!! <br/><br/>
                Descargar: <a href='$rutaFinal/$archivoZip'>$archivoZip</a>";
  } else {
    echo "Error, archivo zip no ha sido creado!!";
  }
}
?>



Todo bien, excepto que cuando intento generar el Zip, me trae la ruta completa. El directorio Principal, y cada Subdirectorio que en el se encuentra, mas necesito que traiga solamente el directorio de la persona que lo solicita.


// Fuente es el nombre de la Carpeta Principal y Ruta Dinámica es los subdirectorios que pertenecen a cada persona:
//CarpetaRaiz/CodigoPersona.

$dir = "Fuente"; /*Ruta Dinamica*/

//$cedula= es el código que identifica a cada persona y por la cual creo los subdirectorios con os archivos de cada 1

Probe con: $dir= "Fuente/" . $cedula;

es decir concatenar ruta con la variable que identifica a cada usuario y me genera error.


Espero encontrar ayuda de vuestra parte. Agradecida por todo de antemano.
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
Imágen de perfil de Alejandro
Val: 575
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Ruta de una carpeta mediante una variable

Publicado por Alejandro (157 intervenciones) el 23/03/2017 00:56:59
Hola Adriana, te comparto un código que capaz te ayude a realizar la parte final (Creación del Zip y Moverlo), Tambien adjunto una función que hice para el manejo de archivos.

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
<?php
	// Clase para el manejo de archivos
	require_once  'File.php';
 
	$zip = new ZipArchive();
 
	$cedula = '29350482';
	$destino = './fuente/';
	$dir = $destino.$cedula.'/';  // RUTA DONDE SE GUARDAN LOS ARCHIVOS DEL USUARIO
	$archivoZip = $cedula.'.zip';
	$rutaFinal = 'archivos';
 
	function agregar_zip($dir, $zip) {
		if (is_dir($dir)) {
			if ($da = opendir($dir)) {
				while (($archivo = readdir($da)) !== FALSE) {
					if ($archivo != '.' && $archivo != '..') {
						if (is_dir($dir.$archivo)) {
							agregar_zip($dir.$archivo.'/', $zip);
						} elseif (is_file($dir.$archivo)) {
							$zip->addFile($dir.$archivo, $archivo);
						}
					}
				}
				closedir($da);
			}
		}
	}
 
	if ($zip->open($archivoZip, ZIPARCHIVE::CREATE) === TRUE) {
		agregar_zip($dir, $zip);
		$zip->close();
 
		// Muevo el zip recien creado 
		// Este metodo crea el destino si no existe
		\PHPValidationLibrary\File::move($archivoZip, "$rutaFinal/$archivoZip");
 
		//Hasta aqui el archivo zip ya esta creado
		//Verifico si el archivo ha sido creado
		if (file_exists($rutaFinal. "/" . $archivoZip)) {
			echo "Proceso Finalizado!! <br><br>
				  Descargar: <a href='$rutaFinal/$archivoZip'>$archivoZip</a>";
		} else {
			echo "Error, archivo zip no ha sido creado!!";
		}
	}

Nos Comentas. Un Saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Ruta de una carpeta mediante una variable

Publicado por Adriana Bello (3 intervenciones) el 23/03/2017 02:23:05
Alejandro Gracias por la respuesta, estaré haciendo pruebas y te comentare, y al foto, por si alguien mas lo necesita .
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ruta de una carpeta mediante una variable

Publicado por Adriana Bello (3 intervenciones) el 23/03/2017 22:23:44
Alejandro Berón, Mil gracias, me sirvio en gran manera, te soy sincera, nunca habia pensado en ese procedimiento ya tenia 1 semana con tratando de averiguar como.

Mil Bendiciones
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar