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

EDI, CMS, Outils, Scripts et API PHP Discussion :

comment créer un fichier log dans PHP


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 76
    Par défaut comment créer un fichier log dans PHP
    J'ai 2 fonctions PHP pour parser chacune un fichier Excel de tailles 673K et 131K. Elles ont le même code que leurs nom bien sûr. Une fonction lit les données du fichier et l'autre non et lorsque je l'ai debuguée par des simples messages echo elle renvoie une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal Error: Allowed Memory Size of 134217728 Bytes Exhausted (Tried to allow 72 bytes)
    Je voudrais faire un fichier log pour enregistrer et voir chaque action dans le système mais le problème est que la première fois je vais le créer, je connais pas comment je le crée ? Où je dois le mettre, dans la fonction où j'ai le problème où dans le dossier de projet ? et Comment je l'exécute ?
    J'ai cherché sur internet j'ai trouvé une solution, est d'écrire ce script et de le mettre dans la fonction qui contient le problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $log  = "User: ".$_SERVER['REMOTE_ADDR'].' - '.date("F j, Y, g:i a").PHP_EOL.
            "Attempt: ".($result[0]['success']=='1'?'Success':'Failed').PHP_EOL.
            "User: ".$username.PHP_EOL.
            "Pass: ".$password.PHP_EOL.
            "-------------------------".PHP_EOL;
    //Save string to log, use FILE_APPEND to append.
    file_put_contents('./log_'.date("j.n.Y").'.txt', $log, FILE_APPEND);
    Auriez-vous la gentillesse de me dire comment je crée un fichier log dans PHP et comment je l’exécute ?

    Ma fonction est la suivante:

    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
    public function parseEquipment($filePath = null) {
            set_time_limit(0);
            $listEquipement = [];		
            $count = 0;
            $chunkSize = 1024;
            $objReader = PHPExcel_IOFactory::createReader(PHPExcel_IOFactory::identify($filePath));
            $spreadsheetInfo = $objReader->listWorksheetInfo($filePath);
            $chunkFilter = new \Floose\Parse\ChunkReadFilter();
            $objReader->setReadFilter($chunkFilter);
            $objReader->setReadDataOnly(true);
            $chunkFilter->setRows(0, 1);
            $objPHPExcel = $objReader->load($filePath);
            $totalRows = $spreadsheetInfo[0]['totalRows'];
            for ($startRow = 1; $startRow <= $totalRows; $startRow += $chunkSize) {
                $chunkFilter->setRows($startRow, $chunkSize);
                $objPHPExcel = $objReader->load($filePath);
                $sheetData = $objPHPExcel->getActiveSheet()->toArray(null, null, true, false);
                $startIndex = ($startRow == 1) ? $startRow : $startRow - 1;
     
                if (!empty($sheetData) && $startRow < $totalRows) {				
                    $dataToAnalyse = array_slice($sheetData, $startIndex, $chunkSize);
    				//echo 'test1';	
    				if($dataToAnalyse[1][0]==NULL){
    					//echo 'test2';
    					break;
    				}
     
    				//echo 'test3';
    				//var_dump($sheetData);
                    for ($i = 0; $i < $chunkSize; $i++) {
    					if ($dataToAnalyse[$i]['0'] != NULL) {
    						//echo 'OK';
                            $listEquipement[] = new Article($dataToAnalyse[$i]['3'], $dataToAnalyse[$i]['4'], $dataToAnalyse[$i]['2']);
    					//	 echo 'test4';						
                            $count++;
    						}
                    }
                }
                $objPHPExcel->disconnectWorksheets();
                unset($objPHPExcel, $sheetData);
            }	
     
    		//var_dump(array_slice($sheetData, $startIndex, $chunkSize););
            return $listEquipement;	
        }

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu devrais vérifier quelles plages de cellules sont lues : si ton script s'emballe en mémoire c'est peut être qu'il lit au délà des données.
    Par exemple contrôle ce que vaut $totalRows.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 76
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu devrais vérifier quelles plages de cellules sont lues : si ton script s'emballe en mémoire c'est peut être qu'il lit au délà des données.
    Par exemple contrôle ce que vaut $totalRows.
    Elle était m'affiché le nombre des lignes lorsque je teste par print_r($totalRows) aussi print_r($sheetData) et après elle devient m'affiche que l'erreur d'allocation de mémoire. C'est pour ça je voudrais faire un fichier log. En fait je viens de trouver une solution sur http://php.net/manual/en/function.error-log.php et je peux tester par ses 3 exemples:

    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
    <?php
    // Send notification through the server log if we can not
    // connect to the database.
    if (!Ora_Logon($username, $password)) {
        error_log("Oracle database not available!", 0);
    }
     
    // Notify administrator by email if we run out of FOO
    if (!($foo = allocate_new_foo())) {
        error_log("Big trouble, we're all out of FOOs!", 1,
                   "operator@example.com");
    }
     
    // another way to call error_log():
    error_log("You messed up!", 3, "/var/tmp/my-errors.log");
    ?>
    Mais je connais pas comment, à votre avis entre chaque ligne de la fonction j'ajoute un exemple de cet code celui au-dessus?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    En l'état tu n'as pas besoin d'un système de log. Il faut seulement faire un debugage normal de ce qui se passe dans le script.
    Quand on a un dépassement mémoire dans un script avec deux boucles imbriquées, on peut penser tout de suite qu'une des deux boucles tourne en rond ou que son traitement prend trop de mémoire.

    As-tu vraiment besoin du chunkFilter pour lire de si petits fichiers ?

    Est-ce normal que dans ton code tu fasses le load à la ligne 12 puis au nouveau à la ligne 16 ?

    Elle était m'affiché le nombre des lignes lorsque je teste par print_r($totalRows)
    Et ? Est-ce que la valeur est bonne ?

    Au pire est-ce que tu peux nous fournir le fichier excel ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 76
    Par défaut
    Oui t'as raison , ce n'est pas normal j'ai utilisé load 2 fois. Pour le $totalRows oui il me renvoie la valeur bonne.
    Mais ce qui m'étonne est que l'autre fonction lit les données du fichier Excel et pourtant elles ont le même code ainsi que pour les autres fichiers, c'est vrai que la structure du fichier excel n'est pas la même mais ça pose pas de problème ça, je prends les indices que je voulais. C'est pour ça je pensais de faire un fichier log PHP.
    J'ajoute cette ligne par exemple dans la fonctions où je veux debuguer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error_log("You messed up!", 3, "/var/tmp/my-errors.log");
    Mais c'est que j'en suis pas sûr est que /var/tmp/ est le PATH du fichier log ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je te redis, ton histoire de log ça n'apporte rien.
    Ça va juste écrire "You messed up!" dans un fichier. Tu n'en sauras pas plus.

    Tu n'as pas répondu concernant le chunkFilter.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 10/02/2010, 17h35
  2. Réponses: 2
    Dernier message: 15/12/2008, 16h12
  3. Réponses: 6
    Dernier message: 23/03/2007, 12h26
  4. Comment créer un fichier log ?
    Par raoulmania dans le forum Langage
    Réponses: 15
    Dernier message: 22/07/2005, 11h31
  5. [] [Stratégie] Comment créer un fichier log
    Par Skeezo dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 16/09/2002, 18h30

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