我已經搜索了相當一段時間,沒有看到可以解決我的問題的東西。我正在一個顯示文件列表的頁面上工作,當OnClick時,用戶將被允許下載該文件。文件路徑存儲在MySQL中以允許下載。
目前我正在使用SQL查詢的while循環來檢索和顯示(回顯)文件。在MySQL使用存儲在MySQL中的文件路徑下載PHP OnClick文件
- LOGID =自動增量ID
- LOGDATE = DateTime值
fileLink存儲在MySQL =文件路徑(例如C:\ WWW \瓦帕\ file.txt的)
while ($row = mysql_fetch_array($result)) { $ID =$row['logID']; $date =$row['logDate']; $file =$row['fileLink']; echo $ID, ' '; echo $date, '<br/>'; }
所以在現在它顯示瞭如下畫面,
1 2014年1月25日9時33分27秒
2 2014-0 1-26 9時37分28秒
3 2014年1月27日9時38分09秒
我想提出這是「回聲$日期」爲超鏈接的日期和時間(我有這樣的煩惱)這將允許用戶點擊下載文件。我有這是文件下載代碼,
<?php
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>
的問題是,當此下載代碼的網頁上,下載框出現在頁面加載時向右走,並提供下載的文件的唯一選項「2014-01-27」,這是SQL while循環期間最後一次檢索到的項目。
我已經讀過下載代碼應該放在另一個.php文件上,這個文件在需要的時候會被調用,但我是PHP新手,並且不知道如何去做。
主要是我的問題是,
- 如何使迴盪項目與onclick事件的超鏈接觸發下載。
- 如何將文件路徑綁定到相應的回顯項目,因爲現在$ file將存儲由於while循環而導致的最後一條記錄的文件路徑。
- 如果以上可行,並且下載代碼位於另一個.php文件中,那麼如何將相應的$ file變量值傳遞給該.php文件才能使該方法正常工作。
在此先感謝您並感謝您的幫助。
嗨大衛,謝謝你的詳細解釋。這真的很有幫助。它確實有效,但是有一個小問題。截至目前的顯示是我上面用超鏈接所說的。當我選擇我的最後一個下載文件「2014-01-27 09:38:09」時,下載彈出窗口完美工作。但是,當我選擇其他2條記錄時,它將加載download.php頁面,文本分別顯示C \:wamp \ www \ SCS \ Logs \ 2014-01-25.txt或26.txt。無論如何解決這個問題?再一次感謝你。 – Jethro
@Jethro:聽起來好像是這些文件實際包含的內容,或者你的代碼沒有正確讀取文件,而只是迴應文件的名稱而不是內容。我不確定是什麼原因導致了這種情況(我的PHP非常生疏),但爲了診斷它,您可能需要在'download.php'中放入一些日誌語句來獲取一些運行時調試信息。基本上要確保每個值都是你期望的值。 – David
嗨大衛,道歉,請忽略我的第一條評論。它正在工作完美,因爲我剛剛創建了另一個日誌文件進行測試。我認爲前兩個日誌文件下載發生的問題是由於我在MySQL中手動輸入了文件路徑,而這些文件路徑沒有正確地轉義並讀取目錄斜槓「\」。非常感謝你的幫助! – Jethro