2013-04-17 35 views
0

我在PHP/MySQL有一個奇怪的問題。從mysql輸出blob

我已經上傳到一個BLOB一個word文檔。它的成功,如果(如使用SQLYog)我打開並保存BLOB作爲一個文件,它將在Open Writer中完美打開。

然而,我試圖通過PHP輸出數據的那一刻我得到一個損壞的文檔。

我用下面來做輸出:

header('Content-length: '.$file['FileSize']); 
header('Content-Type: '.$file['FileSize']); 
header('Content-Disposition:attachment; filename="'.$file['FileName'].'"'); 
echo $file['Content']; 

任何幫助將是巨大的。

感謝

安東尼

+1

我覺得你的內容類型是錯誤的... – Stony

+0

會這樣不需要爲瀏覽器的插件嗎? – verbumSapienti

+0

@verbumSapienti:只需下載文件就不需要插件,不需要。 – David

回答

2

什麼是你想在這裏做什麼?:

header('Content-Type: '.$file['FileSize']); 

內容類型應指定文件類型(或者,嚴格HTTP而言,響應主體),而不是它的大小。對於Word文檔,我相信內容類型是:

"application/ms-word" 
+0

我正在取得進展。看起來在PHP輸出的開頭添加了額外的空白空間,這些空間在原始文件中不存在或從MySQL保存時不存在。不知道爲什麼和修剪不解決它,所以繼續調查。 – user1924004

+0

@ user1924004:除了問題中顯示的4行外,PHP文件還有更多嗎? 'echo'不會用文件內容替換整個響應,所以PHP文件的其餘部分可能會在某處使用空格字符來破壞響應。腐敗只是來自一些額外的字符,或者是整個二進制響應不正確?也許嘗試除了echo之外的東西?也許''fwrite'? – David

+0

我已經完成了一個echo'hello world',出於某種原因,之前也出現了空格! – user1924004

0
// define results into variables 
$name=$row['task_name']; 
$size=$row['task_size']; 
$type=$row['task_type']; 
$content=$row['task_content']; 

// give our picture the proper headers...otherwise our page will be confused 
header("Content-Disposition: attachment; filename=$name"); 
header("Content-Disposition: filename=$name"); 
header("Content-length: $size"); 
header("Content-type: $type"); 
echo $content;