У коді є деякі речі, які слід врахувати.
По-перше, напишіть ці заголовки правильно. Ви ніколи не побачите жодного сервера, який надсилає Content-type:application/pdf
, заголовок - з Content-Type: application/pdf
пробілом, з великими першими літерами тощо.
Ім'я файлу в Content-Disposition
- це лише ім'я файлу, а не повний шлях до нього, і, крім того, я не знаю, чи є воно обов'язковим чи ні, це ім'я загортається в "
not '
. Крім того, ваш останній '
відсутній.
Content-Disposition: inline
означає, що файл слід відображати, а не завантажувати. Використовуйте attachment
замість цього.
Крім того, зробіть розширення файлу верхньою літерою, щоб зробити його сумісним з деякими мобільними пристроями. ( Оновлення : Практично впевнений, що ця проблема була лише у Blackberry, але світ перейшов від них, тож це може більше не турбувати)
Все сказане, ваш код повинен виглядати приблизно так:
<?php
$filename = './pdf/jobs/pdffile.pdf';
$fileinfo = pathinfo($filename);
$sendname = $fileinfo['filename'] . '.' . strtoupper($fileinfo['extension']);
header('Content-Type: application/pdf');
header("Content-Disposition: attachment; filename=\"$sendname\"");
header('Content-Length: ' . filesize($filename));
readfile($filename);
Content-Length
є необов’язковим, але також важливо, якщо ви хочете, щоб користувач міг відстежувати хід завантаження та виявляти, чи не було перервано завантаження. Але при його використанні ви повинні переконатися, що вам нічого не надсилатимуть разом із даними файлу. Переконайтесь, що до <?php
або після цього немає абсолютно нічого ?>
, навіть порожнього рядка.
'
$filename='./pdf/jobs/pdffile.pdf';
і в цьому рядкуheader("Content-Disposition:inline;filename='$filename");
відсутні лапки.