IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[CSV] Traitement d'un gros fichier CSV


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [CSV] Traitement d'un gros fichier CSV
    Bonjour,
    Je souhaite charger le contenu d'un fichier csv ds une bdd. Mon fichier comporte 130000 lignes (66M environ). Je ne comprend pas, il ne veut pas; mon script qui marche tres bien avec des fichiers de petites tailles semble ne pas s'executer avec des gros comme celui la. la page envoi une requete mais ne passe pas dans ma boucle 'Act'. si quelqu'un a deja eu a faire ce genre de chose, pourriez vous me donner un conseil?
    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    oui , je pense qu il va nous falloir montrer un peu de code ....

    Sinon il se peut que ton script se coupe au bout de 30 secondes et que donc ta requete ne se termine pas !
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    |Eh bien en faite mon script ne s'arrete pas; pour d autres scripts que j'utilise dans mon appplication, j'ai deja du toucher a php.ini et un autre dont je ne me souviens plus le nom. J ai un temps d execution illimite...
    Voici mon code :
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
     
     
     
    <?php
     
     
    if(@!include_once('./config/config.php')){die("Configuration indisponible. Fin du script.");};
    if(!include_once("./config/connect.php")){die("-> Méthode de connexion indisponible. Fin du script.");};
    $postactions=Array("noact","Enter");
    if(!($dblink=@connect_db($login,$passwd,$server,$db_name)))die("-> Connexion à la BD impossible. Fin du script.");
     
    $dir='./Tempcsv';
    if(is_dir($dir)) {
    	//if(!mkdir('../Photos',0777)) echo '';
    }
    function recuperer_contenu_csv($url,$separator){    
     if (file_exists($url))    {
            $tab_liste = array();
            $liste_ligne = array();
            $file_liste = fopen($url, "r");
     
            while (!feof($file_liste))    {
                unset($liste_ligne);
                $ligne = fgets($file_liste,222122096);
     
                if($ligne!=''){
                    $liste = explode($separator,$ligne);                   
                    while(list($keys,$values) = each($liste)){
    	                $newvalues = $values;
                        $liste_ligne[] = $newvalues;
                    }                
                    $tab_liste[] = $liste_ligne;
                }
            }
            fclose($file_liste);
        }
        else{
            $tab_liste = "FichierExistePas";
        }   
        return $tab_liste;   
    }
     
     
    if(isset($_POST['act']) && in_array($_POST['act'],$postactions)){// die("laaaaaaaaaaaaaa");
     
    	$target     = $dir.'/';  // Repertoire cible
    	$extension  =array('csv');      // Extension du fichier sans le .
    	$max_size   = 2000000000;     // Taille max en octets du fichier
     
    	$nom_file   = $_FILES['fichier']['name']; 
    	$taille     = $_FILES['fichier']['size'];
    	$tmp        = $_FILES['fichier']['tmp_name'];
     
        // On vérifie si le champ est rempli
        if(!empty($_FILES['fichier']['name'])) {
            // On vérifie l'extension du fichier
            if (in_array(substr($nom_file, -3),$extension)) {
                // On récupère les dimensions du fichier
                $infos_img = getimagesize($_FILES['fichier']['tmp_name']);
                // On vérifie les dimensions et taille de l'image
                if(($_FILES['fichier']['size'] <= $max_size)) {
                    // Si c'est OK, on teste l'upload
                    if(move_uploaded_file($_FILES['fichier']['tmp_name'],$target.$_FILES['fichier']['name'])) {
                        // Si upload OK alors on affiche le message de réussite
                      // $report.=  '<b  style="FONT-FAMILY: Verdana; FONT-SIZE: 8pt;"> '.$_FILES['fichier']['name'].' was uploaded successfully on the server<br /><br /> ';
                    } 
    				else {
                        // Sinon on affiche une erreur système
                        $report.= '<b style="FONT-FAMILY: Verdana; FONT-SIZE: 8pt;">Problème lors de l\'upload !</b><br /><br /><b>'.$_FILES['fichier']['error'].'</b><br />';
                    }
                } 
    			else {
                    // Sinon on affiche une erreur pour les dimensions et taille de l'image
                    $report.= '<b style="FONT-FAMILY: Verdana; FONT-SIZE: 8pt;">Problème dans les dimensions ou taille de l\'image !</b><br /><br />';
                }
            } 
    		else {
                // Sinon on affiche une erreur pour l'extension
                $report.='<b style="FONT-FAMILY: Verdana; FONT-SIZE: 8pt;">Your file is not valid!</b><br /><br />';
            }
        } 
    	else {
            // Sinon on affiche une erreur pour le champ vide
            $report.= '<b style="FONT-FAMILY: Verdana; FONT-SIZE: 8pt;">uuuuuuuuuuu</b><br /><br />';
        }
     
    	$filenamecsv=$dir.'/'.$_FILES['fichier']['name'];
    	//die ($filenamecsv);
     
    	include_once('./functions/functions.php');
     
    	if ($filenamecsv!=""){	
    		$Content = recuperer_contenu_csv("".$filenamecsv."",",");
    		//echo $Content.$report;
    		while(list($index,$contentofile) = each($Content)){ //die ($filenamecsv);
    			sq="INSERT INTO report ( `ID`,`NASIdentifier`,`NASPort`,`AcctSessionId`,` AcctStatusType`,`AcctTimeMark`,`AcctDate`,` UserId`,` AcctAuthentic`,`ISPService`,`ServiceType`,`FramedProtocol`,`FramedCompression`,`FramedAddress`,`LoginService`,`LoginHost`,`AcctDelayTime`,`AcctSessionTime`,`AcctInputOctets`,`AcctOutputOctets`,`NASPortType`,`AcctTerminateCause`,`CallerId`,`CallLeg`,`CalledStationId`,`OriginalUserId`,` AcctCharge`,` TimeCharged`,`BytesCharged`,`DollarBankDeducted`,`TimeBankDeducted`,`KBBankDeducted`,`UserName`,`UsageSectionCode`,`SupplierId`,` BuyNumberPrefix`,` CallSuccess`,`BuyCharge`,`Email`)
    														VALUES ( '','".$contentofile[0]."','".$contentofile[1]."','".$contentofile[2]."','".$contentofile[3]."','".$contentofile[4]."','".$contentofile[5]."','".$contentofile[6]."','".$contentofile[7]."','".$contentofile[8]."','".$contentofile[9]."','".$contentofile[10]."','".$contentofile[11]."','".$contentofile[12]."','".$contentofile[13]."','".$contentofile[14]."','".$contentofile[15]."','".$contentofile[16]."','".$contentofile[17]."','".$contentofile[18]."','".$contentofile[19]."','".$contentofile[20]."','".$contentofile[21]."','".$contentofile[22]."','".$contentofile[23]."','".$contentofile[24]."','".$contentofile[25]."','".$contentofile[26]."','".$contentofile[27]."','".$contentofile[28]."','".$contentofile[29]."','".$contentofile[30]."','".$contentofile[31]."','".$contentofile[32]."','".$contentofile[33]."','".$contentofile[34]."','".$contentofile[35]."','".$contentofile[36]."','".$contentofile[37]."')";
     
    			mysql_query($sq);
    			//echo $sq;
    			$report=  '<b  style="FONT-FAMILY: Verdana; FONT-SIZE: 8pt;"> '.$_FILES['fichier']['name'].' has  successfully been uploaded on the server<br /><br /> ';
     
    			//Cleaning of the Tempcsv folder
    			$dossier='Tempcsv';
    			if( isset($dossier) && is_dir($dossier)){
    			SupprimerMyDossier($dossier);
    			}
    		}
    	}	
    }
     
    $envoifoto='<form method="POST" action="" name="plop" enctype="multipart/form-data">
    				<table>
    					<tr>
    						<p><label for="photo_1"><b>Price list (.csv)</b> :</label><input size="40" type="file" value="'.$nom_file.'" name="fichier" /></p>
    					</tr>
    					<tr>
    						<td style="vertical-align:top;">&nbsp;</td>								
    						<td style="height:60px;padding:0 0 0 100px;width:20%;text-align:right;"><input type="submit" name="act" value="Enter"><</td>								
    					</tr>
    				</table>		
    			</form>';	
     
     
     
    ?>

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Humm, tu charges tout le fichier en mémoire, essaye de vérifier ton memory limit dans ton php.ini, tu as besoin de plus de 66Mo.

    Ce n'est pas une bonne idée, il vaut mieux lire ton fichier au fur et a mesure.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    ET bien je l ai modifie. mais toujours le meme resultat... c'est bizar parce que j'ai un die() dans ma boucle 'Act' et il ne passe meme pas dedans... je suis perdu...Comment peut on faire pour lire le fichier au fur et a mesure ?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Il faut remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while(list($index,$contentofile) = each($Content)){
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while (!feof($file_liste))    {
    tu n'as pas besoin de la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function recuperer_contenu_csv($url,$separator){

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup; je vais essayer de faire ca de ce pas....

Discussions similaires

  1. Traitement de lignes consécutives fichier csv
    Par demonblack dans le forum Shell et commandes GNU
    Réponses: 39
    Dernier message: 15/07/2014, 17h32
  2. Très gros fichier CSV
    Par kidathom dans le forum Débuter
    Réponses: 6
    Dernier message: 29/04/2008, 13h00
  3. Réponses: 4
    Dernier message: 29/02/2008, 11h11
  4. [MySQL] Traitement de gros fichier CSV
    Par oceanbigone dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 03/07/2007, 11h40
  5. Réponses: 9
    Dernier message: 31/01/2006, 22h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo