2011-08-16 82 views
-1

我一直在爲此搏鬥一段時間。我試圖做到這一點,當用戶點擊鏈接將強制下載。這裏是我到目前爲止的代碼:PHP Force下載幫助

<?php 
function Download() 
{ 
    $fullpath = $_SERVER['DOCUMENT_ROOT']."front.dwg"; //Full path of document 
$filename = "front.dwg"; //Document file nmae 


    $mm_type="application/octet-stream"; 

    header("Cache-Control: public, must-revalidate"); 
    header("Pragma: hack"); 
    header("Content-Type: " . $mm_type); 
    header("Content-Length: " .(string)(filesize($fullpath))); 
    header('Content-Disposition: attachment; filename="'.$filename.'"'); 
    header("Content-Transfer-Encoding: binary\n"); 
} 
?> 

<html> 
<body> 

<a href="#" onclick="<?php Download() ?>">Test</a> 

</body> 
</html> 
+0

嘿,你是怎麼做到這一點,我試過了,它顯示了所有有趣 –

+7

你在這裏已經兩個月了,問49題。請學會正確使用編輯器。 – meagar

+2

@Howdy_McGee,發佈時,工具欄上有一個「代碼」按鈕。只需突出顯示代碼並單擊它。 – Brad

回答

3

你將需要拿出你的功能,並將其保存爲「的download.php」

這時正好有去給它一個鏈接:

<a href="download.php"> 

的download.php應該是這樣的:

$fullpath = $_SERVER['DOCUMENT_ROOT']."front.dwg"; //Full path of document 
$filename = "front.dwg"; //Document file nmae 


$mm_type="application/octet-stream"; 

    header("Cache-Control: public, must-revalidate"); 
    header("Pragma: hack"); 
    header("Content-Type: " . $mm_type); 
    header("Content-Length: " .(string)(filesize($fullpath))); 
    header('Content-Disposition: attachment; filename="'.$filename.'"'); 
    header("Content-Transfer-Encoding: binary\n"); 
+0

雖然 –

+0

@Howdy,你不需要......你可以鏈接到同一頁面,只要檢查是否設置了一個變量,比如'$ _GET [ 'do_download']'。 – Brad

+0

:(我不太明白 –

1

您需要設置爲適當的調用首先是3210。這些已爲我工作:

header('Pragma: public'); // required 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Cache-Control: private', false); 
header("Content-disposition: attachment; filename=\"{$filename}\""); 
header("Content-Type: {$mime}"); // also works with file extension 
header('Content-Transfer-Encoding: binary'); 
header('Content-Length: '.filesize($filename)); 
readfile($filename); 
die(); 
2

PHP不是客戶端功能。你不能說onclick="somePHP"

你需要一個單獨的PHP腳本在那裏你會強迫你下載的,並簡單地鏈接到該腳本。

在該腳本中,您還需要實際的輸出文件的內容。

+2

如果我每次通過解釋客戶端代碼和服務器端代碼之間的差異來解決PHP「問題」,我都會有一個鎳,我會駕駛一輛更好的汽車。 –

+0

這不僅僅是一個回答而是一個評論。 – mowwwalker

+0

@Justin,它不僅僅是PHP。我認爲人們在開始編程時遇到麻煩的最大原因是理解所有圖層是什麼以及如何使用它們以及它們實際上如何相互關聯。在網絡中尤其如此,單個項目可能需要了解8種截然不同的技術。 – Brad

0

你永遠不能強制下載。您可以將窗口位置更改爲下載文件,並提示他們,但如果您可以強制下載,則會出現一些重大安全問題。

+2

我不認爲他試圖強制一個文件到客戶端的硬盤上,他試圖強制下載對話框,而不是在瀏覽器中顯示它。 – Brad

+0

我甚至不能在瀏覽器中顯示這種文件:( –

0

首先,你$fullpath可能不包含所需的數據,因爲你沒有插入文件名前斜槓(「/」)。這是正確的:

$fullpath = $_SERVER['DOCUMENT_ROOT']."/front.dwg"; 

可以使用error_log("Fullpath: $fullpath");echo "Fullpath: $fullpath\n"檢查$fullpath內容。

其次,你需要讓你的代碼的獨立腳本的PHP部分。您將無法使用Javascript嵌入PHP函數調用。所有的PHP都在Javascript運行之前執行,所以您需要一種方法分別調用PHP。

第三,您應該驗證該文件是否存在,並且可以使用file_exists()is_readable()進行讀取。如果PHP報告該文件不存在,則應指定完整路徑。如果它不可讀,您可以更改文件權限以允許您的PHP腳本讀取它。