2013-04-15 200 views
1

任務:要在谷歌瀏覽器中查看PDF和用戶無法在視圖源中看到原始的PDF路徑/ URL。所以,我決定通過使用會話谷歌瀏覽器的網址

viewer.php

<?php 
session_start(); 
$_SESSION['url']= 'http://research.google.com/archive/bigtable-osdi06.pdf'; 
?> 
<iframe src="http://docs.google.com/viewer?url=http://sitename.com/pdf.php&embedded=true" width="600" height="780" style="border: none;"></iframe> 

pdf.php

<?php 
session_start(); 
header('Content-type: application/pdf'); 
readfile($_SESSION['url']); 
?> 

我pdf.php會話變量使用檢查通過PHP中的PDF網址var_dump,它會正確返回http://research.google.com/archive/bigtable-osdi06.pdf,但不適用於Google查看器。

但是,當我把url直接喲readfile,它的工作原理。 如

readfile('http://research.google.com/archive/bigtable-osdi06.pdf'); 

$a = 'http://research.google.com/archive/bigtable-osdi06.pdf'; 
readfile($a); 

請幫助我,爲什麼會話變量不ReadFile的

對不起工作,我的英語水平

+0

你解決這個問題? –

回答

2

可以說這是錯誤的cookie(會話)上下文。 當您設置$ _SESSION時,您的瀏覽器是客戶端A。然後,你打開的iframe,並要求http://docs.google.com/viewer?由谷歌下載您pdf.php爲客戶B(檢查HTTP服務器日誌,有兩個IP地址),並把結果作爲閱讀器應用程序到瀏覽器,但你沒有爲客戶B設置cookies。
你應該做什麼:
看起來你需要使用rawurlencode()在iframes url中設置會話ID。

viewer.php

<?php 
session_start(); 
$_SESSION['url']= 'http://research.google.com/archive/bigtable-osdi06.pdf'; 
?> 
<iframe src="http://docs.google.com/viewer?url=<?php 
    // set current session_id for feature Google GET request 
    echo rawurlencode("http://sitename.com/pdf.php?PHPSESSID=".session_id()); 
    ?>&embedded=true" width="600" height="780" style="border: none;"></iframe> 

pdf.php

<?php 
session_id($_GET['PHPSESSID']); // we use $_GET, not COOKIE 
session_start(); 
header('Content-type: application/pdf'); 
readfile($_SESSION['url']); 
+0

謝謝...但我很快檢查 –

1

在session_start()本身就是一個包裝用於會話密鑰的特定cookie處理。它可以由session_set_save_handler()定義。總之,它也修改標題。

如果您在php腳本的頂部使用session_start(),並且稍後在腳本中使用header()調用來下載文件,那麼您必須添加某種形式的緩存控件才能使IE正常工作。我使用頭('Cache-Control:public');立即在腳本頂部的代碼之後用session_start()調用來驗證我有一個正確登錄的用戶。這允許header()和fpassthru()調用稍後使用IE 5.5 SP2在腳本中下載文件。

+0

謝謝,但爲什麼會話變量不起作用 –

+0

您需要首先知道會話本身也是cookie的關鍵。所以通過session_start修改cookie頭可能在瀏覽器中有不同的行爲。 –