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 :

Comment vider de la mémoire ? Problème PHPExcel


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Par défaut Comment vider de la mémoire ? Problème PHPExcel
    Bonjour,

    J'utilise le script suivant pour lister des fichiers Excel, et du PHPExcel pour recueillir des informations enregistrées dans chaque fichier.
    Le scrit fonctionne bien si je n'utilise pas la lecture des fichiers Excel, dès que j'intègre la lecture je recontre un problème de mémoire dès le troisième ou quatrième fichier.
    Si dessous mon script et le message d'erreur. Quelqu'un aurait-il une idée pour vider la mémoire entre chaque lecture de fichier avec PHPExcel ?

    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
    <?php
     
    error_reporting(E_ALL);
     
    date_default_timezone_set('Europe/London');
    include '../Classes/PHPExcel/Reader/Excel5.php';
    require_once '../Classes/PHPExcel/IOFactory.php';
     
    echo "<br><h1><center><font color=\"red\"> Liste des Devis sauvegardés </font></h1></br>" ;
    $dirname = '../GestionClients/SaveDevis/';
    $dir = opendir($dirname);
    while (false !== ($file = readdir($dir))) {
        $files[] = $file;
    }
    rsort($files);
    foreach ($files as $fichier)
    {
    	if ((substr($fichier, -4) == ".xls") OR (substr($fichier, -5) == ".xlsm")) { 
    	$AnFichier = (substr($fichier, 10, 2));
    	$MoisFichier = (substr($fichier, 12, 2));
    	$JourFichier = (substr($fichier, 14, 2));
    	$HeureJ = (substr($fichier, 16, 2));
    	$MinuteJ = (substr($fichier, 18, 2));
    	$RefDevis = (substr($fichier, 0, 9));
     
    		// On charge lit le fichier Excel
    		$objPHPExcel = PHPExcel_IOFactory::load($dirname.$fichier);
     
    		// On retire la protection des feuilles pour lire le fichier
    		$objPHPExcel->getSecurity()->setLockWindows(true);
    		$objPHPExcel->getSecurity()->setLockStructure(true);
    		$objPHPExcel->getSecurity()->setWorkbookPassword("bercois");
    		$objPHPExcel->getActiveSheet()->getProtection()->setPassword("bercois");
     
    		// On active la première page correspondant au devis
    		$sheet=$objPHPExcel->getSheet(0);
     
    		// On regarde l'état d'avancement: devis, commande ou facture
    		$valCellEtat=$sheet->getCell('A5')->getValue();
    		If ($valCellEtat=="")
    			{$EtatDocument="Devis";}
    			else {$EtatDocument="Commande";}
    		//et on recupere avec la methode getCell le contenue de la cellule E13
    		$valCellGenre=$sheet->getCell('B11')->getValue();
    		$valCellNom=$sheet->getCell('B12')->getValue();
    		$valCellPrenom=$sheet->getCell('B13')->getValue();
    		// On regarde la page commande pour voir si elle est passée à l'état facture
    		$sheet=$objPHPExcel->getSheet(1);
    		$valCellEtat=$sheet->getCell('A5')->getValue();
    		If ($valCellEtat=="")
    			{}
    			else {$EtatDocument="Facture";}
     
    ?>
    		<table bgcolor=#F5F5DC border="1" bordercolor=green width="90%" align="center"><tr><td valign="top"></tr>
    			<tr><td></td></tr>
    			<tr><td bgcolor="#CCFFCC" height="5" width="100"><font size="2" face="Arial, Helvetica, sans-serif" color="black"><?php echo '<br><a href="'.$dirname.$fichier.'">'.$RefDevis.'</a></br>'?></td>
    			<td><?php echo $EtatDocument." Affaire : ".$valCellGenre." ".$valCellPrenom." ".$valCellNom." - Fichier du ".$JourFichier."/".$MoisFichier."/".$AnFichier." à ".$HeureJ."H".$MinuteJ ?></font></td></tr>
    			<?php
     
    	}
    }
    ?>
    Et le message d'erreur :

    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 78 bytes) .....

    Merci de votre aide.

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2011
    Messages : 18
    Par défaut
    Il faut pouvoir ferme ton fichier après lecture. Pour ça tu dois avoir une fonction dans ta classe mais il va falloir fouiller un peu.

    Si il y a pas tu te créé une nouvelle classe étendue de celle ci et tu ajoute une méthode de fermeture de fichier.

  3. #3
    Membre éclairé Avatar de a028762
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 419
    Par défaut C'est dans la doc
    Tu peux en fin de boucle utiliser les commandes suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $objPHPExcel->disconnectWorksheets();
    unset($objPHPExcel);
    ou $objPHPExcel est l'objet SpreadSheet chargé en mémoire

Discussions similaires

  1. Comment vider la mémoire d'une pointeuse
    Par jerdel dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/03/2010, 15h37
  2. Problème d'espace: comment vider ?
    Par llusca dans le forum Oracle
    Réponses: 2
    Dernier message: 04/12/2008, 17h15
  3. comment vider la mémoire cache de squid
    Par maya dans le forum Administration système
    Réponses: 5
    Dernier message: 24/01/2007, 14h02
  4. Comment bien gerer la mémoire avec les TStringList?
    Par david_chardonnet dans le forum Langage
    Réponses: 5
    Dernier message: 18/06/2003, 09h57
  5. Comment vider un dossier ?
    Par Zinoc dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/06/2002, 14h14

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