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 :

Poids du script


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut Poids du script


    Pour un script je fais des tests recursifs sur des variables situés dans des fichiers. Donc pour chaque fichier je fais son include.
    Etant donné que ça peut aller de 0 à une vingtaine de fichiers, est ce que tous ces include (ou require) risquent de ralentir le script?

    Merci

  2. #2
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Seconde question:

    J'ai remarqué que j'utilise une mauvaise solution.
    En fait je veux simplement vérifier si le fichier contient seulement la variable $name_lang et $lang et vérifier que toutes les clés tirées d'une autre variable définie se trouvent dans $lang

    Le problème c'est que je fais mon include pour normalement extraire la variable, mais si le fichier contient du texte brut, alors tout le texte est affiché...

    Comment remedier a ça?
    Merci

  3. #3
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Aucune autre solution?

  4. #4
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Salut,

    tu as pas un peu de code pour aider ?

  5. #5
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    salut,
    fais un file_get_contents et travaille sur la chaine en regexp ?
    passe au xml ?

  6. #6
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Citation Envoyé par marcha
    Salut,

    tu as pas un peu de code pour aider ?
    Oui, et un exemple de "texte brut" dans l'include, par la même occasion.

  7. #7
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Le code de vérification:

    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
    /* Langages */
    $langages = $Langage;
    $base_lang = array('les_cles_devant_exister');
    if ($handle = opendir('../langages')) {
       while (false !== ($file = readdir($handle))) {
          $error = false;
          if ($file != "." && $file != "..") {
             if (substr($file, -4) == '.php') {
                include('../langages/'.$file);
                global $lang, $name_lang;
                if (!isset($lang) OR !isset($name_lang)) $error = true;
                if ($error == false) {
                   foreach($base_lang As $value) {
                      if (!array_key_exists($value, $lang)) {
                         $error = true;
                      }
                   }
                }
                if ($error == false) {
                   $checked = ($file == $Langage) ? "selected" : "";
                   $langages .= '<option value="'.$file.'" '.$checked.'>'.$name_lang.'</option>';
                }
                unset($lang);
                unset($name_lang);
             }
          }
       }
       closedir($handle);
    }
    Le fichier correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $name_lang = 'Français';
    $lang = array('cle' => 'blabla',
                         'cle2' => 'blabla');
    ?>
    Le fichier pas correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAHAHAHAHA ça ne marche pas
    Merci a vous

  8. #8
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Je te propose de modifier le corps de ta boucle :
    - pas d'unset inutiles
    - pas de global inutile
    - concordance variable/contenu (checked vs selected)
    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
     
             if (substr($file, -4) == '.php') {
                include('../langages/'.$file);
                if (isset($lang) && isset($name_lang)) {
                   reset($base_lang);
                   while(!$error && list(,$value) = each($base_lang)) {
                      if (!isset($lang[$value])) {
                         $error = true;
                      }
                   }
                   if ( ! $error) {
                      $selected = ($file == $Langage) ? 'selected="selected"' : '';
                      $langages .= '<option value="'.$file.'" '.$selected.'>'.$name_lang.'</option>';
                   }
                   unset($lang);
                   unset($name_lang);
                }
             }
    Sinon pour savoir si ton fichier inclus est "correct", à savoir qu'il ne renvoie rien vers le navigateur, tu peux peut-être faire un truc avec ob_... pour capturer le resultat de l'include, résultat devant être vide dans l'idéal.

  9. #9
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Merci beaucoup je vais tester ta boucle et voir ces ob_...
    Je reviens vous dire.
    Merci

  10. #10
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Bon alors je n'ai jamais touché aux ob_ alors je viens demander conseils.

    D'après ce que j'ai compris, j'apelle ob_start(), ensuite toutes les données sont stockées dans un buffer mais pas transmises (bon ça c'est le manuel).

    Ce que je devrais faire c'est sonc appeler ob_start, puis vérifier si ob_get_contents contient quelque chose?
    Si oui, alors il y a du texte brut, si non que mes variables?

    Si c'est ça, ou dois je mettre ces fonctions? Je ne peux pas les mettre sur mon fichier lang puisqu'il peut contenir n'importe quoi...

    Quelqu'un peut m'éclairer?
    Merci

  11. #11
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Et bien autour de ton include de fichier de langue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ob_start(); //on bufferise
    include(...); //On inclue le fichier de langue
    if (ob_get_length() != 0) { //On teste
       echo "Fichier corrompu !";
    }
    ob_end_clean();
    /!\ je n'ai jamais utilisé ces ob_... donc code surement incorrect. C'est juste pour donner une piste...

  12. #12
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Ouahh Génial !

    Une dernière question pour aller un tout ptit peu plus loin:
    Est-ce possible de lister toutes les variables présent dans le fichier?

    Mercimerci

  13. #13
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Alors ca commence a être tordu... Voici ce que je te propose :
    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
    <?php
    	$variables = array();
    	foreach(token_get_all(file_get_contents(__FILE__)) as $token) {
    		if (is_array($token)) {
    			if (token_name($token[0]) == 'T_VARIABLE') {
    				if (!isset($variables[$token[1]])) {
    					$variables[$token[1]] = 1;
    				} else {
    					$variables[$token[1]]++;
    				}
    			}
    		}
    	}
    	var_dump($variables);
    ?>
    Si tu le mets dans un script est que tu l'appelles, il va te donner un tableau $variables qui pour chaque variable indique le nombre de fois où elle est utilisée dans le script. Il suffit de remplacer __FILE__ par le fichier que tu veux inclure. Pour __FILE__ (le script courant), ca me retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    array(2) {
      ["$variables"]=>
      int(5)
      ["$token"]=>
      int(6)
    }
    donc la variable $variables est utilisée 5 fois alors que $token est utilisée 6 fois. Il te suffit de mettre ce code dans une petite fonction avec un petit nom qui va bien, passer en paramètre le nom du fichier, de retourner le tableau $variable et basta.

  14. #14
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    bon, solution un peu plus courte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $before = get_defined_vars();
    include(...);
    $after = get_defined_vars();
    $diff = array_diff($after, $before);
    var_dump($diff);
    $diff contient les variables qui ont été déclarées entre $before et $after

  15. #15
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Ah merci c'est super
    Bonne soirée
    A+

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

Discussions similaires

  1. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 08h45
  2. [Antialiasing][Wu][poids]
    Par JHelp dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 22/12/2002, 01h17
  3. quel langage choisir pour faire de script sous windows
    Par pas05 dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/11/2002, 23h42
  4. Réponses: 2
    Dernier message: 11/07/2002, 09h31

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