2012-05-14 33 views
8

Estoy tratando de hacer que un sitio web tenga un botón que obligue a descargar un pdf.Usando php forzar descarga un pdf

Aquí está el código HTML del botón:

<a href=scripts/download.php> 
    <input type="image" src="images/download.gif" alt="Submit button"/> 
    </a> 

Y el script php hasta ahora:

<?php 
    header('Content-Type: application/pdf'); 
    header('Content-disposition: attachment;filename=documents/ECM_IT_ResumeDownload.pdf'); 
    readfile('documents/ECM_IT_ResumeDownload.pdf'); 
    ?> 

Esto parece descargar el bien de archivos, pero cuando voy a abrirlo me sale este error :

"Adobe Reader no pudo abrir 'documents_ECM_IT_ResumeDownload.pdf' porque no es un tipo de archivo admitido o porque el archivo se ha dañado (por ejemplo, se envió como un correo electrónico) archivo adjunto y no fue decodificado correctamente). "

Cualquier ayuda sería muy apreciada.

EDITAR abrir el PDF en un editor de texto y tiene este mensaje:

"
Advertencia: readfile (documentos/ECM_IT_ResumeDownload.pdf) [function.readfile]: failed to open stream: No existe el fichero o directorio en html/scripts/download.php en la línea 4
"

El documento es Definit Ely allí sin embargo. en html/documentos/ECM_IT_ResumeDownload.pdf

+2

Envasar una etiqueta de entrada en una etiqueta de enlace es impar – Ben

+0

Lo más probable es que algo esté causando que la salida incluya contenido PDF no válido ... tal vez el servidor está arrojando un error. Intente abrir el archivo de resultados en un editor de texto – Ben

+0

Ahh no me había dado cuenta de que lo había hecho para otro enlace pero no me di cuenta de que todavía tenía ese –

Respuesta

2

has necesitado deshacerse de la etiqueta de cierre PHP (la>) ¿al final? Tratará la página como una página pura de PHP, eliminando cualquier posible nueva línea que pueda adjuntarse accidentalmente al final de la salida. Esto me ayudó cuando estaba creando dinámicamente archivos de Excel para descargar, y estaban descargando como dañados. Echa un vistazo a esta página para obtener más información:

http://www.php.net/manual/en/language.basic-syntax.phptags.php

Desde su pregunta editada, parece que PHP no puede encontrar el archivo. Trate de usar una ruta absoluta al archivo como: "c: \ blah \ de \ blah \ bloo.pdf" o "c: /blah/de/blah/bloo.pdf". Si una de esas rutas funciona y se descarga correctamente, su ruta relativa es incorrecta de alguna manera.

+0

Eso es algo que no sabía, pensé que siempre tenía que cerrarlos Desafortunadamente, no resuelve el problema –

+2

Pruebe una ruta absoluta en la llamada readfile(): "c: /html/downloads/ECM_IT_ResumeDownload.pdf" o lo que sea . – abelito

+0

Eso hizo el truco, gracias :) –

4

Trate de no incluir la ruta al archivo y dejar el nombre del archivo en el contenido:?

header('Content-Type: application/pdf'); 
header('Content-disposition: attachment; filename=ECM_IT_ResumeDownload.pdf'); 
+0

Todavía tiene el mismo error. –

18
$file_url = www.example.com/pdffolder/$pdfname; 
header('Content-Type: application/pdf'); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=".$pdfname); 
readfile($file_url); 
0

Por cierto, un poco tarde, pero para identificar el problema de manera adecuada aquí:

Su script descarga está en scripts/download.php y el archivo que desea descargar está en documents/[...].pdf.

Por lo tanto, su función readfile() debe atravesar el directorio principal (fuera del scripts/), p. readfile('../documents/[...].pdf');.

Cuestiones relacionadas