2011-05-19 117 views
0

好家伙,我有流的PDF文件到PHP的问题,我使用这个代码:PHP流PDF和ReadFile的产生损坏的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被损坏流都相同PDF文件(损坏)。在login.php中

$path = "pdf/" . $filename . "_print.pdf"; 

在这里,我的路径定义

这里我的路径定义verify.php

$path = "auth/pdf/" . $filename . "_print.pdf"; 

Obviosly路径定义为前车流的代码。

pdf文件的平均尺寸高达50Kb。

该文件存在beacuse通过if检查,但我不知道为什么在一个地方是好的,而在另一个损坏。 (我已经检查到目录中的文件没关系)。

对不起,我可怜的英语,并提前谢谢你。

回答

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

该路径工作在两种方式:相对或绝对。

感谢: readfile not working properly

0

根据您的包含的脚本路径,您当前的工作结果不会改变。因此,如果/var/www/parent/auth/login.php包含在/var/www/parent/index.php中,您的工作目录将保留为/var/www/parent

流行的方式来处理,这是定义在主文件define('BASEPATH', dirname(__FILE__));(基本路径=“/无功/网络/父母)不变,并用它在其他地方:

//in verify.php 
$path = BASEPATH . "/auth/pdf/" . $filename . "_print.pdf"; 

//in login.php 
$path = BASEPATH . "/auth/pdf/" . $filename . "_print.pdf"; 
+0

Unfortunaltly,这是不是怎么把文件的情况下”不inclueded我直接调用的login.php。 但是我试过在$ path中指定完整路径,如下所示: '$ path =“/ home/eldblz/www/auth/pdf /”。 $文件名。 “_print.pdf”;' (“父母”仅用于示例目的) 脚本通过file_exists检查呈现文件但已损坏。 无论如何,谢谢你的回复。 – eldblz 2011-05-19 09:22:37

+0

啊,对不起,我错过了你问题的最后2句话......在这种情况下,可能是破坏了来自login.php的数据(一些PHP通知或警告),所以检查你的代码。用记事本或其他东西打开从login.php文件下载并搜索“通知/警告”。或者如果你有比较2个文件的东西(比如总指挥官),你可以比较通过'verify'和'login'脚本下载的文件,并找出问题所在。 – Slava 2011-05-19 09:33:03