error al querer imprimir solicitud de becas URGENTE

Buenas tardes
estoy teniendo un problema en producción que no tuve en testeo.
imagino qeu es un problema de permisos de carpetas.

al querer descargar la solicitud por parte del alumno por autogestion la misma sale vacía por firefox y da error por chrome
SAludos!

Hola Luciana,

¿en que versión están?

Pasanos los logs del sistema y de Apache al momento de hacer la descarga.

saludos.
2

Hola Leonel, me olvidé de decirte la versión es la 3.16.2

es un error al generarlo me parece porqeu no da error al bajar solo cuando lo qeures abrir
Recién nos dimos cuenta qeu lo está bajando como .pdf y sin embargo es un .zip
si al bajar le cambio la extensión puedo descomprimirlo y me aparecen los dos archivos de la convocatoria qeu son uno Kolla y otro Guaraní con las convocatorias.
Como podemos hacer para qeu lo baje como corresponde .zip

Saludos!


error convocatoria.png

error convocatoria.png

Hola Luciana,

Dicho problema fue solucionado para la versión 3.18.1 en el ticket #32888 (https://redmine.siu.edu.ar/redmine/issues/32888).

Por favor, crea un GDS (y ponémelo acá en el foro) y te adelanto la solución.

saludos.
2

Gracias Leonel!
Ahí armé GDS
Solicitud número 49120

