Bonjour,
est-ce que c'est possible d'alimenter une table MySQL a partir d'un fichier txt contenant des enregistrement séparés par des tabulations avec un script PHP?
Bonjour,
est-ce que c'est possible d'alimenter une table MySQL a partir d'un fichier txt contenant des enregistrement séparés par des tabulations avec un script PHP?
Par des tabulations je ne crois pas, il faut un caractere pour faire la séparation.
Si je pense que tu peux très bien récupérer ces données via une "moulinette" en php.
Tu fais un script php qui ouvre et parcourt le fichier texte.
Pour chaque ligne de ton fichier, tu fais un explode() de la ligne avec le caractère \t (tabulation) comme séparateur.
Puis tu génère la requête SQL ensuite.
Bonjour,
Je te donne des idée puisque je travail actuellement sur l'import de données dans une BD Mysql par des fichiers texte.
Exemple :
A peu près ca !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 while (!feof($myfile)) { //PARCOURS DES LIGNES $ligne = fgets($myfile,4096); $liste = explode(";",$ligne); //TAILLE DE LISTE taillel = sizeof($liste); //REQUETE $requete = 'INSERT INTO TABLE (champs1, champs2) VALUES ('; for($i=0;$i<=$taillel;$i++) { if($i != $taillel) { $requete.= '"'.$liste[$i]'",'; } else if($i = $taillel) { $requete.= '"'.$liste[$i]'")'; } } $resultat = mysql_query($requete); .... }
Cordialement
merci pour vos réponses,
j'ai oublié de d'indiquer que la taille du fichier est trés grande, y a t'il un riske que que le serveur php s'arrète de répondre avant la fin d'lexportation de l'intégralité du fichier txt? si oui est-ce qu'il y a un routine pour redémarer le script périodiquement.?
Cordialement
Les réponses formulées sont tout à fait exacte. Il faut savoir que chaque serveur web possede un timeout à partir duquel il arrete le script en cours. Tout depend de ton hebergeur et de la configuration apache qu'il impose. Je crois que la fonction phpinfo() t'affiche entre autre le timeout du serveur apache.
Après la lecture de fichier texte est très rapide en php (également en perl, voir si c'est supporté par ton hebergeur). Si ton fichier est vraiment gros tu peux le décomposer en plusieurs morceaux et après faire tes insertions par lecture successive de tes fichiers.
Je te conseil également de verifier que l'insertion que tu desire faire n'est pas déjà présent dans ta base si tu veux eviter les doublons.
Bon courage
merci pour vos participations, c vraiment gentil, conernant le serveur il s'arrete chaque 90 secondes et bien sur que le script termine l'alimentation de la table.
est-ce que c'est possible avec php de faire redémarre le script avant que le serveur l'arrete?
Cordialement
bonjour,
j'ai fait un code pour lire un fichier txt, éliminer les tabulations ensuite insérer les données dans une table, je pense qu'il y a un problème que je n'arrive pas à détecter au niveau de la requête insert, donc si quelqu'un peut m'aider à debogué ce code je serai reconnaissant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Document sans titre</title> <meta http-equiv="refresh" content="90"> </head> <body> <?php define('DB_SERVER', 'localhost'); // serveur mysql define('DB_SERVER_USERNAME', 'root'); // nom d'utilisateur define('DB_SERVER_PASSWORD', ''); // mot de passe define('DB_DATABASE', 'DB'); // nom de la base function connexion() { // Connexion au serveur mysql $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD) or die('Impossible de se connecter : ' . mysql_error()); // sélection de la base de données mysql_select_db(DB_DATABASE, $connect); } //ouvreture en lecture du fichier txt// $handle=fopen("....txt","r"); //varibale de la position de la lecture// $position=0; if ($handle) { fseek($handle, $position);// commencer à partir de la dernière position// while (!feof($handle)){ $liste = fgets($handle, 4096);//parcours des lignes// $liste = explode("\t",$liste);//éliminer les tabulations// $a=$liste[0]; $b=$liste[1]; $c=$liste[2]; //REQUETE $requete = "INSERT INTO Lex (a, b, c) VALUES ('".$a."','".$b."','".$c."')"; $resultat = mysql_query($requete); } $position=ftell($handle);//récupérer la dernière position de l'éxecution// fclose($handle); } ?> </body> </html>
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager