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 :

file_get_contents: ouvrir un gros fichier


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Points : 8
    Points
    8
    Par défaut file_get_contents: ouvrir un gros fichier
    Bonjour à vous tous!

    J'aurais besoin de votre aide concernant un problème avec la fonction PHP file_get_contents. Je vous met en contexte:

    J'ai besoin d'analyser un fichier .log afin de ressortir des statistiques précises sur un site Web. J'ouvrais donc le fichier avec la fonction file_get_contents() et je «*parsais*» la chaîne. Génial!... jusqu'à ce que le site Web gagne en popularité et que le .log devienne plusieurs méga-octets de taille! Ho là là!! Avec 3 Mo, il ne semblait pas y avoir de problème, mais maintenant à 7 Mo, juste le fait d'Affecter le .log dans une chaîne fait planter le site Web.

    Auriez-vous une alternative de fonction ou une idée afin de seulement mettre les lignes du .log nécessaires à mes statistiques?

    Merci beaucoup de votre temps.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Et en le lisant ligne par ligne c'est pas mieux ?


    Julp.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par julp
    Et en le lisant ligne par ligne c'est pas mieux ?
    Et quelle fonction me permettrait de consulter le fichier seulement une ligne à la fois? Est-ce que je peux soumettre ce genre de paramètre avec «*file_get_contents*»?

    Je ne suis pas trop sûr de comprendre l'info que php.net me donne:

    string file_get_contents ( string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]] )

    Merci de votre aide!

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par blirette
    Et quelle fonction me permettrait de consulter le fichier seulement une ligne à la fois?
    fgets.

    Citation Envoyé par blirette
    Est-ce que je peux soumettre ce genre de paramètre avec «*file_get_contents*»?
    Non.


    Julp.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Wow, génial! Merci beaucoup!!

    Voici la fonction si quelqu'un veut «*parser*» un log de statistique qui a cette forme:

    2006-09-18 08:37:18 66.46.188.194 64.18.191.248 80 GET /fr/(email)353_17(/email) - 404 4203 602 31 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.0) - http://www.apple.com

    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
    $handle = @fopen("lienversvotrefichier.log", "r");
    if($handle)
    	{
    	while(!feof($handle))
    		{
    		$buffer = fgets($handle, 4096);
     
    		// vérifie si c'est une statistique
    		if(strpos($buffer, "(email)") !== false)
    			{
    			// va chercher le début des infos
    			$datOuverture = substr($buffer, 0, 10);
    			$timOuverture = substr($buffer, 11, 8);
    			$strClientMailing = substr($buffer, strpos($buffer, "(email)") + 7, strpos($buffer, "(/email)") - strpos($buffer, "(email)") - 7);
     
    			$aValeursOuverture = explode("_", $strClientMailing);
    			$idClient = $aValeursOuverture[0];
    			$idMailing = $aValeursOuverture[1];
     
    			echo('<p>$datOuverture['.$datOuverture.'] || $timOuverture['.$timOuverture.'] || $idClient['.$idClient.'] || $idMailing['.$idMailing."]<p>\n");
    			};
    		};
    	fclose($handle);
    	};

  6. #6
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Si c'est un fichier de log formatté ( tout le temps le meme format ), tu pourrait regarder du coté des expressions régulières perl

    preg_match() et consorts
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ouvrir de gros fichiers en php ?
    Par BOTEN ANNA dans le forum Langage
    Réponses: 11
    Dernier message: 25/08/2011, 03h15
  2. Ouvrir un très gros fichier XML
    Par strat0 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 02/11/2007, 13h29
  3. Ouvrir un TRES gros fichier
    Par BainE dans le forum Windows XP
    Réponses: 3
    Dernier message: 05/04/2007, 17h13
  4. Un langage pour lire, traiter et écrire de gros fichiers
    Par March' dans le forum Langages de programmation
    Réponses: 19
    Dernier message: 07/04/2003, 15h26
  5. Ouvrir (fopen) un fichier caché
    Par shef dans le forum C
    Réponses: 2
    Dernier message: 09/09/2002, 09h06

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