Обслуживание документов за пределами корневой папки.

У меня есть функция под названием «viewDoc», которая должна перейти в папку вне корня веб-сайта и получить файл для меня. Он работает нормально с изображениями (Jpgs и т. Д.), Но с PDF-файлом он выводит только пустую серо-страницу, как показано здесь – http://www.tutorplanner.com/userimage/viewdoc/12787622467.pdf

Может ли кто-нибудь увидеть, что я делаю неправильно, поскольку я прочесываю голову над этим в течение дня!

public function viewDoc($doc) { $path_parts = pathinfo($_SERVER['REQUEST_URI']); $file = $doc; $fileDir = '/var/uploads/'; if (file_exists($fileDir . $file)) { $contents = file_get_contents($fileDir . $file); //print_r($contents); header('Content-Type: ' . mime_content_type($fileDir . $file)); header('Content-Length: ' . filesize($fileDir . $file)); readfile($contents); } } 

Solutions Collecting From Web of "Обслуживание документов за пределами корневой папки."

readfile используется с параметром имени файла – NOT text.

Два примера, которые будут работать (file_get_contents):

 public function viewDoc($doc) { $path_parts = pathinfo($_SERVER['REQUEST_URI']); $file = $doc; $fileDir = '/var/uploads/'; $filePath = $fileDir . $file; if (file_exists($filePath)) { $contents = file_get_contents($filePath); header('Content-Type: ' . mime_content_type($filePath)); header('Content-Length: ' . filesize($filePath)); echo $contents; } } 

или (readfile):

 public function viewDoc($doc) { $path_parts = pathinfo($_SERVER['REQUEST_URI']); $file = $doc; $fileDir = '/var/uploads/'; $filePath = $fileDir . $file; if (file_exists($filePath)) { header('Content-Type: ' . mime_content_type($filePath)); header('Content-Length: ' . filesize($filePath)); readfile($filePath); } } 

Я также добавил переменную $filePath для вас, так как нет причин для последовательного перевода строки несколько раз.

редактировать

В качестве дополнительной безопасности для комментария Yazmat вы можете использовать $file = str_replace(array('..', '/'), '', $doc); поскольку это приведет к удалению всех ссылок на другие каталоги (однако с помощью косой черты он также удалит доступ к вспомогательным каталогам, поэтому вы можете пропустить это, зависящее от вашего кода и структуры файла).

Здесь у вас большая проблема с безопасностью, каждый может получить доступ к чему-либо на вашем сервере с помощью функции, которую вы написали. Я действительно советую вам не использовать его и просто помещать ваши файлы (которые должны быть доступны) в общедоступный веб-каталог.