Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 30/01/2011, 18h21   #1
Invité de passage
 
Inscription : juin 2006
Messages : 16
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 16
Points : 3
Points : 3
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 :
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.
Jeff77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 11h49   #2
Futur Membre du Club
 
Homme
Inscription : septembre 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2011
Messages : 17
Points : 19
Points : 19
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.
touiks9 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2011, 11h54   #3
Membre habitué
 
Avatar de a028762
 
Inscription : décembre 2003
Messages : 222
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 222
Points : 108
Points : 108
Par défaut C'est dans la doc

Tu peux en fin de boucle utiliser les commandes suivantes
Code :
1
2
$objPHPExcel->disconnectWorksheets();
unset($objPHPExcel);
ou $objPHPExcel est l'objet SpreadSheet chargé en mémoire
a028762 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 05h25.


 
 
 
 
Partenaires

Hébergement Web