-
- /*
- * MySQL 데이터를 CSV로 내보내는 PHP 코드
- *
- * MySQL의 결과를 보냅니다. 다운로드용 CSV 파일로 쿼리
- * UTF-8로 쉽게 변환.
- */
-
- /*
- * 데이터베이스 연결 설정
- */
-
- $conn = mysql_connect('localhost', 'login', 'pass') 또는 die(mysql_error());
- mysql_select_db('database_name', $conn) 또는 die(mysql_error($conn));
- mysql_query("SET NAMES CP1252");
- /*
- * SQL 쿼리 실행
- */
- $query = sprintf('SELECT field1,field2 FROM table_name');
- $result = mysql_query($query, $conn) 또는 die(mysql_error($conn));
- /*
- * 브라우저에 응답 헤더 보내기
- * 다음 헤더는 브라우저에 데이터를 csv 파일로 처리하도록 지시합니다. 호출 내보내기.csv
- */
- header('Content-Type: text/csv; charset=cp1252');
- header('Content-Disposition: attachment;filename=output.csv');
- /*
- * 출력 헤더 행(하나 이상의 행이 존재하는 경우)
- */
-
- $row = mysql_fetch_assoc($result);
- if ($row) {
- echocsv(array_keys($row));
- }
-
- /*
- * 출력 데이터 행(행이 하나 이상 존재하는 경우)
- */ 导takecsv文件
- while ($row) {
- echocsv($row);
- $row = mysql_fetch_assoc($result);
- }
-
- /*
- * 대부분의 CSV 구현과 일관성을 유지하면서 입력 배열을 csv 데이터로 에코합니다.
- * - 필요한 경우 큰따옴표를 엔클로저로 사용합니다.
- * - 큰따옴표를 사용하여 큰따옴표를 이스케이프합니다.
- * - CRLF를 다음과 같이 사용합니다. 줄 구분 기호
- */
-
- function echocsv($fields)
- {
- $separator = '';
- foreach ($fields as $field) {
- if ( preg_match('/\r|\n|,|"/', $field)) {
- $field = '"' . str_replace('"', '""', $field) .'"';
- }
- echo $separator . $field;
- $separator = ',';
- }
- echo "rn";
- }
- ?>
复system代码
二、php匯入與匯出csv檔的類別
php實作csv檔案的匯入和匯出類別。
代碼:
-
-
/**
- * CSV 檔案處理類別
- */
- class Csv{
- public $csv_array;
- public $csv_str; //csv檔案資料
- public function __construct($param_arr, $column){
- $this->csv_array = $param_arr;
- $this->path = $path;
- $this->column = $column;
- }
- /**
- * 導出
- **/
- public function export(){
- if(empty($this->csv_array) | | empty($this->column)){
- return false;
- }
- $param_arr = $this->csv_array;
- unset($this->csv_array);
- $export_str> $export_str = implode(',',$param_arr['nav'])."n";
- unset($param_arr['nav']);
- //組裝資料
- foreach($param_arr as $ k=>$v){
- foreach($v as $k1=>$v1){
- $export_str .= implode(',',$v1)."n";
- }
- }
- //將$export_str導出
- header( "Cache-Control: public" );
- header( "Pragma: public" );
- header("Content-type:application/vndtype:application/vndtype:application/vndtype:application/vndtype:application/vndtype .ms-excel");
- header("Content-Disposition:attachment;filename=txxx.csv");
- header('Content-Type:APPLICATION/OCTET-STREAM');
- ob_start( );
- // $file_str= iconv("utf-8",'gbk',$export_str);
- ob_end_clean();
- echo $export_str;
- }
- /**
- * 導入
- **/
- public function import($path,$column = 3){
- $flag = flase;
- $code = 0;
- $msg = '未處理';
- $code = 0;
- $msg = '未處理';
- $filesize = 1; //1MB
- $maxsize = $filesize * 1024 * 1024;
- $max_column = 1000;
-
- //偵測檔案是否存在
- if($flag = if($flag = == flase){
- if(!file_exists($path)){
- $msg = '檔案不存在';
- $flag = true;
- }
- }
- / /偵測檔案格式
- if($flag === flase){
- $ext = preg_replace("/.*.([^.] )/","$1",$path);
- if($ext != 'csv'){
- $msg = '只能匯入CSV格式檔案';
- $flag = true;
- }
- }
- //偵測檔案大小
- if($flag === flase){
- if(filesize($path)>$maxsize){
- $msg = '匯入的檔案不得超過'.$maxsize.'B檔案';
- $flag = true;
- }
- }
- //讀取檔案
- if($flag == flase){
- $row = 0;
- $handle = fopen($path,'r');
- $dataArray = array();
- while($data = fgetcsv($handle,$max_column,",")){
- $num = count( $data);
- if($num $msg = '檔案不符合規格真實有:'.$num.'列資料';
- $flag = true;
- break;
- }
- if($flag === flase){
- for($i=0;$i if($row == 0) {
- break;
- }
- //組成資料
- $dataArray[$row][$i] = $data[$i];
- }
- }
- $ row ;
- }
- }
- return $dataArray;
- }
- }
- $param_arr = array(
- 'nav'=>array('用戶名','密碼','郵箱'),
- array(0=>array('xiaohai1','123456','xiaohai1@jbxue.com'),
- 1=>array('xiaohai2','213456', 'xiaohai2@jbxue.com'),
- 2=>array('xiaohai3','123456','xiaohai3@jbxue.com')
- ));
- $column = 3;
- $csv = new Csv($param_arr, $column);
- //$csv->export();
- $path = 'C:Documents and SettingsAdministratorTemptxxx.csv';
- $import_arr = $ettingsAdministratorTemptxxx.csv';
$import_arr = $cscsv ->import($path,3); var_dump($import_arr); ?>
| 複製程式碼