У коді є деякі речі, які слід врахувати.
По-перше, напишіть ці заголовки правильно. Ви ніколи не побачите жодного сервера, який надсилає 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");відсутні лапки.