SlideShare una empresa de Scribd logo
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

Más contenido relacionado

PPT
Manual+php+básico
PPTX
Introduccion A Php
 
PDF
4.Programación con PHP y MySQL
PPTX
PHP MYSQL - FIEI-UNFV Clase 01
PDF
Manual php completo by_ desarrolloweb
PDF
Manual basico de PHP
PPT
Curso php y_my_sql
PDF
33 php
Manual+php+básico
Introduccion A Php
 
4.Programación con PHP y MySQL
PHP MYSQL - FIEI-UNFV Clase 01
Manual php completo by_ desarrolloweb
Manual basico de PHP
Curso php y_my_sql
33 php

La actualidad más candente (19)

ODP
Introducción a PHP5
PPTX
Conceptos basicos php
PDF
Php Con Postgres
PDF
Composer: Gestionando dependencias en PHP
PDF
Curso Avanzado PHP para EHU/UPV
PPT
PDF
php
DOCX
PDF
Introducción a PHP - Programador PHP - UGR
PDF
Curso introduccionphp sql
PDF
Guiacursophp sql
DOCX
PPTX
Introducción a PHP
PPT
Php basico y avanzado
PPTX
Exposicion de php
PDF
Curso Php
PPTX
Introducción a programación con PHP
Introducción a PHP5
Conceptos basicos php
Php Con Postgres
Composer: Gestionando dependencias en PHP
Curso Avanzado PHP para EHU/UPV
php
Introducción a PHP - Programador PHP - UGR
Curso introduccionphp sql
Guiacursophp sql
Introducción a PHP
Php basico y avanzado
Exposicion de php
Curso Php
Introducción a programación con PHP
Publicidad

Destacado (13)

PPTX
Slideshare exposicion
PDF
Reglas uso mayusculas
PDF
00 porque video conferencia
PDF
聞く技術研究所|新撰組と幕末の志士たちに関する調査
PDF
06 シマアツ
PPTX
開発宣言
PDF
Propuesta de capacitación equipo n°1
PDF
ソフトバンクでiPhoneを使っている方の迷惑メールの対処方法
PPTX
Dn11 u3 a9_cmr
PPTX
Contracción de musculo liso
PDF
Manual multimedia y web 2.0
PDF
Informe Riesgos y amenazas en cloud computing. INTECTO-CERT
PDF
Guia optimizacion motores_busqueda
Slideshare exposicion
Reglas uso mayusculas
00 porque video conferencia
聞く技術研究所|新撰組と幕末の志士たちに関する調査
06 シマアツ
開発宣言
Propuesta de capacitación equipo n°1
ソフトバンクでiPhoneを使っている方の迷惑メールの対処方法
Dn11 u3 a9_cmr
Contracción de musculo liso
Manual multimedia y web 2.0
Informe Riesgos y amenazas en cloud computing. INTECTO-CERT
Guia optimizacion motores_busqueda
Publicidad

Similar a 78 Php. Headers Y Visualizacion (20)

DOC
Manejo de datos blob con php y my sql
PPTX
Introduccion A Php
 
PPTX
Introduccion A Php
 
PDF
56 Php. Transferencia De Ficheros
PPT
Php y MySqul
DOCX
Laboratorio 3 Andres Moreno
ODP
Introducción a Kohana Framework
DOCX
Tutorial php basico
PDF
54 Php. La Opcion Include
PDF
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PPT
Hacking uploaders
PDF
Desarrollo Aplicaciones Zend Framework
PPT
PHP IUTE
PDF
Programacion en php atavez de ejemplos
PDF
PDF
Apuntes php
PPTX
Programación Server-Side - Intro PHP.pptx
PDF
88 Php. Imagenes En Tablas
PDF
92 Php. Instalar Php4 Como Cgi
Manejo de datos blob con php y my sql
Introduccion A Php
 
Introduccion A Php
 
56 Php. Transferencia De Ficheros
Php y MySqul
Laboratorio 3 Andres Moreno
Introducción a Kohana Framework
Tutorial php basico
54 Php. La Opcion Include
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
Hacking uploaders
Desarrollo Aplicaciones Zend Framework
PHP IUTE
Programacion en php atavez de ejemplos
Apuntes php
Programación Server-Side - Intro PHP.pptx
88 Php. Imagenes En Tablas
92 Php. Instalar Php4 Como Cgi

