2012-02-15 143 views
4

我從原始二進制數據創建一個PDF文件,它的工作完美,但由於我在PHP文件中定義的標題,它會提示用戶「保存」文件或「打開」 。有沒有什麼辦法可以將文件保存在本地服務器http://localhost/pdf將pdf保存到本地服務器

下面是我在我的網頁

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header("Content-Type: application/pdf"); 
header("Content-Disposition: attachment; filename=$filename"); 
header("Content-Transfer-Encoding: binary"); 

回答

7

定義如果您想將文件保存在服務器上,而不是讓訪問者下載它的頭,你不需要標題。標題是告訴客戶你要發送給他們的信息,在這種情況下什麼都沒有(儘管你可能會顯示一個鏈接到你新創建的PDF的頁面)。

因此,只需使用諸如file_put_contents之類的函數來在本地存儲文件,最終讓您的Web服務器處理傳遞HTTP頭。

// Let's say you have a function `generate_pdf()` which creates the PDF, 
// and a variable $pdf_data where the file contents are stored upon creation 
$pdf_data = generate_pdf(); 

// And a path where the file will be created 
$path = '/path/to/your/www/root/public_html/newly_created_file.pdf'; 

// Then just save it like this 
file_put_contents($path, $pdf_data); 

// Proceed in whatever way suitable, giving the user feedback if needed 
// Eg. providing a download link to http://localhost/newly_created_file.pdf 
+0

where function generate_pdf()? – 2015-06-05 04:14:04

+0

@skjulikaka:由於問題不是關於使用PHP創建PDF數據,而是關於如何保存超出範圍的數據。我的代碼示例中的第一行還明確指出「***讓我們說**你有一個'generate_pdf()'函數來創建PDF *」。但我相信你可以通過[搜索]找到合適的答案(http://stackoverflow.com/search?q=generate+%5Bpdf%5D+using+%5Bphp%5D)「使用[標籤:pdf]生成[標籤:pdf]標籤:PHP]「或沿着這些線。 – Simon 2015-06-05 07:20:10

+0

是的,我遇到了很多''生成php內容到pdf'庫,但它仍然不能接受,因爲我的語言是不理解與pdf :(,,我現在瘋狂(); – 2015-06-05 09:35:28

0

您可以使用輸出控制功能。將ob_start()放置在腳本的開頭。最後使用ob_get_contents()並將內容保存到本地文件。

之後,您可以使用ob_end_clean()或ob_end_flush(),具體取決於是否要將PDF輸出到瀏覽器,或者您將用戶重定向到其他頁面。如果使用ob_end_flush(),請確保在刷新數據之前設置標題。

+0

如果你已經在內存中的PDF數據,wouldn輸出緩衝有點像打印一個文件只是爲了再次掃描它?即使你想讓它保存到磁盤,同時讓用戶下載它,難道你不能保存它,2。發送標題,3.打印PDF數據? – Simon 2012-02-15 15:33:24

+0

這取決於你使用哪個庫來創建PDF文件,有些庫只能直接輸出到瀏覽器,所以你不能「保存」。 – 2012-02-17 19:42:24

+0

啊,我明白了。 這就說得通了。 – Simon 2012-02-18 10:42:02

相關問題