Проблемы при загрузке pdf с помощью Chrome PHP


при выборе pdf браузер chrome отображает его нормально, но если я хочу загрузить его, он не работает для меня, он загружает файл с именем страницы, которая ver.php introducir la descripción de la imagen aquí

Index.php

var listar = function(year) {
            var table = $("#dt_cliente").DataTable({
                "order": [
                    [0, "desc"]
                ],
                "destroy": true,
                "ajax": {
                    "method": "POST",
                    "url": "inc/listar.php?anno=" + year //Año
                },
                "columns": [{
                    "data": "decreto"
                }, {
                    "data": "anno"
                }, {
                    "data": "materia",
                "searchable": true,
                "sortable": false
                }, {
                    "data": "pdf",
                    "searchable": false,
                    "sortable": false,
                    "render": function(pdf) {
                        if (!pdf) {
                            return "";
                        } else {
                            return '<a href="ver.php?pdf=' + pdf + '" target="_blank"><img src="img/pdf-icon.png"> Ver decreto</a>'
                        }
                    }
                }]

Ver.php

<?php
header('Content-Description: File Transfer');
header("Content-type: application/pdf");
readfile('file/'.$_GET['pdf']);
 ?>

Если я использую mozilla работает просто отлично, что может быть? С наилучшими пожеланиями

Http://transparencia.villalemana.cl/decreto / здесь я пытаюсь загрузить pdf-файлы в Chrome

Author: MoteCL, 2018-04-30

1 answers

1 с get: ver.php?pdf=nombre.pdf

Определение inline для выхода браузером и filename для получения исходного имени

<?php
$nombreDeArchivo = $_GET['pdf'];
$nombreDeArchivo = end(explode('/',$nombreDeArchivo));

header('Content-Description: File Transfer');
header("Content-type: application/pdf");
header('Content-Disposition: inline; filename='.$nombreDeArchivo);
readfile('file/'.$nombreDeArchivo);
?>

2 Использование path info: ver.php/nombre.pdf

<?php
$nombreDeArchivo = ltrim(isset($_SERVER['PATH_INFO'])?$_SERVER['PATH_INFO']:'ERROR','/');
$nombreDeArchivo = end(explode('/',$nombreDeArchivo));

header('Content-Description: File Transfer');
header("Content-type: application/pdf");
header('Content-Disposition: inline; filename='.$nombreDeArchivo);
readfile('file/'.$nombreDeArchivo);
 ?>

В примерах минимально фильтр имени файла, в вашем случае, если это только pdf, вы должны проверить расширение, если файл существует и прочее, чтобы не было никаких дыр в безопасности или странных ошибок.

 1
Author: alo Malbarez, 2018-04-30 22:29:12