2013-06-26 4 views
2

У меня есть следующий код для автоматической загрузки файлов нажатием кнопки отправки, все работает нормально; Загрузка файлов в формате rigth, правильный размер, правильное имя, но когда я хочу его открыть, я получаю сообщение об ошибке, файл не может быть прочитан, что может быть проблемой ?Ошибка загрузки файла PHP-файла

$file=mysql_fetch_assoc($sel); 
$file=$file['downloadlink']; 
header('Content-Type: "application/octet-stream"'); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-length: ".filesize($file)); 
header("Content-disposition: attachment; filename=\"".basename($file)."\""); 
readfile($file); 
+0

- это файл, хранящийся с правильным расширением? например '.docx' vs' .doc' – verbumSapienti

+0

Единственное, что я вижу здесь, которое может быть возиться с вашим файлом, это кодирование передачи –

+0

Да, файлы хранятся с правильным расширением. – bodesam

ответ

2

вы могли бы попробовать настройки этой функции из readfile() комментариев:

function DownloadFile($file) { // $file = include path 
    if(file_exists($file)) { 
     header('Content-Description: File Transfer'); 
     header('Content-Type: application/octet-stream'); 
     header('Content-Disposition: attachment; filename='.basename($file)); 
     header('Content-Transfer-Encoding: binary'); 
     header('Expires: 0'); 
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
     header('Pragma: public'); 
     header('Content-Length: ' . filesize($file)); 
     ob_clean(); 
     flush(); 
     readfile($file); 
     exit; 
    } 
} 
+0

Ваох! Спасибо человеку, я добавил недостающие строки в свой код, и теперь все в порядке, как PDF, так и ZIP. – bodesam

0

У меня есть дополнение для этого. Если размер файла очень большой, он загрузит пустой файл, который мы не можем открыть вообще. Это не проблема с самой функцией readfile. Проблема заключается в чтении больших файлов в память. Таким образом, для предотвращения подобных проблем мы должны использовать «ob_end_flush()» непосредственно перед функцией «readfile» для выключения выходного буфера.

Надеюсь, этот совет спасет время. :)