2013-04-29 136 views
0

我有一個名爲generate.php的PHP文件,它根據我設置的一些參數生成PNG電子郵件。可以顯示圖像,例如使用該圖像將返回「myString」文本的圖像。通過PHP下載圖片

話,我想補充一個鏈接,允許用戶下載圖片:

我創建了一個文件的download.php用下面的代碼:

header('Content-disposition: attachment; filename=string.png'); 
header('Content-type: image/png'); 
readfile('generatePicture.php?string=' . $_REQUEST["string"]); 

但是,當我下載PNG文件,我似乎無法下載。有什麼建議麼?

+0

你可以只包含generatePicture.php來調用它嗎? – juuga 2013-04-29 19:49:52

+0

我該怎麼做? – MrD 2013-04-29 19:53:49

+0

這是使用'readfile()'的問題,因爲你的腳本試圖直接打開一個文件。您將需要向該位置發出HTTP請求並輸出響應。 – 2013-04-29 19:55:06

回答

-2

會話鎖定。如果您有兩個腳本使用session_start(),則第一個腳本將打開並鎖定會話的緩存,第二個腳本必須等待第一個腳本才能打開緩存。

如果您有一個長時間運行的腳本,您不想獨佔用戶的會話,那麼請不要在該腳本中調用session_start(),或在完成會話數據後調用session_write_close(),但在您之前開始長時間運行。

要麼,要麼使用兩個不同的瀏覽器打開兩個單獨的會話。

+0

...但我從來沒有呼籲session_start() – MrD 2013-04-29 19:53:15

-1

我一直在使用這個適中的成功多種文件類型。您需要從文件信息中提取的主要內容是文件類型,文件名和文件大小。

header("Content-Description: PHP Generated Data"); 
    header("Content-type:".$type); 
    header("Content-Disposition: Attachment; Filename=".$name); 
    header("Content-length:".$size); 
    echo $data; 

這可能會給你一些不同的嘗試。

+0

這是'echo $ data'部分是麻煩。 OP需要從HTTP源讀取數據並輸出。 – 2013-04-29 19:55:46

0

當你讀取一個PHP文件時,它的源代碼就會顯示出來。下面我會告訴你我解決這個問題的方法。

假設generatePicture.php樣子:

<?php 
$im = imagecreatetruecolor($w, $h); 
// work with the picture 
header('Content-type: image/png'); 
imagepng($im); 
?> 

...它可以與download.php這樣集成:

<?php 
$im = imagecreatetruecolor($w, $h); 
// work with the picture 

if(isset($_GET['download'])) 
    header('Content-disposition: attachment; filename=string.png'); 

header('Content-type: image/png'); 
imagepng($im); 
?> 

,而不是鏈接到download.php?string=loremipsum,鏈接到generatePicture.php?string=loremipsum&download=1

現在希望它有助於。