2010-06-21 98 views
1

我編寫波紋管我自己的代碼,我得到自動對焦*,我越來越厭倦這種每次荷蘭國際集團內部服務器錯誤,請幫忙:PHP頭,內部服務器錯誤

<? 
    function doer($str) 
    { 
     $d = base64_decode($str); 
     $a = explode('<||>',$d); 
     $v =array(
      'path' => $a[0], 
      'size' => $a[1], 
      'type' =>$a[2] 
     ); 
     return $v; 
    } 
    ?> 
    <? 
        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT\n"); 
        header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
        $a= doer($_GET['d']); 
        $type = $a['type']; 
        header("Content-type: application/".$type.";\n"); //or yours? 
        header("Content-Transfer-Encoding: binary"); 
        $filename = $a['path']; 
        $len = $a['size']; 
        header("Content-Length: $len;\n"); 
        $outname="downfile.".$type; 
        header("Content-Disposition: attachment; filename=\"$outname\";\n\n"); 
        $filename = 'http://example.com/tst/'.$a['path']; 
        readfile($filename); 
    ?> 

更多info: 此腳本應放在(http://example.com/tst/)上,並且所有文件都存儲在(http://example.com/tst/downloads)中。還沒有.htaccess文件

回答

2

有一個空格...

?> 
<? 

記住header()函數發送任何實際輸出之前必須調用,無論是普通的HTML標記,空行中文件或來自PHP。使用include()或require()函數或其他文件訪問函數讀取代碼,並在調用header()之前輸出空格或空行是非常常見的錯誤。使用單個PHP/HTML文件時存在同樣的問題。 1

+0

kaveh塔赫,注意回答Marc B!這是安全性的失敗...用戶可以獲取您的服務器或應用程序的信息 – 2010-06-23 03:41:03

1

是否有任何理由您使用file_get_contents()與URL,指向腳本本身運行的同一個服務器?這會導致關閉第二個HTTP請求,並且如果URL指向受密碼保護的資源(或需要有效會話的URL),則file_get_contents()調用將無法處理該請求。

服務器的錯誤日誌中有什麼壞/無效標頭是什麼?您是否嘗試將生成的標題字符串保存到文件以確保它們正確生成?