2012-10-08 98 views
0

我在一個從根目錄向上一級的目錄中有ZIP文件(以防止盜鏈等)。下面是代碼:在0字節處的PHP下載

<?php 
    $filename = $_GET['id']; 
    if(!$filename){ 
     header("Location: index.html"); 
    } else { 
     function send_download($filename){ 
     $file_path = '../../../../downloads/' . $filename . '.zip'; 
     [email protected]($file_path); 
     header("Content-Type: application/x-zip-compressed"); 
     header("Content-disposition: attachment; filename=$filename"); 
     header("Content-Length: $file_size"); 
     readfile($file_path); 
     exit; 
    } 
    send_download($filename); 
    } 
    ?> 

所有的ZIP文件是罰款,但使用這種方法上的一個標籤會導致下載到的文件大小爲0字節! ?!:(

任何想法,爲什麼

非常感謝

+0

您找不到路徑或文件名。 – bfavaretto

+3

爲了測試起見,請在測試時使用文件大小($ file_path)中的文件的完整路徑和GET RID OF HORRIBLE @! :) – Alfabravo

+0

你也應該不聲明函數爲'IF-THEN-else'聲明 – Touki

回答

0

你可以嘗試改變Content-type以下幾點:

Content-type: application/x-zip; 

而在此之前,檢查文件是否存在。

<?php 
    $filename = $_GET['id']; 
    if(!$filename){ 
     header("Location: index.html"); 
    } else{ 
    function send_download($filename){ 
    $file_path = '../../../../downloads/' . $filename . '.zip'; 
    if (file_exists($file_path)) 
    { 
    [email protected]($file_path); 
    header("Content-Type: application/x-zip-compressed"); 
    header("Content-disposition: attachment; filename=$filename"); 
    header("Content-Length: $file_size"); 
    readfile($file_path); 
    exit; 
    } 
    send_download($filename); 
    } 
    else 
    die("Error 404!"); 
    } 
?> 
+1

$ filename將不包含您正在執行的操作的必要路徑。它需要是'file_exists($ file_path)'。 –

+0

@MarcB我已更新。 :) –

+0

感謝傢伙們,仍然沒有運氣,我害怕:(任何進一步的想法? – HedKandiMan

0
  1. header(「Location:http://www.fqdn.tld/file.ext」);

  2. 基於_GET [「id」]爲> 0且不爲空,您創建了一個已被直接使用的函數,因此您不需要添加更多行代碼。

  3. 我看到您已經添加,因爲人們先前評價的「@」符號,但是,你開始修復這個問題的唯一方法是:

    • 刪除@符號作爲你永遠不應該使用它,非常糟糕的做法,你應該滿足你的代碼中的所有異常,它使一個非常好的程序員。 (PHP腳本)

    • error_reporting(E_ALL);

    • 廣場B點)在它自己的路線,而是< PHP之後 - 所以我們可以看到錯誤的完整列表。

  4. 你的代碼是正確的,你有問題的權限,確保Apache在你的「文件」版本庫訪問,您可以檢查該文件是存在的事實表明輕微的權限和文件存在,0字節被返回的地方表明閱讀權限在Apache級別被拒絕。

+0

謝謝理查德。我如何更改權限?我使用共享主機,所以這可能是一個問題。 – HedKandiMan

+0

如果你使用的是FTP程序,通常通過右鍵單擊命令來支持它,然後755就可以找到。但是,這可能是問題存在的地方。我建議把你的文件放在你的根目錄下,但是一個misc子文件夾的名字,例如:把這些文件稱爲/g4445AF/fileid.zip –

+0

感謝Richard,對於所有的遞歸子目錄,權限已經設置爲755 ... – HedKandiMan

0

右鍵,有點谷歌搜索和一些鮮血,汗水和淚水之後,我終於找到了解決辦法!

<?php 
    $filename = $_GET['id']; 
    header('Content-type: application/zip'); 
    header("Content-Disposition: attachment; filename=" . $filename); 
    header("Expires: 0"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    readfile('../../downloads/' . $filename . ".zip"); 
    exit; 
?> 

非常感謝所有的人對此有所瞭解!

+0

測試一下:http://artists.platform-a.org.uk/axm – HedKandiMan

0

這裏是與文件大小的代碼:

<?php 
    $filename = $_GET['id']; 
    $file = "../../downloads/" . $filename . ".zip"; 
    header('Content-type: application/zip'); 
    header("Content-Disposition: attachment; filename=" . $file); 
    header("Expires: 0"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Content-length: " . filesize($file)); 
    readfile($file); 
    //echo filesize($file); 
    exit; 
?> 
0

只有一個錯誤,我們都在下面做檢查。

readfile($ file); // $文件應該是相對不絕對的。而已。

感謝,

Anirudh蘇德。