Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1605 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] traiter des fichiers de 40 Mo !!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] traiter des fichiers de 40 Mo !!

n°574533
kayasax
Posté le 24-11-2003 à 13:07:43  profilanswer
 

:hello:  
j'essaie de faire un script d'analyse des fichiers logs du proxy (parcours du fichier ligne par ligne et insertion des champs qui m'interessent dans la db), mais problème les fichiers font en moyenne 40 megas :/
 
j'arrive à inserrer env. 24000 enregistrements dans ma table puis tt à coup j'ai cette erreur :
"You have an error in your SQL syntax near '%20ord2%20+%20'?')' at line 1"  or c'est la meme requete qui est executee tt le temps et les 24000 1eres fois elle est executee sans problèmes... :heink:  

$sql="insert into proxy values ('','$date','$info[0]','$user','$info[5]','$moout','$moin','$info[15]','$info[18]')";
mysql_query($sql) or die(mysql_error());


 
 
quelqun a une technique pour traiter de tels fichiers ??
Merci.

mood
Publicité
Posté le 24-11-2003 à 13:07:43  profilanswer
 

n°574538
casu
Posté le 24-11-2003 à 13:14:55  profilanswer
 

j en sais rien !

n°574543
jagstang
Pa Capona ಠ_ಠ
Posté le 24-11-2003 à 13:18:26  profilanswer
 

pour info : %20 c'est un espace

n°574553
anapajari
s/travail/glanding on hfr/gs;
Posté le 24-11-2003 à 13:25:33  profilanswer
 

t'as une guillement qui traine:

kayasax a écrit :

...
"You have an error in your SQL syntax near '%20ord2%20+%20'?')' at line 1"  

n°574566
Profil sup​primé
Posté le 24-11-2003 à 13:53:38  answer
 

wai en fait ta recuperer la base de quelque part et tu cherche a l'uploader autre part. c'est ca?
 
On pourrait se dire que la syntax est parfaite mais dans l'enregistrement du .sql j'avais des erreur comme la tienne.
A ce demander comment ca peu arriver :/

n°574568
*syl*
--> []
Posté le 24-11-2003 à 13:56:44  profilanswer
 

chacal_one333 a écrit :

On pourrait se dire que la syntax est parfaite mais dans l'enregistrement du .sql j'avais des erreur comme la tienne.
A ce demander comment ca peu arriver :/

J'ai déjà eu le même tour..PHPMyAdmin de merde ? MySQL de merde ?  [:spamafote] (Enfin, pour le dernier j'vois pas pkoi j'ai mis un ? :D)

n°574573
KrisCool
“Verbeux„
Posté le 24-11-2003 à 14:05:51  profilanswer
 

Pour vérifier que le problème ne vient pas de certaines lignes de log qui contiennent des valeurs rendant la requête MySQL incorrecte, arrange toi pour logguer en cas d'erreur de la requête la ligne de log incriminée et la requête correspondante.
Ignore l'erreur et passe à la ligne de log suivante, ça te donnera toutes les lignes "foireuses" du log analysé et te permettra sans doute d'y voir plus clair.


---------------
Loose Change Lies | Bars | Last.fm
n°574581
kayasax
Posté le 24-11-2003 à 14:11:06  profilanswer
 

Merci de m'avoir lu ...

JagStang a écrit :

pour info : %20 c'est un espace


oui merci je suis pas completement debile ...
 
 
Anapajari : "t'as une guillement qui traine": Ce n'est pas moi qui ai ecrit cette requete je ne sais pas d'ou elle sort ...
 
"wai en fait ta recuperer la base de quelque part et tu cherche a l'uploader autre part. c'est ca? " pas du tout comme dis plus haut je parcours un fichier et insere certains element dans une bdd.
 
 
le code :


<?
$date="031121";
$filename="W3";
$filename.=$date;
$filename.=".log";
$con=mysql_connect('localhost','root','');
$db=mysql_select_db('proxy',$con);
 
$fp = fopen ($filename, "r" );
while (!feof ($fp)) {
    $buffer = fgets($fp, 4096);
    $info=explode(",",$buffer);
   
    $user=ereg_replace("INTRASMAC","",$info[1]);
    $moout=round(($info[13]/1024/1024),3);
    $moin=round(($info[14]/1024/1024),3);
    $sql="insert into proxy values ('','$date','$info[0]','$user','$info[5]','$moout','$moin','$info[15]','$info[18]')";
    mysql_query($sql) or die(mysql_error());
 
 if($a%100 ==0) echo " * ";
}
fclose ($fp);
echo'FIN'
?>


 
 
La structure de la table :
 
Champ Type Null Défaut  
id   int(10)  Non    
date   date Non  0000-00-00  
ip   varchar(15) Non    
user   varchar(100) Non    
heure   time Non  00:00:00  
moout   float Non  0  
moin   float Non  0  
proto   varchar(10) Non    
uri   varchar(250) Non    
 

n°574600
Sh@rdar
Ex-PhPéteur
Posté le 24-11-2003 à 14:36:14  profilanswer
 

utilise plutôt un bulk insert (plusieurs lignes à la fois) ça sera vachement moins lourd pour le serveur
 
INSERT INTO matable VALUES ('ligne1'),('ligne2'),('ligne3')
 
et tu fais une insertion par paquet de 1000 par exemple


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°574601
kayasax
Posté le 24-11-2003 à 14:36:51  profilanswer
 

KrisCool a écrit :

Pour vérifier que le problème ne vient pas de certaines lignes de log qui contiennent des valeurs rendant la requête MySQL incorrecte, arrange toi pour logguer en cas d'erreur de la requête la ligne de log incriminée et la requête correspondante.
Ignore l'erreur et passe à la ligne de log suivante, ça te donnera toutes les lignes "foireuses" du log analysé et te permettra sans doute d'y voir plus clair.


 
Merci c'est bien certaines lignes qui posent pb, peut etre mon champs uri n'est pas assez long, je le modifie et resteste...

mood
Publicité
Posté le 24-11-2003 à 14:36:51  profilanswer
 

n°574603
anapajari
s/travail/glanding on hfr/gs;
Posté le 24-11-2003 à 14:42:28  profilanswer
 

mais non dans certains champs tu dois avoir un guillemet... Et comme tu fais aucun traitement dessus bin ça pète.
Commence par faire un addslashes( http://dev.nexen.net/docs/php/anno [...] n=addslash ) sur tous les champs varchar
Ensuite vérifier la longueur des champs que tu inseres est également une bonne idée
[edit: je sais pas pourquoi j'ecris guillement en ce moment au lieu de guillemet]


Message édité par anapajari le 24-11-2003 à 14:43:57
n°574609
kayasax
Posté le 24-11-2003 à 14:49:15  profilanswer
 

ok merci c'est juste ce à quoi je venais de penser (suis je bete !) ca a l'air de tourner now

n°574663
kayasax
Posté le 24-11-2003 à 15:27:18  profilanswer
 

finalement ca va relativement vite pour inserer env. 142000 lignes


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] traiter des fichiers de 40 Mo !!

 

Sujets relatifs
[PHP]pseudo frames & easy php 1.7comment faire un seul exe avec plusieurs fichiers...
(PHP] Problème sous PHPBB (v. Nuked Klan 2.0.4)[PHP] champs en php : tous pareils ou tous différents ?
Compteur PHP - Comment ne pas compter plusieurs fois la même connectio[PHP] Afficher les erreurs Warning et Notice
pb du traitement des donnees en PHP recuperees d'un formulaire htmlsqlnet (sql*net) ,native ! PHP oracle
Récupérer des informations sur les fichiers en asp[PHP] Gestion des sessions
Plus de sujets relatifs à : [PHP] traiter des fichiers de 40 Mo !!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR