Problemas al descargar pdf por Chrome PHP

publicado por: Anonymous

Al momento de seleccionar un pdf el browser chrome me lo visualiza bien, pero si deseo descargarlo no me funciona, me descarga un archivo con el nombre de la pagina que es 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']);
 ?>

Si utilizo mozilla funciona muy bien, que puede ser?
Saludos cordiales

http://transparencia.villalemana.cl/decreto/ aqui intento descargar los pdf en Chrome

solución

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

Definiendo inline para que salga por navegador y filename para que tome el nombre original

<?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 usando 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);
 ?>

En los ejemplos filtro mínimamente el nombre de archivo, en tu caso si solo son pdf habria que chequear la extensión, si el archivo existe y esas cosas para que no haya agujeros de seguridad ni errores extraños.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *