php - resuelva - Descargar archivo corrupto. ¿El tipo de contenido no funciona?
resuelva el error de documento dañado al abrir archivos pdf (8)
Retire los encabezados y mire la página, ¿ve algún mensaje de error? Si PHP genera algo más que el origen de PDF real, el archivo parecerá estar dañado.
Quiero permitir que un usuario descargue un archivo pdf, el código de descarga está debajo ... por alguna extraña razón, aunque el archivo se está descargando, me da un error al decir que el archivo se ha dañado en el servidor ... Podría alguien me ayude y señale dónde estoy cometiendo mi error.
<php
$name = $_POST["name_first"];
$mail = $_POST[''email''];
$number = $_POST[''phone_number''];
$email_message = "first name: {$name} email is {$mail} number is {$number} ";
mail(''[email protected]'', ''Form Response'', $email_message);
if ($mail == "" OR $name == "" OR $number == "")
{
echo "Enter valid details ";
}
else
{
header(''Content-type: application/pdf'');
header(''Content-Disposition: attachment; filename="tokina.pdf"'');
readfile(''docs/tokina.pdf'');
}
?>
Su archivo PDF tokina.pdf no está cargado o no está en el mismo directorio que el archivo PHP. Es por eso que está guardando como "tokina.pdf.htm"; en su lugar, está cargando el HTML de una página 404. Es por eso que su navegador / visor de PDF piensa que el archivo está "dañado", porque su extensión es PDF pero su contenido no.
Asegúrese de que el archivo esté cargado, y si lo está, asegúrese de que readfile
apunte a la ruta correcta. Si no está en la misma carpeta, use una ruta relativa / absoluta, por ejemplo:
readfile(''docs/tokina.pdf'');
Y sí, el tipo de contenido debe ser application/pdf
Tal vez su tipo de contenido no es correcto. prueba este:
header(''Content-type: application/pdf'');
header(''Content-Disposition: attachment; filename="downloaded.pdf"'');
readfile(''original.pdf'');
Usé este código para descargar pdfs:
header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header(''Content-Type: application/octetstream'');
header("Content-Transfer-Encoding: Binary");
header("Content-length: ".filesize($file));
header("Content-disposition: attachment; filename=/"".basename($filename)."/"");
readfile("$file");
}
Esto debería estar bien, y asegúrese de que no haya espacios o caracteres de retorno (no escape de ninguna manera la mejor solución).
Si encuentra que todavía tiene problemas, abra el archivo dañado con el bloc de notas (puede haber una advertencia de error php adentro).
¡Espero que esto ayude!
Usando esta secuencia de comandos
header(''Content-Type: application/force-download'');
header(''Content-Disposition: attachment; filename=''.$filename);
header(''Content-Transfer-Encoding: binary'');
header(''Content-Length: ''.filesize($filenamepath));
readfile($filenamepath);
Yo tuve el mismo problema. Al comparar el archivo original y el archivo descargado con un editor hexadecimal como UltraEdit, encontré algunos caracteres al principio del archivo dañado.
El problema era que después de marcar el final del código PHP, había terminadores de línea varias veces en mi código.
¿Eliminar todos los terminadores de línea después ?>
Y leer también el artículo del foro Los archivos descargados están corruptos: problema común . Eso funcionó para mí.
Espero que pueda ayudarte.
intente sacar las comillas dobles en
header(''Content-type: "application/octet-stream"'');
entonces se vuelve
header(''Content-type: application/octet-stream'');
yo suelo
$download_path = your path (where to look for the files)
set_time_limit(0);
$file_url = $download_path . $data[''link''];
header(''Content-Type: application/octet-stream'');
header(''Content-Disposition: attachment; filename="'' . basename($file_url). ''"'');
//then to read the file
readfile($file_url);
Usualmente esto funciona para mi
header(''Content-type: application/pdf'');
habilite la extensión PHP php_gettext
y listo.