2012-05-21 5 views
0

У меня есть PHP-код, который заставляет загрузить PDF-файл. Он работает на Mac, но не с Windows-машины. Я предполагаю, что это может быть связано с тем, что сервер linux считывает код и создает файл, который Mac может читать, но не окна?Force PDF скачать с PHP - файл поврежден на Windows

$filename = str_replace(' ', '%20', $_GET['brochure']); 
header('Cache-Control: public'); 
header('Content-type: application/pdf'); 
header("Content-disposition: attachment; filename=\"$filename\""); 
readfile('http://siteurl.com/media/download/'.$filename); 
die(); 

Любые предложения о том, как получить этот PDF-файл.

Сообщение об ошибке

Не удалось открыть «имя файла ..» потому, что он либо не поддерживается файл типа или потому, что файл был поврежден (например, он был отправлен в качестве электронной почты вложение и неправильно декодировано).

+0

Что делать, если вы указываете свой браузер напрямую на 'http: //siteurl.com/media/download /'.$ filename'? – ilanco

+0

Попробуйте сохранить файл и открыть его в блокноте (или аналогичном простом редакторе файлов), чтобы увидеть, есть ли какие-либо ошибки в верхней части файла. –

+0

@ilanco Да, проблем нет. Но URL-адрес не должен быть видимым загрузчику (запрос клиентов) – iamjonesy

ответ

1

Возможно, ваш браузер кэширует более старую версию файла. Попробуйте добавить эти заголовки в код:

header("Cache-Control: maxage=1"); 
header("Pragma: public"); 

Другой вариант:

Сохраните файл во временную директорию и используйте следующий код, чтобы отправить его клиенту:

$file = readfile('/tmp/'.$filename); 
header('Content-Description: File Transfer'); 
header('Content-Type: application/pdf'); 
header('Content-Disposition: attachment; filename='.basename($file)); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($file)); 
ob_clean(); 
flush(); 
readfile($file); 
exit; 
+0

спасибо, но все еще получаю сообщение об ошибке - я добавил его к моему вопросу – iamjonesy

+0

То, что вы положили в свой код, не является кодом в моем ответе ... – ilanco

0

Это может что имя файла нуждается в .pdf в конце, чтобы Windows могла правильно интерпретировать его. Попробуйте загрузить файл, переименовав его на .pdf в конце, а затем попытаться открыть его.

+0

Глядя на свойства в окнах, это тип файла, Adobe Acrobat Docum ent (.pdf) – iamjonesy

+0

«Не удалось открыть« имя файла .. »и« открыть файл, и на самом деле содержит отображаемую страницу html ». Мне кажется, что есть что-то не так со ссылкой на скачивание файла. Можете ли вы опубликовать фактический текст ссылки после ее расширения. – Jaydee