Leonel el parche no funcionó y lo qeu nos llama la atención es qeu en testeo, con la misma fuente de guarani (3.16.2.1).
funciona perfectamente, es en la generación del archivo zip
te marco en rojo lo que creo que está fallando porqeu el archivo lo genera y lo descarga pero como .pdf en vez de .zip
para mi es una extensión php qeu está haciendo lío o algo que le falte al composer no se, igualmente no da error, solo lo descarga en formato incorrecto en producción

		// Si existe la convocatoria
		if (isset($convocatorias_aplicadas[$hash_habilitacion])) {

			$convocatoria = $convocatorias_aplicadas[$hash_habilitacion];
			$datos_impresion = $this->modelo()->info__convocatoria_impresion($convocatoria['becas_convocatoria']);
			$datos_impresion['convocatoria_nombre'] = "{$convocatoria['tehuelche_nombre']} - {$convocatoria['tehuelche_tipo_de_beca']}";
			$datos_impresion['convocatoria_descripcion'] = $convocatoria['tehuelche_informacion_adicional'];


// https://packagist.org/packages/maennchen/zipstream-php#v0.5.2
$zip = new \ZipStream\ZipStream(‘convocatoria.zip’);

$path_pdf_kolla = $this->modelo()->info__pdf_formulario_kolla($convocatoria[‘kolla_id_habilitacion’], $convocatoria[‘formulario’], $convocatoria[‘hash’], $convocatoria[‘kolla_unidad_gestion’]);
$zip->addFileFromPath(‘kolla.pdf’, $path_pdf_kolla);
unlink($path_pdf_kolla);

			ob_start();
			$this->generar_pdf_guarani($datos_impresion);
			$content = ob_get_clean();
			$zip->addFile('guarani.pdf', $content);

			$zip->finish();

Hola Luciana,

Entonces se pude llegar a deber en algo que te falta en el ambiente de producción, revisa los requisitos técnicos de la 3.16.2.

Te sugiero también:

  1. Ver las diferencias que hay entre el entorno de producción y testeo, ejecutando php -m en consola vas a poder ver las extensiones instaladas para PHP CLI (linea de comandos), para Apache podes poner un phpinfo(); en el código para ver todas las extensiones que temes instaladas para PHP Web.

  2. Revisa los permisos, paso 3 de esta documentación.

  3. Revisemos los logs de Apache al momento de descargar el ZIP.

  4. En el archivo composer.lock revisa que versión de la librería maennchen/zipstream-php tenes instalada, en mi caso dice:


"name": "maennchen/zipstream-php",
"version": "v0.5.2",

saludos.
2

Leonel tengo la misma versión qeu vos en ambos ambientes y ambos tienen las mismas librerías php

Hola Luciana, gracias por la información!!!

Probemos lo siguiente:

  1. La librería maennchen/zipstream-php requiere la extensión ext-mbstring, ¿la tenes instalada?

  2. Si en la función accion__imprimir_solicitud de la clase src/siu/operaciones/convocatorias_becas/controlador.php comentas temporalmente los unlink vas a poder ver los PDFs en la carpeta instalacion/temp/<bloque_acceso>:


//unlink($path_pdf_kolla);
//unlink($path_pdf_guarani);

¿Dichos PDFs se generan bien o están corruptos?

  1. También decime cuanto pesan los PDFs, ya que hay una opción de la librería ZipStream donde carga archivos de como máximo 20 megabytes, se puede incrementar dicho valor.

Te adjunto como me lo descarga a mi.

saludos.
2


convocatoria.zip (33 KB)

te envío fotos pero
te recuerdo tengo todas las librerías requeridas en ambos ambientes, no da ningún error ni en el apache o guaraní, ya qeu genera el archivo y lo descarga, el tema es que lo baja como .pdf y no como .zip
si lo cambio de extensión puedo descomprimirlos y están bien los puedo ver y abrir y todo.
Pero los baja con la extensión incorrecta


php.zip (518 KB)

Hola Luciana, gracias por las capturas, parecería estar todo bien!!!

Probemos las siguientes opciones de la librería ZipStream, en la función accion__imprimir_solicitud de la clase src/siu/operaciones/convocatorias_becas/controlador.php:


				$opt = [
					\ZipStream\ZipStream::OPTION_CONTENT_TYPE => 'application/x-zip',
					\ZipStream\ZipStream::OPTION_CONTENT_DISPOSITION => 'attachment; filename=\"convocatoria.zip\"',
					\ZipStream\ZipStream::OPTION_SEND_HTTP_HEADERS => true
				];
				// https://packagist.org/packages/maennchen/zipstream-php#v0.5.2
				$zip = new \ZipStream\ZipStream('convocatoria.zip', $opt);

Avísame si con ese cambio lo descarga con el nombre convocatoria.zip en lugar de convocatoria.pdf.

saludos.
2

eso es lo mas loco que lo descarga como guarani.pdf
ni siquiera como convocatoria.
te paso como sale el archivo.
Aviso qeu sigue igual con las modificaciones qeu me decis.

Te pregunto donde se definen los nombres de lso archivos de bajada, quizá esté ahí el tema, proque ya probé hasta hacer un rename en el controlador y nada

fijate lo que te adjunto, se llama guarani.pdf
pero tendría que ser convocatoria.zip


guarani.pdf (50.2 KB)

Hola Luciana,

Claro, veo que que pone mal la extensión, si le renombro a .zip se descomprime bien!!!

Toda la lógica esta en la función accion__imprimir_solicitud de la clase src/siu/operaciones/convocatorias_becas/controlador.php, yo lo tengo así con los cambios:


	function accion__imprimir_solicitud()
	{
		try {
			
			$hash_habilitacion = $this->validate_param(0, 'get', validador::TIPO_ALPHANUM);
			$convocatorias_aplicadas = $this->modelo()->info__convocatorias_aplicadas();

			// Si existe la convocatoria
			if (isset($convocatorias_aplicadas[$hash_habilitacion])) {

				$convocatoria = $convocatorias_aplicadas[$hash_habilitacion];
				$datos_impresion = $this->modelo()->info__convocatoria_impresion($convocatoria['becas_convocatoria']);
				$datos_impresion['convocatoria_nombre'] = $convocatoria['tehuelche_nombre'];
				$datos_impresion['convocatoria_descripcion'] = $convocatoria['tehuelche_informacion_adicional'];

				$opt = [
					\ZipStream\ZipStream::OPTION_CONTENT_TYPE => 'application/x-zip',
					\ZipStream\ZipStream::OPTION_CONTENT_DISPOSITION => 'attachment; filename=\"convocatoria.zip\"',
					\ZipStream\ZipStream::OPTION_SEND_HTTP_HEADERS => true,
					\ZipStream\ZipStream::OPTION_LARGE_FILE_SIZE => 100 * 1024 * 1024
				];
				// https://packagist.org/packages/maennchen/zipstream-php#v0.5.2
				$zip = new \ZipStream\ZipStream('convocatoria.zip', $opt);

				$path_pdf_kolla = $this->modelo()->info__pdf_formulario_kolla($convocatoria['kolla_id_habilitacion'], $convocatoria['formulario'], $convocatoria['hash'], $convocatoria['kolla_unidad_gestion']);
				$zip->addFileFromPath('kolla.pdf', $path_pdf_kolla);
				unlink($path_pdf_kolla);

				$path_pdf_guarani = $this->generar_pdf_guarani($datos_impresion);
				$zip->addFileFromPath('guarani.pdf', $path_pdf_guarani);
				unlink($path_pdf_guarani);

				$zip->finish();

				
			} else { // sino

				$data['mensaje_tipo'] = 'alert-error';
				$data['mensaje'] = 'convocatorias_becas.convocatoria_inexistente';
				$this->vista()->set_pagelet('mensaje', $data);

			}
		
		} catch (\Exception $e) {
			
			kernel::log()->add_error($e);
			
			$data['mensaje_tipo'] = 'alert-error';
			$data['mensaje'] = 'convocatorias_becas.ha_ocurrido_error';
			$this->vista()->set_pagelet('mensaje', $data);
			
		}
	}

El nombre se lo estoy poniendo en dos lugares:

$zip = new \ZipStream\ZipStream('convocatoria.zip', $opt);

y acá también:

\ZipStream\ZipStream::OPTION_CONTENT_DISPOSITION => 'attachment; filename=\"convocatoria.zip\"',

Este ultimo esta generando problemas, ya que le pone ese nombre:

$zip->addFileFromPath('guarani.pdf', $path_pdf_guarani);

¿que pasa si se lo pasas así?

$zip->addFileFromPath('guarani.pdf', $path_pdf_guarani, [], 'store');

saludos.
2

sigue bajando como guarani.pdf
por eso te decía que debe ser algo qeu hemos cambiado en donde se definen los nombres de lso archivos de bajada, alguna constante que hemos puesto, eso donde se define tiene que ser en algún lugar de la fuente.

Hola Luciana,

Todo se hace en la función finish de vendor/maennchen/zipstream-php/src/ZipStream.php.

Probemos esto antes que nada:

Quizás hay cambios dentro de vendor que se agregaron sin querer. Podes borrar la carpeta vendor y luego volver a ejecutar el comando composer install.

El archivo que tiene la lógica para generar en zip es este: vendor/maennchen/zipstream-php/src/ZipStream.php. Lo revise y no encontré nada raro. Quizás hay cambios que se introdujeron sin querer y por eso falla.

saludos.
2

nop. sigue igual
para mi hemos modificado en algún lado (por eso te preguntaba cual es el archivo que tiene eso) que por defecto la descarga de guarani se llame guarani.pdf
es la única qeu se me ocurre porque siguen saliendo guarani.pdf

Hola Luciana, vamos a tener que deguggear un poco:

En la función sendHttpHeaders de la clase vendor/maennchen/zipstream-php/src/ZipStream.php agrega esto:


	****************************************
	klog2("=== output_name ===", $this->output_name);
	klog2("=== disposition ===", $disposition);
	klog2("=== content_type ===", $content_type);
		
        $headers = array(
            'Content-Type' => $content_type,
            'Content-Disposition' => $disposition,
            'Pragma' => 'public',
            'Cache-Control' => 'public, must-revalidate',
            'Content-Transfer-Encoding' => 'binary'
        );
	****************************************

Luego al descargar el “zip” debuggea los valores del klog2 en el log, en mi caso registra esto:


--  === output_name ===  -------------------------------------------------------

convocatoria.zip

--  === disposition ===  -------------------------------------------------------

attachment; filename="convocatoria.zip"

--  === content_type ===  ------------------------------------------------------

application/x-zip

saludos.
2

Buenos dias,
donde se guardaría ese log?
en los logs del sistema no me sale nada
igualmente te paso lo que sale al momento de la descarga


error_pdf.rar (383 Bytes)

Hola Luciana,

Los logs se encuentran en la carpeta instalacion/log/des01/20201204_144107___3605.log de Autogestión, se genera un archivo por cada petición que haces. “des01” y “20201204_144107___3605.log” depende del nombre del bloque de acceso y la fecha de generación del log.

Por lo que veo no te esta logueando todo, para que loguee todo tenes que modificar el archivo instalacion/config.php y poner:


..........................
		'log' =>
		array(
			'activo' => true,
			/**
			 * Niveles de log: 
			 *  - 'log::NIVEL_DEBUG'	-> Recomendado en Desarrollo
			 *  - 'log::NIVEL_INFO'		-> Solo muestra información de tiempo y memoria consumida
			 *  - 'log::NIVEL_ERROR'	-> Recomendado en Producción
			 */
			'nivel' => log::NIVEL_DEBUG,
..........................

Por lo menos de manera temporal para poder loguear esos valores.

saludos.
2

Claro, lo tengo en nivel error, perdón.
Lo paso a debug y te envío