2009-08-25 22 views
29

Tengo una pregunta, ¿cómo puedo hacer algo como esto:Zend Framework cómo configurar encabezados

header("Content-Disposition: inline; filename=result.pdf"); 
header("Content-type: application/x-pdf"); 

Con Zend Framework, que he intentado:

 $this->getResponse() 
     ->setHeader('Content-Disposition:inline', ' filename=result.pdf') 
     ->setHeader('Content-type', 'application/x-pdf'); 

pero que no funciona correctamente .

Best Regards,

+0

¿Tal vez ya enviaron los encabezados? – Pawka

+0

El tipo MIME correcto para PDF es application/pdf. –

Respuesta

53

Su estado de cuenta para establecer las cabeceras de respuesta es un poco mal formado:

$this->getResponse() 
    ->setHeader('Content-Disposition', 'inline; filename=result.pdf') 
    ->setHeader('Content-type', 'application/x-pdf'); 

lo anterior debe funcionar - Tenga en cuenta la diferencia en el Content-Disposition - encabezamiento.

Por cierto ... Cuando quiera forzar un cuadro de descarga (en lugar de cargar el documento en el navegador) debe usar el Content-Dispositionattachment.

$this->getResponse() 
    ->setHeader('Content-Disposition', 'attachment; filename=result.pdf') 
    ->setHeader('Content-type', 'application/x-pdf'); 

Dependiendo del navegador que puede ser posible que usted también tiene que establecer la Content-Length o cambiar el Content-type a una combinación (múltiples cabeceras) de uno o más de application/force-download, application/octet-stream y/o application/download. Y como escribí en el comentario, a veces los encabezados de almacenamiento en caché pueden interferir con la descarga. Compruebe para ver qué encabezados de almacenamiento en caché se envían.

+0

Tu ejemplo no funciona SR, ya no recibo el cuadro de descarga. Aquí está mi código: http://pastebin.com/d6be142ab – Uffo

+0

¿Qué navegador? ¿Y puedes verificar qué encabezados se envían realmente por el cable? Especialmente algunos encabezados de almacenamiento en caché pueden interferir con las descargas de archivos. –

+4

@Uffo: si quiere forzar una descarga, debe decirlo en su pregunta. Solo preguntaste cuál es la forma correcta de configurar los encabezados, y la respuesta original de S. Gehrig fue solo eso. – Rytmis

-5

resuelto

 $this->getResponse() 
     ->setHeader('Content-Disposition:inline', ';filename=result.pdf') 
      ->setHeader('Content-Type', 'application/x-pdf'); 
+2

Mire la respuesta de S. Gehrig, es la correcta. El tuyo puede funcionar, pero solo de manera incidental. ": en línea" no es parte del nombre del encabezado. – Rytmis

6

Tarde a la mesa, puedo recomendar this action helper como un componente simple y reutilizable para enviar archivos o datos de memoria al navegador.

tiene opciones para el almacenamiento en caché, disposición y puede utilizar Apache Sendfile

+0

buen hallazgo gracias – Mark

+3

El enlace está muerto; alguna alternativa? –

+1

@Aron ver http://github.com/noginn/noginn/blob/master/Noginn/Controller/Action/Helper/SendFile.php –

2

Mi conjetura es que usted está haciendo algo como:

$this->getResponse() 
     ->setHeader('Content-Disposition:inline', ' filename=result.pdf') 
     ->setHeader('Content-type', 'application/x-pdf'); 
fpassthru($filename); 
exit(); 

o algo así.

La respuesta aquí nunca se representará (lo que representa los encabezados). La respuesta se representa durante la impresión posterior a la acción, por lo general.

Deberá configurar directamente los encabezados (como anotó en el código no oo), o usar $this->getResponse()->sendHeaders() directamente.

0

Tenía un conjunto de encabezado. No estaba establecido, pero AGREGADO. Así que tenía un tipo de contenido de texto/html y también application/pdf.

marcar el Content-Type con verdadera hizo que la descarga sea posible en iOS y otros dispositivos que mostró sólo símbolos crípticos después de la descarga o un error:

->setHeader('Content-type', 'application/x-pdf', true);

setHeader($name, $value, $replace = false)

de: https://framework.zend.com/manual/1.12/de/zend.controller.response.html