Más de José M. Padilla (20)

PDF
Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004
PDF
Modulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody Assistant
PDF
Modulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke Player
PDF
Modulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower Amp
PDF
Modulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track Studio
PDF
Modulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. Audacity
PDF
Modulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One Player
PDF
Modulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C Dex
PDF
Modulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema Operativo
PDF
Modulo 1. Sonido Y Musica Por Ordenador. 07 Almacenamiento
PDF
Modulo 1. Sonido Y Musica Por Ordenador. 06 El Audio
PDF
Modulo 1. Sonido Y Musica Por Ordenador. 05 El Midi
PDF
Modulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. Edicion
PDF
Modulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su Representacion
PDF
Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.
PDF
00 Sonido y musica por ordenador. Guia del alumno.
PDF
00 Sonido y musica por ordenador. Caso 20
PDF
00 Sonido Y Musica Por Ordenador. Caso1
PDF
00 PHP. Paginas Web Dinamicas
PDF
16 Php. Variables Predefinidas
Modulo 2. Sonido Y Musica Por Ordenador. 08 Partituras. Note Pad 2004
Modulo 2. Sonido Y Musica Por Ordenador. 10 Karaoke 2. Melody Assistant
Modulo 2. Sonido Y Musica Por Ordenador. 09 Karaoke 1. Van Basco Karaoke Player
Modulo 2. Sonido Y Musica Por Ordenador. 07 Conversor. D Bpower Amp
Modulo 2. Sonido Y Musica Por Ordenador. 06 Secuenciador. N Track Studio
Modulo 2. Sonido Y Musica Por Ordenador. 05 Editor De Audio. Audacity
Modulo 2. Sonido Y Musica Por Ordenador. 04 Reproductor. Real One Player
Modulo 2. Sonido Y Musica Por Ordenador. 03 Extraccion De Audio. C Dex
Modulo 2. Sonido Y Musica Por Ordenador. 02 Sonido En El Sistema Operativo
Modulo 1. Sonido Y Musica Por Ordenador. 07 Almacenamiento
Modulo 1. Sonido Y Musica Por Ordenador. 06 El Audio
Modulo 1. Sonido Y Musica Por Ordenador. 05 El Midi
Modulo 1. Sonido Y Musica Por Ordenador. 04 El Estudio De Sonido. Edicion
Modulo 1. Sonido Y Musica Por Ordenador. 03 El Sonido Y Su Representacion
Modulo 1. Sonido y musica por ordenador. 02 El ordenador en el aula.
00 Sonido y musica por ordenador. Guia del alumno.
00 Sonido y musica por ordenador. Caso 20
00 Sonido Y Musica Por Ordenador. Caso1
00 PHP. Paginas Web Dinamicas
16 Php. Variables Predefinidas

Último (20)

PPT
introduccion a las_web en el 2025_mejoras.ppt
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PPT
Que son las redes de computadores y sus partes
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
CyberOps Associate - Cisco Networking Academy
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PDF
taller de informática - LEY DE OHM
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PPTX
Propuesta BKP servidores con Acronis1.pptx
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PDF
Calidad desde el Docente y la mejora continua .pdf
PDF
clase auditoria informatica 2025.........
PDF
Diapositiva proyecto de vida, materia catedra
PDF
Maste clas de estructura metálica y arquitectura
introduccion a las_web en el 2025_mejoras.ppt
historia_web de la creacion de un navegador_presentacion.pptx
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Que son las redes de computadores y sus partes
Sesion 1 de microsoft power point - Clase 1
CyberOps Associate - Cisco Networking Academy
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
Power Point Nicolás Carrasco (disertación Roblox).pptx
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
taller de informática - LEY DE OHM
El-Gobierno-Electrónico-En-El-Estado-Bolivia
Propuesta BKP servidores con Acronis1.pptx
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
Calidad desde el Docente y la mejora continua .pdf
clase auditoria informatica 2025.........
Diapositiva proyecto de vida, materia catedra
Maste clas de estructura metálica y arquitectura

78 Php. Headers Y Visualizacion

  • 1. 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);
  • 2. 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