PHP – enviar archivo al usuario

Tengo un archivo pdf en el disco que necesito enviar a un usuario cuando hacen una solicitud a un script php, ¿cuál es la mejor manera de hacerlo?

Gracias

Asumiendo que está en el servidor:

readfile () – Salidas de un archivo

Ejemplo de http://php.net/manual/en/function.readfile.php

Esto es lo que necesita para enviar un archivo con PHP:

$filename = "whatever.jpg"; if(file_exists($filename)){ //Get file type and set it as Content Type $finfo = finfo_open(FILEINFO_MIME_TYPE); header('Content-Type: ' . finfo_file($finfo, $filename)); finfo_close($finfo); //Use Content-Disposition: attachment to specify the filename header('Content-Disposition: attachment; filename='.basename($filename)); //No cache header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); //Define file size header('Content-Length: ' . filesize($filename)); ob_clean(); flush(); readfile($filename); exit; } 

Como comentó Julian Reschke, la respuesta validada PUEDE funcionar, pero está llena de encabezados inútiles. El tipo de contenido debe establecerse en el tipo real del archivo, o algunos navegadores (especialmente los navegadores móviles) pueden no descargarlo correctamente.

Si está utilizando Apache o Lighty, entonces la “mejor” forma de hacerlo desde el punto de vista del rendimiento es usar el encabezado X-Sendfile . Vea este tutorial: http://www.jasny.net/articles/how-i-php-x-sendfile/

Ok, entonces no soy un experto en PHP, solo me puedo atribuir el mérito de armar algunos otros fragmentos de PHP para lograr lo que necesitaba, y pensé que sería mejor publicar esta solución en unos pocos foros en los que preguntaba la misma pregunta, pero no pude llegar a trabajar yo mismo. No parecía haber una solución en ningún lado, así que aquí está. Funciona para mí … Ok, primero, creé el formulario PDF y agregué un botón que luego envía el formulario. En las acciones de este formulario de envío, le dije a PDF el documento completo. Luego le di un enlace URL a una página php, como mail_my_form.php Luego creé un formulario php, y lo nombré igual que el anterior … mail_my_form.php Una última cosa es crear una carpeta llamada pdfs en la raíz de donde irá este código php. (Entonces, si coloca el php en una carpeta llamada correo electrónico, dentro de la carpeta de correo electrónico, necesita otra carpeta llamada pdfs). Ahora lo que hace este script es: Guarda el PDF en el nombre del archivo pdfs. Luego adjunta el archivo a un correo electrónico y lo envía. Luego borra el archivo de la carpeta pdfs para ahorrar espacio. (También puede eliminar la función de eliminación para guardar sus formularios en su FTP si así lo desea).
Aquí está.

  

Espero que esto ayude a alguno de ustedes.

Richard Williams