PHP - 用于下载pdf文件的标题

时间:2018-02-07 06:24:55

标签: php pdf

我使用这行代码在不同的浏览器中下载pdf文件。当我尝试使用桌面和Android浏览器时,没关系,但是当我尝试使用Ipad和iphone设备时,下载并没有发生。我不知道这段代码中是否有错误。

$local_file = $path;
            $download_file = $path;

            // set the download rate limit (=> 20,5 kb/s)
            $download_rate = 100;
            if(file_exists($local_file) && is_file($local_file))
            {
                /*header("Cache-Control: no-cache, must-revalidate"); 
                header('Content-Type: application/pdf');
                header('Content-Length: '.filesize($local_file));
                header('Content-Disposition: filename='.$download_file);

                flush();
                readfile($local_file);*/


                header("Content-Type: application/octet-stream");

                $file = $local_file;
                header("Content-Disposition: attachment; filename=" . urlencode($file_name));   
                header("Content-Type: application/octet-stream");
                header("Content-Type: application/download");
                header("Content-Description: File Transfer");            
                header("Content-Length: " . filesize($file));
                flush(); // this doesn't really matter.
                $fp = fopen($file, "r");
                while (!feof($fp))
                {
                    echo fread($fp, 65536);
                    flush(); // this is essential for large downloads
                } 
                fclose($fp); 


            }else {
                die('Error: The file '.$local_file.' does not exist!');
            }

1 个答案:

答案 0 :(得分:0)

首先,下载文件的建议名称应该用双引号括起来,并设置正确的内容类型(必要时才能在客户端上打开正确的查看器):

header("Content-Type: application/pdf; name=\"{$filename}\"");
header("Content-Transfer-Encoding: binary");

然后,不要在循环中阅读文件,请使用:     ReadFile的($文件);     模具();

顺便说一下,在我的所有下载中,我还附加了以下标题(根据您的意图,您可以省略其中一些标题):

// to force the client to save the file, not opening it inside the browser
header("Content-Disposition: attachment; filename=\"{$filename}\"");

// disable caching on client and proxies, if the download content vary
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

我建议您清除代码中的标题部分,并仅使用上面的前两个部分(目前不要使用内容长度)。