2011-05-19 111 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