Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
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 20/01/2011, 17h02   #1
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 986
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 986
Points : 18 234
Points : 18 234
Envoyer un message via MSN à CinePhil
Par défaut Allowed memory size dépassée

Bonjour,
Jusque là, tout allait assez bien dans mon programme.
Je n'avais jusque là que deux communes dans la table, ce qui me suffisait pour tester.
J'ai ajouté les 36680 autres communes françaises et je me retrouve avec une belle erreur :
Citation:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 72 bytes) in /var/www/html/stagmas/library/Zend/Db/Table/Abstract.php on line 886
Sur le formulaire, j'ai deux Zend_Form_Element_Select pour choisir la commune.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        // Commune de résidence de l'étudiant
        $id_commune_residence = new Zend_Form_Element_Select('id_commune_residence');
        $id_commune_residence
            ->setLabel('Commune de résidence')
            ->setRequired(true);
 
        $commune = new Application_Model_DbTable_Commune();
        $result = $commune->fetchAll();
        $listecommunes = array();
        foreach($result as $cmn)
        {
            $listecommunes[$cmn->cmn_id] = $cmn->cmn_nom;
        }
        $id_commune_residence->setMultiOptions($listecommunes);
 
        // Commune de l'établissement d'origine
        $id_commune_etablissement = new Zend_Form_Element_Select('id_commune_etablissement');
        $id_commune_etablissement
            ->setLabel('Commune')
            ->setRequired(false)
            ->setMultiOptions($listecommunes);
Je pense que le problème vient de là et c'est vrai que 36682 communes dans la liste, ça fait beaucoup mais bon... il me semble avoir déjà vu des sites afficher un gros flot de données.

Je vais passer ça en Zend_Dojo_Form_Element_FilteringSelect quand j'aurais déjà résolu mon petit problème de mise en forme sur ce genre de truc en Dojo mais si c'est pour que la page ne s'affiche pas...

J'ai passé le memory-limit de /etc/php.ini à 128M mais ça n'a fait qu'augmenter le nombre affiché par le message d'erreur.

Une idée pour résoudre ce problème ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 20h59   #2
Membre expérimenté
 
Avatar de manuscle
 
Homme Emmanuel Belair
Développeur informatique
Inscription : septembre 2004
Messages : 463
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Belair
Âge : 32
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2004
Messages : 463
Points : 597
Points : 597
As-tu essayé en te passant des classes de table?

Code :
1
2
3
4
 
$db = Zend_Db_Table_Abstract::getDefaultAdapter();
$listecommunes = $db->fetchPairs("SELECT cmn_id, cmn_nom FROM commune" );
$id_commune_residence->setMultiOptions($listecommunes);
__________________
Les idiots sont ceux qui ne posent jamais de question!
manuscle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 09h04   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 986
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 986
Points : 18 234
Points : 18 234
Envoyer un message via MSN à CinePhil
Merci pour la réponse.
Ça fonctionne mais il faut plusieurs minutes pour afficher la page contenant les deux Zend_Form_Element_Select. C'est évidemment inacceptable en l'état !

Je vais essayer une zone de texte avec l'autocomplétion en Dojo pour voir si ça serait plus rapide.

À moins que quelqu'un ait une autre idée à me soumettre ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 09h16   #4
Membre expérimenté
 
Avatar de manuscle
 
Homme Emmanuel Belair
Développeur informatique
Inscription : septembre 2004
Messages : 463
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Belair
Âge : 32
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2004
Messages : 463
Points : 597
Points : 597
En même temps une liste de choix de 36682 valeurs n'est pas idéal pour l'utilisateur!

autres solutions:

- Le comboBox avec autocomplete, mais pareil faut voir le temps de transfert de tes 36000 communes en json.....

- Sinon tu peux passer par un système de filtres par lettre qui réduirais le nombre de choix.

-Sinon moteur de recherche, l'utilisateur entre une commune, valide, et tu lui sort celles qui correspondent....
__________________
Les idiots sont ceux qui ne posent jamais de question!
manuscle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 09h31   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 986
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 986
Points : 18 234
Points : 18 234
Envoyer un message via MSN à CinePhil
J'ai remarqué dans firebug que le chargement long s'arrêtait sur une erreur de localisation à cause des dossiers "en" et "en-us" manquants dans js/dojo/dijit/form/nls.
En les ajoutant et en les remplissant avec les fichiers nécessaires, j'ai réduit le temps d'affichage à quelques secondes mais c'est encore beaucoup.

Je vais chercher du côté des solutions que tu proposes.

Merci.

EDIT :
Pas très concluant pour le moment !
J'ouvre une autre file sur le Zend_Dojo_Form_Element_FiletringSelect.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil 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 00h15.


 
 
 
 
Partenaires

Hébergement Web