Я думаю, что вам не хватает нескольких вещей (например, расширение файла):
//no extension
$file = 'view';
//this is literally $file and never used again
$filename = '$file';
header('Content-type: application/pdf');
//the name of the transfered file is filename.php (not really an issue in this case)
//but is that what you wanted there
header('Content-Disposition: inline; filename="filename.pdf"');
header('Content-Transfer-Encoding: binary');
//still no extension on 'view' so your file is just named view (nothing else)
//no file path either.
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');
//and you guessed it still no extension (error suppression hides the file not found error)
@readfile($file);
$filename
- это $file
буквально не значение переменной из-за использования одинарных кавычек. PHP не выполняет переменную интерполяцию (замену значений) для строк в одинарных кавычках. Не то чтобы это имело значение, потому что оно никогда не использовалось снова.
Вероятно, @
не должно быть там, иначе вы не смогли бы найти файл с именем view
без расширения. Вы должны увидеть что-то вроде этого
Предупреждение: filesize (): сбой статистики для просмотра в C: \ Unit \ eval \ 1541064182.php в строке 2
Предупреждение: файл чтения (просмотр): не удалось открыть поток: нет такого файла или каталога в C: \ Unit \ eval \ 1541064182.php в строке 3
За исключением того, что у вас будет ваш путь, а не мой путь к моему серверу модульного тестирования.
Другими словами, ваш вызов readfile буквально такой:
@readfile('view');
Вы можете оставить имя загрузки как filename.php
, но я не думаю, что это является намерением.
$file = 'view.pdf';
$pathname = $path.$file;
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="'.$file.'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($pathname));
header('Accept-Ranges: bytes');
readfile($pathname);
Очевидно, вам придется ввести значение для пути, или, если оно находится в той же папке, вы можете проигнорировать это.
Да, и последнее, что нужно избавиться от этой вещи ?>
, потому что если после этого у вас будет строка возврата, это может повредить ваш файл. Я забыл, если это (в частности, просто возврат строки) является проблемой для PDF, но любой контент после закрывающего тега (или до) станет частью данных файла. Конечный тег не является обязательным, и поэтому стоит рисковать.