Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/10/2007, 13h03   #1
Invité de passage
 
Inscription : octobre 2007
Messages : 1
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 1
Points : 0
Points : 0
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.
Adrinou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 13h44   #2
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
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
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 13h53   #3
Invité de passage
 
Inscription : mai 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 7
Points : 4
Points : 4
|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 :
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>';	
 
 
 
?>
theflagada est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 14h20   #4
Membre émérite
 
Inscription : septembre 2007
Messages : 951
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 951
Points : 948
Points : 948
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.
batataw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 18h04   #5
Invité de passage
 
Inscription : mai 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 7
Points : 4
Points : 4
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 ?
theflagada est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 23h06   #6
Membre émérite
 
Inscription : septembre 2007
Messages : 951
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 951
Points : 948
Points : 948
Il faut remplacer

Code :
1
2
 
while(list($index,$contentofile) = each($Content)){
par

Code :
1
2
 
while (!feof($file_liste))    {
tu n'as pas besoin de la fonction

Code :
1
2
 
function recuperer_contenu_csv($url,$separator){
batataw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2007, 12h40   #7
Invité de passage
 
Inscription : mai 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 7
Points : 4
Points : 4
Merci beaucoup; je vais essayer de faire ca de ce pas....
theflagada est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h02.


 
 
 
 
Partenaires

Hébergement Web