大家好我有问题使用php传输PDF文件,我正在使用此代码:
if(file_exists($path))
{
//octet-stream
header("Content-Length: " . filesize ( $path ) );
header("Content-type: application/octet-stream");
header("Content-disposition: attachment; filename=".basename($path));
readfile($path);
}
这是我的目录布局(因此您可以了解PDF的存储位置):
Parent/
verify.php
auth/
pdf/
login.php
如果我从verify.php流式传输pdf,则一切按预期工作......但如果我从login.php流式传输SAME PDF文件,则会损坏(损坏)。
这是我在login.php中的路径定义
$path = "pdf/" . $filename . "_print.pdf";
这是我在verify.php中的路径定义
$path = "auth/pdf/" . $filename . "_print.pdf";
Obviosly路径定义在che stream stream之前。
pdf文件的平均尺寸高达50Kb。
该文件存在beacuse通过if检查,但我不知道为什么在一个地方是好的,另一个是损坏。 (我已经将文件检入目录了)。
抱歉我的英语很差,并提前感谢你。
答案 0 :(得分:4)
我修复了编辑代码的问题:
header("Content-Length: " . filesize ( $path ) );
header("Content-type: application/octet-stream");
header("Content-disposition: attachment; filename=".basename($path));
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
ob_clean();
flush();
readfile($path);
路径以两种方式工作:相对或绝对。
答案 1 :(得分:0)
根据附带的脚本路径,您当前的工作难度不会改变。因此,如果/var/www/parent/auth/login.php
包含/var/www/parent/index.php
,您的工作目录将保持/var/www/parent
。
解决这个问题的流行方法是在主文件中定义define('BASEPATH', dirname(__FILE__));
(BASEPATH ='/ var / www / parent')常量,并在其他地方使用它:
//in verify.php
$path = BASEPATH . "/auth/pdf/" . $filename . "_print.pdf";
//in login.php
$path = BASEPATH . "/auth/pdf/" . $filename . "_print.pdf";