You are on page 1of 2

Header's y visualización

¿Qué es un header?
Utilización de header
En este ejemplo se utilizan algunas header e incluimos como comentarios las
En un documento PHP se pueden utilidades de cada una de ellas
incluir instrucciones que obliguen
al navegador del cliente a
comportarse de una manera <?
determinada. #esta variable recoge el nombre del fichero a visualizar
$fichero="ejemplo132.pdf";
Esas instrucciones que dicen al #esta función determina la longitud en bytes del fichero
navegador del cliente cómo tiene $len = filesize($fichero);
que comportarse, van contenidas /* esta cabecera -válida para HTTP/1.1- ordena al navegador
en la header de la página y que no permita guardar la página
pueden resultar muy útiles como
que no permita que se almecene en la caché del cliente*/
complemento de otras funciones.
header("Cache-Control: no-store, no-cache, must-revalidate");
Su nombre se debe a que han de /* esta otra cabecera -válida para HTTP/1.0
ser –obligatoriamente– lo primero indica al navegador que no guarde la página en la caché del cliente
que ha de recibir el navegador en he puesto ambas opciones para cubrir todo el especto probable */
el momento de ser atendida su header("Pragma: no-cache");
petición. El grado de exigencia de /* esta cabecera especifica al navegador el contenido
esta condición es tal que ni que va a recibir que en este caso no sería otra cosa
siquiera se permite que les que algo que requiere una aplicacion capaz de interpretar
preceda ni una línea en blanco.
ficheros pdf */
header("Content-type: application/pdf");
¿Cómo colocar las /* como la norma de los headers establece que
cabeceras? siempre que se conozca el tamaño del contenido enviado
se incluya en la cabecera ese contenido, pues...
Los header han de colocarse de incluimos el tamaño ya que "filesize" nos midió el fichero
forma que sus contenidos sean lo y guardo esa medida en la variable $len...
primero que aparezca en la página pero... fue posible utilizar esa función antes de las header
que llega al cliente y eso significa porque esa medida no fue mandada a la salida...
que: si hubiéramos escrito antes de los header... algo así como
Echo $len; ... la habríamos fastidiado...
• No puede aparecer delante de un ya habríamos tenido error en las cabeceras...*/
header ninguna etiqueta HTML ni
header("Content-Length: $len");
ningún contenido de este tipo.
/* con esta otra header indicamos ls forma de presentación de
• Ni siquiera se permite que se les el contenido del documento... permite dos posibilidades
anteponga una línea en blanco. inline (la que he puesto aquí) o
attachment (que seria como fichero anexo)
Requieren muchísima atención y fijate que en este "header" he puesto en filename un nombre distinto
cerciorarse siempre de que la del que tenía el fichero original... eso no tiene importancia
marca del comienzo del script PHP
solo será el nombre con el que se guardará en la caché del cliente
(<?) esté siempre en la primera
línea del documento, sin dejar
en el caso de que no hubiéramos incluido la cabecera "no cache"
líneas en blanco delante de ella. que dicho sea de paso... la he puesto aquí como ejemplo
pero que serían absolutamente innecesarias para este ejemplo
Puede que te preguntes: ¿ha de ir de visualización del documento */
también en la primera línea del header("Content-Disposition: inline; filename=felipe.pdf");
script PHP? /* ya se acabaron las cabeceras del documento
aquí le decimos al servidor que lea el fichero y lo envie
La respuesta es esta: tienen que ir
al navegador del cliente... este ya lo interpretará
antes de la primera función que
genere una salida hacie el siguiendo las especificaciones que le hemos incluido
navegador del cliente. las cabeceras....*/
readfile($fichero);
Intentaremos aclarar esta idea. ?>
Los scripts PHP (lo contenido
entre <? y ?>) se ejecutan en el ejemplo148.php
servidor y de ellos sólo llegan al
navegador del cliente los
resultados de la ejecución (las Visualización ficheros PDF creados en memoria
salidas echo o print, por citar dos
ejemplos). <?
Las cabeceras han de llegar al # Creamos el PDF con las nuevas funcionesn>
navegador antes que esas posibles $g = PDF_new();
salidas, lo cual no es óbice para pdf_open_file($g);
que se puedan efectuar –antes de # A partir de aquí todo es igual a los ejemplos anteriores
insertar las headers– procesos que pdf_begin_page($g, 595, 842);
no produzcan salidas de tipo print, $imagen1 = pdf_open_jpeg($g, "./images/cruz.jpg");
echo, etcétera. $h=0.5;
$v=0.8;
La sintaxis de algunas header varía
en algunos casos –lo podemos ver
pdf_save($g);
en el ejemplo– según el protocolo $x1 = pdf_get_value($g, "imagewidth", $imagen1);
que utilice el servidor. Lo habitual $y1 = pdf_get_value($g, "imageheight", $imagen1);
es que lo servidores utilicen uno pdf_scale($g,$h,$v);
de estos: HTTP/1.1 ó HTTP/1.0. pdf_place_image($g, $imagen1, ((595/$h-$x1)/2), (842/$v-$y1), 1.0);
pdf_close_image ($g,$imagen1);
Para saber cuál utiliza nuestro pdf_restore($g);
servidor basta con visualizar el info. pdf_save($g);
php y buscar la directiva $imagen2 = pdf_open_gif($g, "./images/cruz.gif");
SERVER_PROTOCOL. $ancho=150;
$alto=325;
Los diferentes haeder $x1 = pdf_get_value($g, "imagewidth", $imagen2);
$y1 = pdf_get_value($g, "imageheight", $imagen2);
$h=$ancho/$x1;
En los ejemplos que aparecen en
la columna de la derecha están $v=$alto/$y1;
comentadas algunas de las pdf_scale($g,$h,$v);
cabeceras que es posible insertar pdf_place_image($g, $imagen2, ((595/$h-$x1)/2), 200, 1.0);
en los ficheros PHP. pdf_close_image ($g,$imagen2);
pdf_restore($g);
Cabría añadir la siguiente:
PDF_end_page($g);
header("Location:dirección") pdf_close($g);
# Después del pdf_close empezamos la lectura del buffer
Mediante este header se $buffer = PDF_get_buffer($g);
redirecciona el navegador a la URL /* Esta porción de código es idéntica a la del ejemplo anterior
(absoluta o relativa) que se con la única diferencia que ahora medimos la longitud de la cadena
indicada en el parámetro dirección.
buffer en vez de la longitud de un fichero como hacíamos allí */
Cuando el navegador recibe un $len = strlen($buffer);
header de este tipo realiza de Header("Content-type: application/pdf");
forma automática la petición de la Header("Content-Length: $len");
página indicada en él. Header("Content-Disposition: inline; filename=loquesea.pdf");
# Escribimos en el documento que se enviará al cliente
Otra funciones PDF # el contenido de la cadena buffer
echo $buffer;
/* liberamos la memoria que contenía el fichero
Existe una función muy útil para con lo cual el documento solo aparecerá en el navegador del cliente
un montón de propósitos que PHP
y en la caché de este (con el nombre loquesea.pdf).
empezó a incluir a partir de la
versión 4.0.5. Se trata de la Si no queremos que se almacene en la caché sería solo cuestión de
función incluir las cabeceras no caché del ejemplo anterior */
pdf_delete($g);
$b=pdf_get_buffer($p) ?>
Esta función recoge en una
variable $b el contenido de un ejemplo149.php
documento PDF -identificado por
$p- pudiendo enviarlo al
navegador directamente desde la Una opción alternativa
memoria del servidor y que, por
tanto, no necesita ser escrito ni En el caso de que no sea posible utilizar las funciones anteriores por incompatibilidad
almacenado en el servidor. de versiones PHP o de las propias librerías PDF, se puede recurrir a un truco. Se trata de
escribir el fichero PDF en servidor, enviarlo al cliente y, posteriormente, borrarlo. Ello
La utilización de esa función serviría, al menos, para economizar espacio de almacenamiento en el servidor.
requiere una modificación en la
sintaxis -respecto a la de los
ejemplos anteriores- y el uso de <?
dos funciones nuevas, que son: # creo un fichero de la misma forma que
# lo hacíamos en ejemplo de páginas anteriores
$p=pdf_new() $filename="leocadio.pdf";
$f = fopen($filename, "w");
que es la función que generará un
identificador de recurso, distinto $g = pdf_open($f);
de los que hemos venido utilizando pdf_begin_page($g, 595, 842);
hasta ahora, ($p) para el nuevo /* aqui insertaríamos el código
fichero PDF y que debe insertarse para la generación del pdf.
delante de: En este caso lo cerramos en blanco */

