2010-07-23 36 views
0

我有一個腳本,它將文件上傳到聯機目錄並將文件詳細信息存儲在數據庫中。存儲時的文件被重命名爲數據庫中條目的ID。無論用戶何時請求下載,簡單的SQL語句都會從數據庫中檢索文件詳細信息,從數據庫中讀取文件內容,並提示文件下載。下面是我的代碼:Php下載腳本不能正常工作

$one_file = $FILE_OBJECT->get($_GET['id']); // this is an object which just grabs the file details from the database 


header("Content-type: ".$one_file['type']); // add here more headers for diff. extensions 
header("Content-Disposition: attachment; filename=\"".$one_file["filename"]."\""); // use 'attachment' to force a download 
header("Content-type: application/octet-stream"); 
header("Content-Disposition: filename=\"".$one_file["filename"]."\""); 

readfile(_config('files_path').$_GET['id']);// reading the actual raw file stored in my online directory 

問題是,即時通訊使用測試word文檔及其完美上傳 - 我甚至已經檢查原始文件被手動更改其擴展名,它的上傳完美上傳。問題在於,當使用上面的代碼下載Word文件時,Word文件似乎已損壞或發生了什麼,因爲當我嘗試打開它時,它全是混亂和混亂。發生了什麼?我在我工作過的其他幾個網站上使用了這個代碼片段,它們工作得很好......請幫助!

+0

呃...... ** **,'teh'。但是,作爲一個問題:(1)你能否確認在數據庫中的存儲是否正確完成,即:如果將該內容作爲文件保存在文件系統中,它是否有效? (2)如果我將''../ conf/yoursupersecretpasswordfile''作爲'$ _GET ['id']''會發生什麼? – Wrikken 2010-07-23 20:45:09

+0

當你一直使用「teh」時,這篇文章很難閱讀。火狐瀏覽器和Chrome瀏覽器內置了拼寫檢查器,正確拼寫並不難。如果英語不是您的第一語言,那麼我會建議您使用拼寫檢查器,因爲它會從您的帖子中惡化,並且使其更難以幫助/理解。 (不意味着火焰或任何東西,只是提供一些有用的批評未來的職位) – 2010-07-23 20:45:39

+1

Fixt。它也讓我失望了。 – cHao 2010-07-23 20:48:23

回答

1

看看這有助於:

Webkit and Excel file(PHPexcel)

+0

Thanjs人 - 我仍然不知道爲什麼我的代碼停止工作所有的突然之間...... – Ali 2010-07-25 20:37:30

2

默認情況下,PHP的頭文件函數將替換之前的頭文件,並且名稱相同,所以前兩個頭文件將被第二個頭文件覆蓋。刪除第二個,看看是否有效。

+0

做到了這一點,但沒有幫助..在上面提到的代碼片段中的問題,因爲該文件正在存儲在線目錄罰款 – Ali 2010-07-23 20:55:22

+0

它可能是一個編碼與readfile的問題,嘗試添加'header(「Content-Transfer-Encoding:binary」);'其他文件類型工作嗎?嘗試上傳一個純文本文件 – 2010-07-23 21:44:00

0

我有同樣的問題:我每次下載文件時,它是所謂的「腐敗」。事實證明,我做了一個愚蠢的目錄路徑錯誤,但PHP錯誤被寫入下載的文件。當然,這使得它「腐敗」。

其實我通過閱讀Ian Wetherbee關於用純文本文件測試的評論來解決這個問題。謝謝伊恩!