2013-04-09 67 views
0

我试图使用数据库中的值生成一个CSV文件并强制下载它。它工作正常,除了文件正在从服务器获取(不相关的)错误消息并将它们包括在CSV文件中。我如何防止这种情况发生?如何过滤进入CSV文件的数据?

这里是我的功能:

public function export($coupons_ids) { 
     $coupons_ids = explode(',', (urldecode($coupons_ids))); 

     $result = $this->cart_coupons->get_where_in('id',array_filter($coupons_ids, 'strlen')); 

     header('Content-Type: text/csv; charset=utf-8'); 
     header('Content-Disposition: attachment; filename=coupons.csv'); 

     $output = fopen('php://output', 'w'); 

     fputcsv($output, array('id', 'name', 'start_date', 'end_date', 'promo', 'usage_limit')); 

     foreach ($result as $row) 
     { 
      $id = $row->id; 
      $name = $row->name; 
      $start_date = $row->start_date; 
      $end_date = $row->end_date; 
      $usage_limit = $row->usage_limit; 

      $active = ''; 
      switch($row->active) 
      { 
      case 0: 
       $active = 'YES'; 
       break; 
      case 1: 
       $active = 'NO'; 
       break; 
      } 

      $promo = '$0'; 
      switch($row->promo_type) 
      { 
      case 0: 
       $promo = '$' . $row->promo_value; 
       break; 
      case 1: 
       $promo = $row->promo_value . '%'; 
       break; 
      } 

      $data = array('id' => $id, 'name' => $name, 'start_date' => $start_date, 'end_date' => $end_date, 'promo' => $promo, 'usage_limit' => $usage_limit); 
      fputcsv($output, $data); 
     } 

     fclose($output); 

    } 

输出是:

<br /> 
<b>Strict Standards</b>: Only variables should be passed by reference in <b>D:\xampp\htdocs\----\-----.php</b> on line <b>245</b><br /> 
id,name,start_date,end_date,promo,usage_limit 
3,Test3,"2013-03-12 00:00:00","2013-03-20 00:00:00",$500,10 
4,Test4,"2013-03-17 00:00:00","2013-04-25 00:00:00",25%,50 
5,Test5,"2013-03-20 00:00:00","2013-03-25 00:00:00",$40,1000 
6,Test6,"2013-03-12 00:00:00","2013-03-20 00:00:00",$50,100 
7,Test7,"2013-03-15 00:00:00","2013-03-28 00:00:00",10%,150 
81,CC00016,"2013-04-20 00:00:00","2013-04-27 00:00:00",$100,10 
80,CC00015,"2013-04-16 00:00:00","2013-04-23 00:00:00",$100,1 
79,CC00014,"2013-04-16 00:00:00","2013-04-23 00:00:00",$100,1 
78,CC00013,"2013-04-16 00:00:00","2013-04-23 00:00:00",$100,1 
76,CC00011,"2013-04-16 00:00:00","2013-04-23 00:00:00",$100,1 
77,CC00012,"2013-04-16 00:00:00","2013-04-23 00:00:00",$100,1 

我知道这个错误是,它是完全无关的和无关的代码的功能。任何帮助表示赞赏。

+2

明显的是修复导致警告的代码。快速/肮脏的解决方案是关闭display_errors,以便这些警告从不首先得到输出。稍微不太明显:fopen()在真实文件上,然后在生成csv后读取文件()该文件。 PHP不会将警告写入该句柄。 – 2013-04-09 19:02:23

回答

0

error_reporting(0);放在脚本的开头,以便快速解决问题

+1

解决方案真的很脏。每个人都必须把它放在他们的脚本中,以阻止信息泄露。但真正的解决方案更多。但是+1 – 2013-04-09 19:08:13

+0

-1试图掩盖错误而不是修复它 – 2013-04-09 19:17:57

相关问题