Maison  >  Article  >  développement back-end  >  [Avancement technique] Comment importer et exporter des fichiers CSV avec PHP

[Avancement technique] Comment importer et exporter des fichiers CSV avec PHP

黄舟
黄舟original
2017-02-07 09:35:051600parcourir

Nous préparons d'abord la table de données MySQL. Supposons que le projet ait une table student qui enregistre les informations sur l'étudiant et qu'elle ait l'identifiant, le nom, le sexe, l'âge pour enregistrer respectivement le nom, le sexe, l'âge et d'autres informations de l'étudiant.

CREATE TABLE `student` ( 
  `id` int(11) NOT NULL auto_increment, 
  `name` varchar(50) NOT NULL, 
  `sex` varchar(10) NOT NULL, 
  `age` smallint(3) NOT NULL default '0', 
  PRIMARY KEY  (`id`) 
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

Nous avons également besoin d'une page html interactive pour placer le formulaire d'importation et le bouton d'exportation.

<form id="addform" action="do.php?action=import" method="post" enctype="multipart/form-data"> 
    <p>请选择要导入的CSV文件:<br/><input type="file" name="file"> <input type="submit" 
    class="btn" value="导入CSV"> 
    <input type="button" class="btn" value="导出CSV" onclick="window.location.href=&#39;do.php? 
    action=export&#39;"></p> 
</form>

Après avoir sélectionné le fichier csv local, cliquez sur Importer et soumettez-le à do.php?action=import pour traitement, puis cliquez sur le bouton Exporter pour demander l'adresse do.php?action=export pour les données. traitement d'exportation.

Importer CSV

do.php doit gérer les processus d'importation et d'exportation séparément en fonction des paramètres obtenus. La structure PHP est la suivante :

include_once ("connect.php"); //连接数据库 
 
$action = $_GET[&#39;action&#39;]; 
if ($action == &#39;import&#39;) { //导入CSV 
   //导入处理 
} elseif ($action==&#39;export&#39;) { //导出CSV 
   //导出处理 
}

Importer CSV. flux de traitement : Calibrage Vérifier la légalité du fichier csv (ignoré dans cet article) -> Ouvrir la lecture et analyser les champs du fichier csv

-> -> Ajouter au tableau de données par lots ->

if ($action == &#39;import&#39;) { //导入CSV 
    $filename = $_FILES[&#39;file&#39;][&#39;tmp_name&#39;]; 
    if (empty ($filename)) { 
        echo &#39;请选择要导入的CSV文件!&#39;; 
        exit; 
    } 
    $handle = fopen($filename, &#39;r&#39;); 
    $result = input_csv($handle); //解析csv 
    $len_result = count($result); 
    if($len_result==0){ 
        echo &#39;没有任何数据!&#39;; 
        exit; 
    } 
    for ($i = 1; $i < $len_result; $i++) { //循环获取各字段值 
        $name = iconv(&#39;gb2312&#39;, &#39;utf-8&#39;, $result[$i][0]); //中文转码 
        $sex = iconv(&#39;gb2312&#39;, &#39;utf-8&#39;, $result[$i][1]); 
        $age = $result[$i][2]; 
        $data_values .= "(&#39;$name&#39;,&#39;$sex&#39;,&#39;$age&#39;),"; 
    } 
    $data_values = substr($data_values,0,-1); //去掉最后一个逗号 
    fclose($handle); //关闭指针 
    $query = mysql_query("insert into student (name,sex,age) values $data_values");//批量插入数据表中 
    if($query){ 
        echo &#39;导入成功!&#39;; 
    }else{ 
        echo &#39;导入失败!&#39;; 
    } 
}

Notez que la propre fonction fgetcsv de PHP peut facilement gérer le csv. Utilisez cette fonction pour lire une ligne à partir du pointeur de fichier et analyser le champ CSV. La fonction ci-dessous analyse les champs du fichier csv et les renvoie sous forme de tableau.

function input_csv($handle) { 
    $out = array (); 
    $n = 0; 
    while ($data = fgetcsv($handle, 10000)) { 
        $num = count($data); 
        for ($i = 0; $i < $num; $i++) { 
            $out[$n][$i] = $data[$i]; 
        } 
        $n++; 
    } 
    return $out; 
}

De plus, lors de l'importation dans la base de données, nous utilisons l'insertion par lots au lieu d'insérer un par un, donc lors de la construction de l'instruction SQL, nous devons faire un petit traitement, voir le code.

Exporter CSV

Nous savons que le fichier csv est un fichier texte brut composé de délimiteurs par virgules. Vous pouvez l'ouvrir avec Excel et l'effet est le même que celui du tableau xls.

Exporter le flux de traitement CSV : lire le tableau d'informations sur l'étudiant-> boucler les enregistrements pour construire des informations de champ séparées par des virgules->

... 
} elseif ($action==&#39;export&#39;) { //导出CSV 
    $result = mysql_query("select * from student order by id asc"); 
    $str = "姓名,性别,年龄\n"; 
    $str = iconv(&#39;utf-8&#39;,&#39;gb2312&#39;,$str); 
    while($row=mysql_fetch_array($result)){ 
        $name = iconv(&#39;utf-8&#39;,&#39;gb2312&#39;,$row[&#39;name&#39;]); //中文转码 
        $sex = iconv(&#39;utf-8&#39;,&#39;gb2312&#39;,$row[&#39;sex&#39;]); 
        $str .= $name.",".$sex.",".$row[&#39;age&#39;]."\n"; //用引文逗号分开 
    } 
    $filename = date(&#39;Ymd&#39;).&#39;.csv&#39;; //设置文件名 
    export_csv($filename,$str); //导出 
}

Pour exporter les données en local, vous devez modifier les informations d'en-tête, le code est le suivant :

function export_csv($filename,$data) { 
    header("Content-type:text/csv"); 
    header("Content-Disposition:attachment;filename=".$filename); 
    header(&#39;Cache-Control:must-revalidate,post-check=0,pre-check=0&#39;); 
    header(&#39;Expires:0&#39;); 
    header(&#39;Pragma:public&#39;); 
    echo $data; 
}

Faites attention au processus d'importation et d'exportation, car nous utilisez le codage UTF-8 unifié, vous devez vous rappeler de transcoder lorsque vous rencontrez des caractères chinois, sinon les caractères chinois pourraient être tronqués.

Ce qui précède est [Avancement technique] Comment importer et exporter des fichiers CSV avec PHP Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn