2012-04-26 14 views
6

No estoy teniendo suerte al servir un .dmg en mi tienda en línea. Me desnudé el código sólo a la siguiente para depurar, pero no importa lo que me pasa un archivo de cero bytes servido:¿Cómo se sirve un archivo .dmg a través de PHP/readfile?

header('Content-Type: application/x-apple-diskimage'); // also tried octet-stream 
header('Content-Disposition: attachment; filename="My Cool Image.dmg"'); 
$size = filesize('/var/www/mypath/My Cool Image.dmg'); 
header('Content-Length: '.$size); 
readfile('/var/www/mypath/My Cool Image.dmg'); 

Este mismo código funciona para un número de otros tipos de archivos que sirve: bin, cremallera , pdf. ¿Alguna sugerencia? El profesor Google no es mi amigo.

+0

¿Funciona si no hay espacio en el nombre del archivo? – Thilo

Respuesta

1

Usted no debe tener espacios en el nombre de archivo (Los espacios no deben utilizarse cuando se trata de web archivos alojados)

Pruebe algo como esto o cambiar el nombre del archivo sin espacios:

<?php 
$path ='/var/www/mypath/'; 
$filename = 'My Cool Image.dmg'; 

$outfile = preg_replace('/[^a-zA-Z0-9.-]/s', '_', $filename); 

header('Content-Type: application/x-apple-diskimage'); // also tried octet-stream 
header('Content-Disposition: attachment; filename="'.$outfile.'"'); 

header('Content-Length: '.sprintf("%u", filesize($file))); 

readfile($path.$filename); //This part is using the real name with spaces so it still may not work 
?> 
+0

Buena sugerencia, pero este no es el problema: todos los archivos que sirvo tienen espacios en el nombre del archivo, y siempre funciona. –

4

encontrados la solución. El culpable era readfile() y puede haber estado relacionado con la memoria. En lugar de la línea readfile(), estoy usando esto:

$fd = fopen ('/var/www/mypath/My Cool Image.dmg', "r"); 
while(!feof($fd)) { 
    set_time_limit(30); 
    echo fread($fd, 4096); 
    flush(); 
} 
fclose ($fd); 

Ahora es servir a todos los tipos de archivos correctamente, DMG incluido.

+0

Entonces, ¿el problema era que el archivo era demasiado grande? – Thilo

Cuestiones relacionadas