2010-07-18 4 views
1

У меня есть сценарий php, который я использовал в течение многих лет, чтобы принудительно загружать файлы с моего сайта. Но когда-то за последний месяц или около того он прекратил работать и запускает файлы, не обнаружившие ошибок. Странно то, что в firefox, если я действительно просматриваю источник на странице ошибки, это файл, который я пытался загрузить. И сделав File> Save from there, вы получите правильный файл. Поэтому я знаю, что это не проблема с тем, что скрипт не находит файл на сервере.Принудительная загрузка перестала работать

Есть ли что-то не так с тем, как я настраиваю заголовки?

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/octet-stream'); 
header('Content-Transfer-Encoding: Binary'); 
header('Content-length: '.filesize($file_url)); 
header('Content-disposition: attachment; filename="'.basename($file_url).'"'); 
readfile($file_url); 
+0

Какое значение '$ file_url'? – Artefacto

+0

Это путь к файлу, который нужно загрузить. Я опубликовал только код, используемый для запуска загрузки. Я знаю, что первая мысль будет заключаться в том, что путь неправильный, но он не такой, как источник прогноза, а сохранение создает нужный файл. – unholysampler

ответ

0

В итоге я обманул, чтобы сделать эту работу.

header("Location: $file_url"); //file_url is now the real url, not the path 

А затем используется Cpanel, чтобы убедиться, что все типы MIME, который я использовал были установлены application/octet-stream.

1

Можете ли вы попробовать эту функцию?

function force_download($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)); 
    readfile($file); 
    exit; 
} 
+0

Извините, тот же результат. – unholysampler

+1

Kinda вне темы, что со всеми, кто добавляет post-check = 0 и pre-check = 0, когда они хотят обслуживать файлы? Это одна из тех вещей, которые на самом деле ничего не делают, и просто копируются в ... https://blogs.msdn.com/b/ie/archive/2006/06/01/613132.aspx – kander

+0

@unholysampler - Вы используете браузер Chrome, потому что я видел несколько ту же ошибку в хроме. Он не может отображать заголовки. – Shubham

Смежные вопросы