2013-10-30 51 views
0

我正在使用wordpress cms。我有一個沒有花哨的PHP腳本,它基本上將上傳的圖片的大小調整爲指定的限制,並將調整後的圖片輸出回訪問者的瀏覽器,以便他可以右鍵單擊下載。以下給出的是腳本的相關部分,但如果需要,我會提供完整的代碼。調整圖像大小後強制下載鏈接

ob_start(); 
imagejpeg($new, null, 100); 
echo '<img src="data:image/jpeg;base64,' . base64_encode(ob_get_clean()) . '">'; 
echo '<br><br>RIGHT CLICK AND SAVE IMAGE<br><br>'; 
imagedestroy($new); 

底線是,我想強制下載鏈接調整 圖像,一旦調整完成。


努力和更新:

First update:我目前正在經歷this article on forced-download-linksanother relevant thread on SO的建議。但是我說:「首先要做的事情是......我們需要在PHP中定義我們文件的路徑(以字符串形式)」。問題是,因爲我不希望任何圖像文件保存在我的服務器上,所以imagejpeg()函數的第二個參數設置爲NULL。所以我無法定義到我的文件的路徑。或者我可以嗎?我該怎麼做呢。希望它是清楚而簡明的。一個解決方案將是非常好的,如果不是,請給我很好的入門指導。

Second update:根據以下建議,我取得了一些進展。正如你可以在下面的代碼中看到的,我現在可以保存圖像,但我仍然無法作爲下載提示回顯輸出圖像。請提出更正。

$filename = uniqid(); 
$file = 'uploads/'.$filename.'.jpeg'; 
$final_image = imagejpeg($new, $file, 100); 
$size = filesize($file); 

header("Content-Type: application/force-download; name=\"" . basename($file). "\""); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: $size"); 
header("Content-Disposition: attachment; filename=\"" . basename($file) . "\""); 
header("Expires: 0"); 
header("Cache-Control: no-cache, must-revalidate"); 
header("Pragma: no-cache"); 
readfile($file); 
unlink($file); 

Third Update:發現我可以使用相對路徑,所以我不需要加載的wordpress load.php,相應地改變的代碼。問題依然存在。

第四次更新:嘗試此代碼,建議解決方案在this thread。同樣的結果是,打印出亂碼而不是提供下載鏈接。這令人沮喪,我必須越來越接近:)。

最終更新:有JavaScript解析腳本的輸出,所以我得到所有的亂碼。我現在刪除它一切都沒問題。

回答

1

我認爲一個解決方案是,將圖像保存在服務器與力下載後imagejpeg()和刪除文件,你會是這樣的:

$img = imagejpeg($resource, $file); 
$size = filesize($file); 
header("Content-Type: application/force-download; name=\"" . basename($file). "\""); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: $size"); 
header("Content-Disposition: attachment; filename=\"" . basename($file) . "\""); 
header("Expires: 0"); 
header("Cache-Control: no-cache, must-revalidate"); 
header("Pragma: no-cache"); 
readfile($file); 
unlink($file); //to delete the file that you generated 

其中$文件的文件路徑unlink函數刪除該文件。

您還可以強制直接下載這樣的:

header("Content-Disposition: attachment; filename=\"titleimg\";"); 
    header('Content-Type: image/jpeg'); 
    imagejpeg($im); 
    imagedestroy($im); 

問候,

+0

只是編輯以 – Sidux

+0

代碼的第二塊打印出亂碼,而不是提供一個鏈接添加其他的解決辦法。仍試圖找出第一個。 – gurung

+0

嘗試使用is_directory進行測試,是否是相對於腳本的路徑?提示:使用__DIR__常量來獲取當前腳本方向 – Sidux