-
- /*
- * 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));
- /*
- * 応答ヘッダーをブラウザーに送信します
- * 次のヘッダーは、データを export.csv という CSV ファイルとして扱うようにブラウザーに指示します
- */
- header('Content-Type: text/csv; charset=cp1252');
- header('Content-Disposition:attachment;filename=output.csv');
- /*
- * 出力ヘッダー行 (少なくとも場合) 1 行が存在します)
- */
-
- $row = mysql_fetch_assoc($result);
- if ($row) {
- echocsv(array_keys($row));
- }
-
- /*
- * データ行を出力します (少なくとも 1 行が存在する場合)
- */ 导出力csv文件
- 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";
- }
- ?>
复制代码
2. CSV ファイルをインポートおよびエクスポートするための PHP クラス
php は、csv ファイルのインポートおよびエクスポート クラスを実装します。
コード:
/**- *CSVファイル処理クラス
- */
- class Csv{
- public $csv_array; //csv 配列データ
- public $csv_str; 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 = 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/vnd.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 = '未処理';
- $filesize = 1; //1MB
- $maxsize = $filesize * 1024 * 1024;
- $max_column = 1000;
-
- //ファイルが存在するかどうかを検出します
- 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 fileを超えてはなりません';
- $flag = true;
- }
- }
- //ファイルを読み込みます
- if($flag == flase ){
- $row = 0;
- $handle = fopen($path,'r');
- $dataArray = array();
- while($data = fgetcsv($handle,$max_column,",")){
- $ num = count($data);
- if($num < $column){
- $msg = 'ファイルは仕様を満たしておらず、実際には '.$num.' 列データが含まれています';
- $flag = true;
- ブレーク
- }
- if($flag === flase){
- for($i=0;$i<3;$i++){
- if($row == 0){
- ブレーク;
- }
- //データを構築します
- $dataArray[$row][$i] = $data[$i];
- }
- }
- $row++;
- }
- }
- return $dataArray;
- }
- }
- $param_arr = array(
- 'nav' =>array('username','password','email'),
- array(0=>array('xiaohai1','123456','xiaohai1@jbxue.com'),
- 1=> 配列('xiaohai2','213456','xiaohai2@jbxue.com'),
- 2=>配列('xiaohai3','123456','xiaohai3@jbxue.com')
- )) ;
- $column = 3;
- $csv = 新しい Csv($param_arr, $column);
- //$csv->export();
- $path = 'C:Documents and SettingsAdministratorTemptxxx.csv';
- $import_arr = $csv-> ;import($path,3);
- var_dump($import_arr);
- ?>
-
-
- コードをコピー
|