2012-01-13 23 views
6

Tengo un script de descarga de archivos que he escrito, que lee archivos de debajo de public_html y permite que el usuario los descargue después de verificar para ver si el usuario está conectado y que el archivo es un archivo válido para descargar.PHP: archivo de descarga script no funciona en el iPad

Un problema que he encontrado recientemente es que en un iPad simplemente no hace nada cuando se hace clic en el enlace.

Ejemplo de código de descarga de archivos después de que todos los controles se han hecho:

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header("Content-Type: application/msword"); 
header("Content-Disposition: attachment; filename=\"file.doc\";"); 
header("Content-Length: 50688"); 

readfile(SITE_PATH .'/files/file.doc'); 

Este script ha sido probado y comprobado en PC, Mac y Linux máquinas en varios navegadores (FF, Opera, IE6-9, cromo , Safari) y todos parecen funcionar bien, por lo que debe ser algo que el iPad haga de manera diferente.

Me imagino que tiene algo que ver con que el iPad no tenga realmente una estructura de archivos para descargar archivos, pero no estoy seguro.

¿Alguien ha encontrado este problema antes? Si es así, ¿hay una solución?

+0

no relacionado: tiene dos campos de encabezado Content-Type. Elegir uno. Además, Content-Transfer-Encoding no es un campo de encabezado HTTP. –

+0

@JulianReschke eliminó esos, parece que no tuvo ningún efecto. Pregunta actualizada para reflejar. – Nick

Respuesta

11

iOS Safari no soporta descarga de archivos ..

Actualización: Pero si usted está buscando para abrir los archivos .doc en IPAD entonces sí .. se puede hacer eso ...

uso siguiente -

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header("Content-Type: application/msword"); 


readfile('file.doc'); 

la única diferencia en el código y la mía es quité la cabecera para la fijación Basta con retirar estos cabecera -

header("Content-Disposition: attachment; filename=\"file.doc\";"); 
header("Content-Length: 50688"); 

En realidad, usted puede comprobar para el sistema operativo del cliente si el sistema operativo es iOS entonces no añaden cabecera para su descarga como esto -

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header("Content-Type: application/msword"); 

if (!Operating_System_Is_IOS) 
{ 

    header("Content-Disposition: attachment; filename=\"file.doc\";"); 
    header("Content-Length: 50688"); 

} 

readfile(SITE_PATH .'/files/file.doc'); 
+0

Normalmente, el iPad abrirá estos documentos (si están enlazados directamente). Entonces, ¿no hay nada que pueda hacer para imitar ese comportamiento? es decir, abrir en lugar de intentar descargar. – Nick

+0

¡Compruebe la respuesta actualizada! – Saurabh

+0

Impresionante, justo lo que estaba buscando, gracias :) – Nick

0

Apple ha bloqueado los dispositivos IOS por lo que no se puede acceder al archivo estructura. Como tales, han desactivado las descargas de archivos.

-1

Puede obligar al usuario a pegar el enlace (con un ID de tiempo limitado en él debido a iniciar sesión ...) en cualquier aplicación de terceros, como GoodReader. O simplemente déjalos ver el archivo doc en el navegador.

Cuestiones relacionadas