Easy-Micro

ESPACEMEMBRE PHP-MySQL
Fichier CSV

Php et les fichiers CSV

Création et affichage de fichiers CSV avec PHP et MySQL

Créer un fichier CSV (sur le disque dur du serveur)

Si l'adresse du fichier ne comporte pas de dossier, cela ecrit le fichier 'liste.csv' directement dans le dossier mysql de votre base de données : mysql/data/mabase (ou /var/lib/mysql/) sinon, on peut spécifier c:/liste.csv. Attention : dans tous les cas, cela ne marche qu'une fois! Il faut donc ecraser le fichier à chaque utilisation.

Le fichier "index.php"
<?php
$base = "mabase";
$user = "root";
$pass = "";
$serveur = "localhost";
$table = "clients";

mysql_connect($serveur,$user,$pass) or die("Connexion impossible: ".mysql_error());
mysql_select_db($base);
$requete = 'SELECT * INTO OUTFILE "C:/liste.csv" FIELDS TERMINATED BY ";" ENCLOSED BY \'"\' LINES TERMINATED BY "\n" FROM '.$table;
$resultat = mysql_query($requete);
if (!$resultat) { echo "<html><body>Problème de requête</body></html>"; }
else {
?>
<html><body>
<a href="liste.csv">Ouvrir le fichier CSV</a>
</body></html>
<?php
} // fin du else
?>


Afficher un fichier CVS

Le fichier "index.php"
<?php
$thefichier = "liste.csv"; // chemin et nom du fichier
$fic = fopen($thefichier, 'r'); // ouverture en lecture

echo "<table border='1'>";
//fgetcsv(fichier, taille, délémiteur)
for ($ligne = fgetcsv($fic, 1024, ";"); !feof($fic); $ligne = fgetcsv($fic, 1024, ";")) {
echo "<tr>";
$j = sizeof($ligne);

for ($i = 0; $i < $j; $i++) {
echo "<td>".$ligne[$i]."</td>";
}
echo "</tr>";
}
echo "</table>"; ?>

L'exemple suivant créé dynamiquement un fichier CSV à partir d'une requete et propose un lien de téléchargement de ce fichier CSV. On utilise pour cela le fichier "telecharger.php" (voir le code ci-dessous) qui fait apparaitre une fenêtre de téléchargement.

Création dynamique de fichier CSV
<html>
<body>

<?php
require_once("config/connexion.php"); // connexion aux fichiers de configurations
$chemin="C:/Program Files/EasyPHP 3.0/www/stage/"; // Adresse du dossier, sinon, c:/wamp/www/stage/"
$fichier="liste.csv"; // Nom du ficher CSV (ou autre)

// si le fichier existe
if(file_exists($chemin.$fichier)) {
// on le supprime
unlink($chemin.$fichier);
}

// requete de création du CSV
$req="SELECT * INTO OUTFILE '".$chemin.$fichier."'
FIELDS TERMINATED BY ';'
ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
FROM clients";

$result=mysql_query($req);
if ($result) {

//echo "<a href=\"c:/wamp/www/stage/liste.csv\">Ouvrir le fichier CSV</a><br/>\n";
// Est utilisé ci-dessous le fichier telecharger.php qui fait apparaitre la fenêtre de téléchargement
echo "<a href=\"telecharger.php?Fichier_a_telecharger=".$fichier."&chemin=".$chemin."\">Télécharger le fichier CSV</a>";
}
else {
echo "<h1>Problème de connexion</h1>";
}

?>
</body>
</html>

L'exemple ci-dessus a été réalisé le 30 septembre 2010 avec messieurs Jacques C. et Jean Emmanuel H.

Si l'on voulait afficher le fichier CSV, voici le code à rajouter à la fin de l'exemple ci-dessus (en fin de PHP, avant le </body>). Est utilisé, ci-dessous la fonction fgetcsv(fichier, taille, délémiteur).

Afficher le contenu d'un fichier CSV (ou autre)
$thefichier = $chemin.$fichier; // chemin et nom du fichier
$fic = fopen($thefichier, 'r'); // ouverture en lecture
echo "<table border='1'>";
//fgetcsv(fichier, taille, délémiteur)
for ($ligne = fgetcsv($fic, 1024, ";"); !feof($fic); $ligne = fgetcsv($fic, 1024, ";")) {
echo "<tr>";
$j = sizeof($ligne);

for ($i = 0; $i < $j; $i++) {
echo "<td>".$ligne[$i]."</td>";
}
echo "</tr>";
}
echo "</table>";

Exemple aussi réalisé avec messieurs Jacques C. et Jean Emmanuel H. (on a beaucoups bossé ce jour là :-)

Le fichier "telecharger.php" :
<?php
// Récupère - par un GET - le fichier à télécharger
$Fichier_a_telecharger=$_GET['Fichier_a_telecharger'];

// Récupère le chemin
$chemin=$_GET['chemin'];

// on essaie de reconnaitre l'extension pour que le téléchargement
// corresponde au type de fichier afin d'éviter les erreurs de corruptions
switch(strrchr(basename($Fichier_a_telecharger), ".")) {
case ".gz": $type = "application/x-gzip"; break;
case ".tgz": $type = "application/x-gzip"; break;
case ".zip": $type = "application/zip"; break;
case ".pdf": $type = "application/pdf"; break;
case ".png": $type = "image/png"; break;
case ".gif": $type = "image/gif"; break;
case ".jpg": $type = "image/jpeg"; break;
case ".txt": $type = "text/plain"; break;
case ".htm": $type = "text/html"; break;
case ".html": $type = "text/html"; break;
default: $type = "application/octet-stream"; break;
}

// Affiche la boite de dialogue de téléchargement
header("Content-disposition: attachment; filename=$Fichier_a_telecharger");
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: $type\n"); // Surtout ne pas enlever le \n
header("Content-Length: ".filesize($chemin . $Fichier_a_telecharger));
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
readfile($chemin . $Fichier_a_telecharger);

// on supprime le fichier
unlink($chemin.$Fichier_a_telecharger);
?>


< Page précédente PHP-MYSQL Page suivante >