2014-10-27 68 views
-2

我正在努力圍繞這一點纏繞我的頭。無法修改標題信息 - 下載文件

我在頁面上創建兩個表單來爲設備生成配置文件,我們使用兩種不同設備中的每一種設備的一種形式。表單工作正常,並正確提交值,但我需要該文件來啓動下載。使用一種形式,我已經能夠實現這一點,但有兩種形式,我得到關於標題信息的錯誤。

這裏是我的文件的頭部

<html> 
<head> 
    <link rel="stylesheet" type="text/css" href="screen.css" /> 
    <?php 
     include('header.php'); 
     include('config/wan.php'); 
     include('config/wan-voip.php'); 
     include('config/pppoe.php'); 
     include('config/pppoe-voip.php'); 
     include('config/dlink.php'); 
    ?> 
</head> 
<body> 

這對後面的一個標準的HTML表單,然後這裏是我的代碼來驗證輸入和採取相應的行動:

if(isset($_POST['submit'])) 
{ 

    if(!empty($_POST['type']) && isset($_POST['router']) && $_POST['router'] == 'netgear') 
    { 
     if($_POST['type'] == 'pppoe' && (empty($_POST['username']) || empty($_POST['password']))) 
     { 
      echo 'Please fill in the username and password'; 
      exit; 
     } 



     if(empty($_POST['ssid']) || empty($_POST['pass'])) 
     { 
      echo 'Please provide the SSID and Wireless Key'; 
      exit; 
     } 

     if(($_POST['type'] == 'wan-voip' || $_POST['type'] == 'pppoe-voip') && (empty($_POST['ext']) || empty($_POST['extpass']))) 
     { 
      echo 'Please provide the Extension Information'; 
      exit; 
     } 
    } 
    elseif(isset($_POST['router']) && $_POST['router'] == 'dlink') 
    { 
     if(empty($_POST['ssid']) || empty($_POST['pass'])) 
     { 
      echo 'Please provide the SSID and Wireless Key'; 
      exit; 
     } 
    } 


    ob_end_clean(); 

    if($_POST['router'] == 'netgear') 
    { 
     header("Content-type: text/plain"); 
     header("Content-Disposition: attachment; filename=".date('d-m-Y')."-".$_POST['type'].".ini"); 

     $file = str_replace('-', '', $_POST['type']); 
     echo $$file; 
    } 
    elseif($_POST['router'] == 'dlink') 
    { 
     header("Content-type: text/plain"); 
     header("Content-Disposition: attachment; filename=".date('d-m-Y')."-dlink.cfg"); 
     echo $dlink; 
    } 



} 

可能有人請提出如何解決這個問題。我讀過一些其他相關的景點,並嘗試移動腳本的各個部分,嘗試一些建議,但我似乎一直在打磚牆。

回答

2

在http協議中,標題總是應該在body之前發送。

這就是爲什麼你收到此錯誤,您正在使用

header("Content-type: text/plain"); 

你已經輸出了一些文本之後。

如果你想使用header方法,你必須在任何'回聲'或任何文本輸出之前做到這一點