Загрузите csv из codeigniter mysql

Я думаю, что мне не хватает чего-то очевидного. Я пытаюсь экспортировать набор данных из MySQL-запроса в CSV, не распечатывая его в браузере.

Вот мой код:

<?php $this->load->helper('download'); $list = $stories; $fp = fopen('php://output', 'w'); foreach ($list as $fields) { fputcsv($fp, $fields); } $data = file_get_contents('php://output'); // Read the file's contents $name = 'data.csv'; force_download($name, $data); fclose($fp); ?> 

$stories – это массив, созданный из запроса MySQL.

В настоящее время все печатает в браузере без ошибок и без загрузки, но я хотел бы заставить загрузить CSV. Как я могу это сделать?


окончательный рабочий код:

  $this->load->helper('download'); $list = $stories; $fp = fopen('php://output', 'w'); foreach ($list as $fields) { fputcsv($fp, $fields); } $data = file_get_contents('php://output'); $name = 'data.csv'; // Build the headers to push out the file properly. header('Pragma: public'); // required header('Expires: 0'); // no cache header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: private',false); header('Content-Disposition: attachment; filename="'.basename($name).'"'); // Add the file name header('Content-Transfer-Encoding: binary'); header('Connection: close'); exit(); force_download($name, $data); fclose($fp); 

Я не могу определить, какие заголовки заданы из наборов force_download() Codeigniter force_download() . Если это действительно произойдет на экране, я бы заподозрил, что необходимые заголовки отсутствуют. Вы можете добавить приведенные ниже заголовки к своему коду, чтобы установить правильные заголовки dowload csv (управление кешем будет обеспечивать свежую загрузку данных каждый раз:

 header('Content-Description: File Transfer'); header('Content-Type: application/csv'); header('Content-Disposition: attachment; filename='.$name); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); 

Вы можете вызвать модель CSV() с вашего контроллера, как

 $this->load->model('Users_model'); $this->Users_model->csv(); 

и в модели

 function csv() { $this->load->dbutil(); $this->load->helper('file'); $this->load->helper('download'); $query = $this->db->query("SELECT * FROM Users"); $delimiter = ","; $newline = "\r\n"; $data = $this->dbutil->csv_from_result($query, $delimiter, $newline); force_download('CSV_Report.csv', $data); } 

Ваш файл начнет загрузку

Если вы пытаетесь генерировать отчеты в формате csv, то с помощью codeigniter это будет довольно легко.

Поместите этот код в свой контроллер

 function get_report() { $this->load->model('Main_Model'); $this->load->dbutil(); $this->load->helper('file'); /* get the object */ $report = $this->Main_Model->print_report(); $delimiter = ","; $newline = "\r\n"; $new_report = $this->dbutil->csv_from_result($report, $delimiter, $newline); write_file( 'application/third_party/file.csv', $new_report); $this->load->view('report_success.php'); } 

Поместите этот код в модель

 public function print_report() { return $query = $this->db->query("SELECT * FROM Table_name"); } 

report_success.php – это просто успешное уведомление.

Ваш отчет экспортируется. спасибо


Наконец, создается «файл.csv». его в основном хранится на физическом хранении. В CodeIgniter/application/third-party/file.csv


оно работает. это поможет вам.

Здесь мы получаем образец результата из MySQL и хотим экспортировать его в CSV-файл.

Шаг 1. Получите данные MySql в паре значений ключа.

 $data = array( '0' => array('Name'=> 'Parvez', 'Status' =>'complete', 'Priority'=>'Low', 'Salary'=>'001'), '1' => array('Name'=> 'Alam', 'Status' =>'inprogress', 'Priority'=>'Low', 'Salary'=>'111'), '2' => array('Name'=> 'Sunnay', 'Status' =>'hold', 'Priority'=>'Low', 'Salary'=>'333'), '3' => array('Name'=> 'Amir', 'Status' =>'pending', 'Priority'=>'Low', 'Salary'=>'444'), '4' => array('Name'=> 'Amir1', 'Status' =>'pending', 'Priority'=>'Low', 'Salary'=>'777'), '5' => array('Name'=> 'Amir2', 'Status' =>'pending', 'Priority'=>'Low', 'Salary'=>'777') ); 

Шаг 2: PHP-код, чтобы получить тип параметров и заставить браузер загружать файл вместо отображения.

 if(isset($_POST["ExportType"])) 

{

 switch($_POST["ExportType"]) { case "export-to-csv" : // Submission from $filename = $_POST["ExportType"] . ".csv"; header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-type: text/csv"); header("Content-Disposition: attachment; filename=\"$filename\""); ExportCSVFile($data); //$_POST["ExportType"] = ''; exit(); default : die("Unknown action : ".$_POST["action"]); break; } 

}

 function ExportCSVFile($records) { // create a file pointer connected to the output stream $fh = fopen( 'php://output', 'w' ); $heading = false; if(!empty($records)) foreach($records as $row) { if(!$heading) { // output the column headings fputcsv($fh, array_keys($row)); $heading = true; } // loop over the rows, outputting them fputcsv($fh, array_values($row)); } fclose($fh); } 

Шаг 3: Определите html-макет для отображения данных в таблице и кнопке, чтобы запустить действие export-to-csv.

 <div><a href="javascript:void(0)" id="export-to-csv">Export to csv</a></div> <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" id="export-form"> <input type="hidden" value='' id='hidden-type' name='ExportType'/> </form> <table id="" class="table table-striped table-bordered"> <tr> <th>Name</th> <th>Status</th> <th>Priority</th> <th>Salary</th> </tr> <tbody> <?php foreach($data as $row):?> <tr> <td><?php echo $row ['Name']?></td> <td><?php echo $row ['Status']?></td> <td><?php echo $row ['Priority']?></td> <td><?php echo $row ['Salary']?></td> </tr> <?php endforeach; ?> </tbody> </table> 

Шаг 3: Теперь мы будем использовать код jQuery для получения события click.

  <script type="text/javascript"> $(document).ready(function() { jQuery('#export-to-csv').bind("click", function() { var target = $(this).attr('id'); switch(target) { case 'export-to-csv' : $('#hidden-type').val(target); //alert($('#hidden-type').val()); $('#export-form').submit(); $('#hidden-type').val(''); break } }); }); </script> 

я использую это и его работу

  header('Content-Type: text/csv; charset=utf-8'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header("Content-Disposition: attachment; filename=backup" . date('ym-d') . ".csv"); header('Last-Modified: ' . date('DM j G:i:s T Y')); $outss = fopen("php://output", "w"); $this->db->order_by('ID', 'DESC'); $query = $this->db->get('urls'); foreach ($query->result_array() as $rows) { fputcsv($outss, $rows); } fclose($outss); return;