Taille maximum d'une variable

WRInaute passionné
J'ai été confronté à un problème de taille de variables.

Je mettais en variable le résultat d'une requête SQL accompagné de divers code.
Une fois la boucle finie, j'affiche la dite variables.

J'ai été confronté à une page blanche quand la variable à dépassé un certain nombre de caractères (d'octet ?).
Quelle est cette valeur maximum ?

Pour mon problème, je l'ai résolu mais sans pour autant connaître cette valeur.
 
WRInaute discret
oui mais dit moi n'as tu pas moyen d'eviter un tel stockage d'information.

Ne te serais t'il pas plus simple de faire des affichages à la volée.

à mon avis ton code doit etre optimisable. car je fais du PHP de facon intensive et j'ai jamais eu ce type de pb.
 
WRInaute accro
tu parles de centaines de milliers de caracteres pour ta variable ? moi personnelement je n'ai jamais atteint de limites :) et je vois pas pourquoi il y aurai une page blanche, au pire la valeur serai tronquée
 
Nouveau WRInaute
théoriquement, la limite est la limite de m'émoire utilisée par PHP (soit 8 Mo par défaut)
Une variable de 8Mo, ca fait un peu beaucoup ...
En plus, si il y a une page blanche, c'est pas sur que le problème vienne de là !!!!
 
WRInaute passionné
dixenet a dit:
oui mais dit moi n'as tu pas moyen d'eviter un tel stockage d'information.

Ne te serais t'il pas plus simple de faire des affichages à la volée.

à mon avis ton code doit etre optimisable. car je fais du PHP de facon intensive et j'ai jamais eu ce type de pb.

Justement je l'ai modifié en conséquence.
 
WRInaute passionné
e-kiwi a dit:
tu parles de centaines de milliers de caracteres pour ta variable ? moi personnelement je n'ai jamais atteint de limites :) et je vois pas pourquoi il y aurai une page blanche, au pire la valeur serai tronquée

C'est ce qui m'a aussi étonné... mais pourtant c'et la seule explication que j'y vois.
 
WRInaute passionné
De toute facon, la mémoire de php (fixé a 8 mo apparement, je n'était pas sure du chiffre) peut se configurer dans la config de php!
Enfin il faut avoir un dédié tout de meme...

Mais 8 mo de caractères, c'est énorme quand meme!

Si tu es en mutualisé, regarde le phpinfo...
 
WRInaute passionné
Je n'ai pas accès à l'info dans le phpinfo().

Mais effectivement, je suis en mutualisé, et la limite apparente est très faible... largement inférieure à 1 Mo.

La page concernée faisait (en totalité donc pas le contenu de la variable) moins de 60 Ko.

Après plusieurs test, je me suis aperçu que le problème venait bien de là.

Je récupérais des infos d'une base de donnée et les insérait dans une variable avec du code html (mon glossaire).
Je passais le contenu complet de la variables sous 2 fonctions chargée de créer les liens vers les définitions, etc.

J'ai contourné le problème en appelant les fonctions concernées dans le while et affichage à la volée.
Ce qui me gêne, c'est que cette méthode prend plus de ressource forcément.

Voici la portion de code concernée que j'ai modifié :
Code:
echo '<dl>';
			while	($sql = mysql_fetch_assoc($res_gloss) ) { // traitement du résultat
					if		($sql['def_nom_acro'] == NULL) {
							$terme = ucfirst($sql['def_nom']);
							$terme = strtr($terme[0], 'é', 'É');
							$terme .= substr($sql['def_nom'], 1);
							}
					else	{
							$terme = $sql['def_nom'].' '.$sql['def_nom_acro'];
							}
					
					if		($sql['def_texte'] == NULL) {
							$define = 'La défintion de ce terme est en cours d\'édition.';
							}
					else	{
							$define = $sql['def_texte'];
							}
					
					if		($sql['def_wikipedia'] == NULL) {
							$wiki = $sql['def_nom'];
							}
					else	{
							$wiki = $sql['def_wikipedia'];
							}
										
					$chaine = '<dt><strong>'.$terme.'</strong></dt>';
					$chaine .= '<dd>';
					$chaine .= '<p>'.$define.'</p>';
					
					if	($sql['def_texte'] != NULL) {
						$chaine .= '<p>Source : <a href="http://fr.wikipedia.org" title="Encyclopédie Wikipédia (nouvelle fenêtre)" '.LIEN_EXT.'>Wikipédia</a> - <a href="http://fr.wikipedia.org/wiki/'.$wiki.'" title="(nouvelle fenêtre)" '.LIEN_EXT.'>'.$sql['def_nom'].'</a> - <a href="http://fr.wikipedia.org/w/index.php?title='.$wiki.'&action=history" title="(nouvelle fenêtre)" '.LIEN_EXT.'>Auteur(s)</a> - Cet article est sous licence <a href="http://www.gnu.org/copyleft/fdl.html" title="(nouvelle fenêtre)" '.LIEN_EXT.'>GFDL</a></p>';
						}
					$chaine .= RETOUR;
					$chaine .= '</dd>';
					
					$chaine = traiteCode($chaine);
					if	(eregi('<acron>', $chaine) || eregi('<define>', $chaine) ) { // si le contenu contient une de ces balises
						$chaine = traiteBalise($chaine, 'lien');
						}
						echo $chaine;
					}
			mysql_free_result($res_glossaire);
			echo '</dl>';

Avant j'appelais les fonctions juste une fois à la fin du while.
 
WRInaute discret
tu sais le fais de stocker les données dans les varaibles prends bien plus de ressources que de les affichés a la volée. puisque tu affiche toujours le mme nombre de caractere mais que tu stock en plus tes varaibles dans la memoire.

enfin bon, moi je simplifierais encore plus ton script. tu stock des données dans les variables sans utilité tu pourrais les afficher direct ca accelererais le traitement de ton script et ca eviterais tes pb de varaible trop grande.
 
WRInaute passionné
dixenet a dit:
tu sais le fais de stocker les données dans les varaibles prends bien plus de ressources que de les affichés a la volée. puisque tu affiche toujours le mme nombre de caractere mais que tu stock en plus tes varaibles dans la memoire.

J'y avais pas pensé :oops:
 
WRInaute discret
pas grave. ca arrive. en regle générale en plus, si tu fait des affichages à la volée et que tu mets intelligement des balises PHP tu peut editer ton design facile avec dreamweaver en module Code et en module Création. Ca peut etre utile des fois
 
Discussions similaires
Haut