pdf_open_file($p) PDF_end_page($g);
que abriría un fichero pdf en
pdf_close($g);
memoria. # cerramos el fichero leocadio.pdf
fclose($f);
Como observarás esta sintaxis /* ahora insertamos exactemente el codigo
difiere de la que hemos venido del primer ejemplo de esta página.
utilizando hasta ahora y que era la Fijate que pese a haber escrito un montón de código
siguiente: aun estamos a tiempo de insertar las funciones de cabecera
ya que NO HE ENVIADO AUN NINGUNA SALIDA AL NAVEGADOR
$f = fopen(nombre, "w");
$g = pdf_open($f) eso sí, no olvides que delante de <? no puede haber
ninguna linea en blanco...*/
Con esta sintaxis, creábamos $len = filesize($filename);
(mediante la función fopen) un header("Content-type: application/pdf");
documento en el servidor y su header("Content-Length: $len");
identificador de recurso ($f); header("Content-Disposition: inline; filename=felipe.pdf");
luego, creabámos un segundo readfile($filename);
identificador de recurso $g – por
/* ahora que ya he enviado
medio de pdf_open– que
el contenido del fichero pdf al navegador
asociábamos con el anterior para
que los resultados de las funciones ya puedo borrar el fichero del servidor
pdf se fueran escri- biendo en el unlink($filename);
fichero abierto con la primera /* como habrás observado
instrucción. se trata de una chapuza en tres actos
1º.- Cramos el fichero en el servidor y lo cerramos
Ahora no necesitamos crear 2º.- Leemos el contenido del fichero
ningún documento y bastará con 3º.- Borramos el fichero del servidor */
un solo identificador de recurso, ?>
que es, la salida de la función
pdf_new.
ejemplo150.php

Anterior Indice Siguiente

You might also like