2011-11-11 68 views
5

我使用在wp-admin/side中創建菜單的插件並使用一些數據顯示錶格。我需要生成CSV(它是正確的),並讓用戶自動下載它。我知道,我必須添加頁眉像這些如何在Wordpress中下載導出的csv文件

header('Content-type: application/csv'); 
header('Content-Disposition: attachment; filename="' . $csv_file_name . '"'); 

不過遺憾的是它並不適用於WordPress管理方的工作。 再次 - CSV的產生會是正確的,但它只是顯示一個見下表CSV文件的文本,但不給文件

下面是完整的代碼

if (isset($_REQUEST['export_csv'])) { 
     global $wpdb; 
     $csv_source_array = $wpdb->get_results ($wpdb->prepare(" SELECT name, email, time, text FROM {$table_name} "), ARRAY_N); 
     $csv_file_name = 'nba.rally.'.date(Ymd).'.csv'; 
     $csv_header_array = array("Name", "Email", "Date", "Message");   

      if (isset($csv_source_array)) { 

       header('Content-type: application/csv'); 
       header('Content-Disposition: attachment; filename="' . $csv_file_name . '"'); 

      ob_start(); 
       $f = fopen('php://output', 'w') or show_error("Can't open php://output"); 
       $n = 0; 


        if (isset($csv_header_array)) { 
         if (!fputcsv($f, $csv_header_array, ';')) 
         { 
          echo "Can't write line $n: $line"; 
         } 
        } 

       foreach ($csv_source_array as $line) 
       { 
        $n++; 

        if (!fputcsv($f, $line, ';')) 
        { 
         echo "Can't write line $n: $line"; 
        } 
       } 
       fclose($f) or show_error("Can't close php://output"); 
       $csvStr = ob_get_contents(); 
       ob_end_clean(); 

       echo $csvStr; 
      } 


     } 

感謝提前任何答案。

回答

2

我修復了它。

我已經將該代碼插入插件的頂部。

我認爲,因爲標題應發送在腳本的頭部和加載文檔之前或標籤之後。

注:

的HTTP狀態標題行永遠是第一發送到客戶端,而不管實際的報頭()調用爲所述第一或不是。除非已經發送了HTTP標頭,否則可以隨時用新狀態行調用header()來覆蓋狀態。

+0

你可以給我完整的代碼? – huykon225