2011-10-22 50 views
2

我試圖建立一個下載頁面,其獲取文件ID和從數據庫下載代碼(ReadFile的)給了我一個空或損壞的文件

它還挺工作中獲取文件信息生成下載鏈接!出於某種原因,我從這個頁面獲得一個文件,但它不是一個真正的文件! 例如,當我的圖片ID發送到這個頁面的圖片將被下載,但它不會打開,它的大小真的比什麼真的是

這裏小是我的代碼

<?php 
require_once('class/comon.php'); 
require_once('class/db.php'); 

    $file_id = isset($_GET['id']) && (int)$_GET['id'] != 0 ? (int)$_GET['id'] : exit; 
    $file = comon::get_fileinfo('files' , 'id' , $file_id); 
    if(!$file) exit; 

    foreach($file as $file){ 
    $location = $file['location']; 
    $filename = $file['file_name']; 
    } 

    $ext = end(explode('.' , $filename)); 

header('Pragma: public'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Cache-Control: private', false); 
header('Content-Type: application/'.$ext); 
header('Content-Disposition: attachment; filename="'. basename($filename) . '";'); 
header('Content-Transfer-Encoding: binary'); 
header('Content-Length: ' . filesize('http://localhost/Lancer/attach/'.$location.'/'.$filename)); 
readfile('http://localhost/Lancer/attach/'.$location.'/'.$filename); 


?> 

我已經印刷頁面上的文件路徑

echo 'localhost/Lancer/attach/'.$location.'/'.$filename; 

,然後我把輸出的URL,並將其顯示圖像,使不能是問題

回答

3

這廁所ks喜歡你要麼readfile('http://localhost/....')或文件的絕對本地文件路徑。

要使用URL字符串,您需要提供協議到readfile。

+0

thanx我在localhost之前添加了'http://',現在我得到一個0大小的空文件!仍然當我打印出路徑並將輸出放在url上時,它顯示了picure – max

+1

@max,在發送Content-Length頭時,還需要更正'filesize()'調用中的路徑。 – jasonbar

+0

thanx實際上我發現我應該只使用文件大小的相對路徑來工作,它現在正在工作,但出於某種原因它不會顯示圖片,它會在文本文件中添加一些奇怪的字符,但zip文件仍然可以! – max