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 :

capacité d'un fichier php


Sujet :

Langage PHP

  1. #21
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Pour faire très court ce n'est pas du côté du temps de génération de l'opcode qu'il faut chercher de l'optimisation.
    Mais plutôt du côté du temps de chargement des fichiers, en gros le système de fichier est au cœur du problème.
    Comme précédemment dit on n'inclut pas 100 fichiers si on n'en utilise que 3. Tout comme on ne fait pas un fichier regroupant 1000 fonctions si on sait qu'en général seules 3 sont utilisées.

    Je suis content de voir que certaines personnes s'intéressent au fonctionnement de PHP, c'est tellement rare.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  2. #22
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam (salut); donc faut éviter le méga-fichier sauf que le problème se pose pour la limite en fonction du contenu et le type d'instruction
    Stealth36 "mais ce qu'il y'a dedans..."
    !!!!
    fonctionnement de l’interpréteur :
    le fichier passe par un lexer (analyseur de syntaxe),
    Convertit le fichier en unités de code compréhensibles pour le processeur,
    Ce flux d'unités est ensuite traité par le parser,
    le parser créé le code intermédiaire qui sera exécuté pour le Zend Engine,
    Ce dernier agit comme une machine virtuelle, qui combine les différentes unités sous forme d'opcodes, et les exécute un à un.
    a cet étape ( en rouge) la conversion se fait par rapport au bloc du code transcrit sur le fichier ou selon langage du processeur ?
    a cet étape je crois qu'il y'a un système d'indexation afin de permettre de rassemblé le tout après.

  3. #23
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Non pas d'indexation à ce niveau là, il ne fait que traduire un langage dans un autre.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  4. #24
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    je crois que le sujet dépasse mes compétences ; voila je me limite juste a ce qui suit:
    Comment l’interpréteur gère les unités de code contenues dans un fichier en include par rapport au fichier principal ?
    Est ce que sont classés dans un tableau avec des identifiants ou autre afin de les appelés rapidement ( le chemin le plus court) a l'endroit voulu?

  5. #25
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Il ne faut pas penser en terme d'include car un include c'est un copier/coller de code. Au final c'est comme s'il n'y avait qu'un seul fichier avec tout dedans.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  6. #26
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Oui ;
    Comment l’interpréteur gère les unités de code contenues dans un fichier en include par rapport au fichier principal ?
    donc l’interpréteur lit le contenu en trois lectures:
    1. Lecture lexicale ( montage d'un arbre de structuration de la lecture et de l'exécution du code) ,
    2. Analyse sémantique ,
    3. Et la dernière pour convertir le code dans un langage intermédiaire,

    a la fin l’interpréteur va lire le opcode et effectué les opérations selon u ordre.
    la même opération est exécutée pour chaque appel ou chaque internaute (nécessité d'un outil de mise en cache).
    donc en résumé y'a u arbre logique de lecture et d’exécution du code cela dit un certain algorithme.

  7. #27
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam ; sans entré dans les détaille peut-on dire que chaque unité de code est indexé pour être appelée (exécuté) plus tard a l'endroit précis soit dans le même ou autre fichier sans faire une relecture du opcode ?

  8. #28
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par redoran Voir le message
    Salam ; sans entré dans les détaille peut-on dire que chaque unité de code est indexé pour être appelée (exécuté) plus tard a l'endroit précis soit dans le même ou autre fichier sans faire une relecture du opcode ?
    [ame="http://www.slideshare.net/jpauli/anatomie-et-performances-de-php"]Anatomie et performances de php@@AMEPARAM@@ssplayer2.swf?doc=performancesphp-afup-2012-120605080326-phpapp01&stripped_title=anatomie-et-performances-de-php@@AMEPARAM@@performancesphp-afup-2012-120605080326-phpapp01@@AMEPARAM@@anatomie-et-performances-de-php[/ame]

  9. #29
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam (salut) , merci stealth35 pour ce lien qui est vraiment riche dommage qu'il n'est pas téléchargeable.
    y'a un énorme travail qui se fait avant la génération du opcode.
    Le opcode est traité par un gestionnaire "zend_vm_handler" d'une manière linéaire avec possibilité en boucle.
    devant cette complexité je rend les armes et je me contente de resté aux abord du compréhensible bravo pour l'auteur

  10. #30
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Demande à Julien de t'envoyer le fichier si ça t'intéresse

  11. #31
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam (salut); j'ai dit un jour
    devant cette complexité je rend les armes et je me contente de resté aux abord du compréhensible...

    je reviens a ma question , sincèrement j'ai lu et relut le document:
    le opcode est généré pour évité la relecture du fichier.
    maintenant a partir du opcode comment les unités de code son sélectionnés pour être exécutées ?
    exemple:
    si l'opcode contiens un présentation d'unités de code allant de 01 a 50 unités.
    et le programme a besoin de l'unité 20 pour être exécutée dans le fichier X , là est ce que il va relire tous l'opcode ou tous simplement y a un système qui permet d'aller directement a l'unité 20 ?

  12. #32
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par redoran Voir le message
    le opcode est généré pour évité la relecture du fichier.
    non il est lu et crée a chaque fois

    Citation Envoyé par redoran Voir le message
    maintenant a partir du opcode comment les unités de code son sélectionnés pour être exécutées ?
    exemple:
    si l'opcode contiens un présentation d'unités de code allant de 01 a 50 unités.
    et le programme a besoin de l'unité 20 pour être exécutée dans le fichier X , là est ce que il va relire tous l'opcode ou tous simplement y a un système qui permet d'aller directement a l'unité 20 ?
    réponse au dessus, a chaque fois que tu lances le fichier tu repart a zéro, mais je te l'ai déjà dis, si tu veux éviter de reparler les fichier met un cache d'opcode comme APC

  13. #33
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam ; avec un cache d'opcode comme APC , Comment ce dernier va traité cette problématique :
    si l'opcode contiens un présentation d'unités de code allant de 01 a 50 unités.
    et le programme a besoin de l'unité 20 pour être exécutée dans le fichier X .


    1. Faire une relecture ?
    2. Garder en mémoire la liaison entre l'unité 20 du fichier parmi les 50 et le point d’exécution de l'unité 20 dans le fichier X?

  14. #34
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam ; voila je vais creusé un peu plus aux risques et périls
    Les OPCodes sont des structures de données C,
    Sa ne ressemble pas au opcode hexadécimal des consoles de jeux,
    S’exécute sur 8 bits ? 32 Bits ? 64 Bits?
    Est ce que il établi une table de correspondance ?
    Si c'est le cas normalement y a un algorithme qui permet de retrouver facilement l'unité de code concernée dans le fichier X?

  15. #35
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par redoran Voir le message
    Salam ; voila je vais creusé un peu plus aux risques et périls
    Les OPCodes sont des structures de données C,
    Sa ne ressemble pas au opcode hexadécimal des consoles de jeux,
    S’exécute sur 8 bits ? 32 Bits ? 64 Bits?
    Est ce que il établi une table de correspondance ?
    Si c'est le cas normalement y a un algorithme qui permet de retrouver facilement l'unité de code concernée dans le fichier X?
    Qu'est ce t'appelle une table de correspondance et unité de code ?
    Pour le reste c'est une VM
    T'as installé VLD ?

  16. #36
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Qu'est ce t'appelle une table de correspondance
    table a titre d'exemple ( en tréalité je ne c'est pas comment elle est constituée!!!) :

    index || unité de code
    0 || code 1
    1 || code 2

    Unité de code:
    instruction,
    fonction....ect
    T'as installé VLD ?
    non mais je voulais simplement comprendre le système d'appel d'unité de code selon le besoin.

  17. #37
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Install le et tu comprendras

  18. #38
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam ; l'aventure continue a la recherche de
    les opcodes générés sont écrits en verticales ( du haut vers le bas) , donc un sens d'exécution unidirectionnelle avec éventuellement des boucles (selon le code PHP) , tous cela dépend de l'assembleur non!!!
    donc ce schéma renvoi a la gestion des piles....
    ici on va passé a la gestion des nœuds.... toute un système olala
    je crois que cette question relève des compétences de ceux qui ont programmé avec le langage C!!!!

  19. #39
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Y'a pas de boucle en assembleur y'a que des sauts, mais qu'est ce tu cherches à savoir vraiment en demandant tout ça ?

  20. #40
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Hello,

    Citation Envoyé par redoran Voir le message
    cas pratique: le fichier tab.php appel fichier sisam.php, interprétation du code avec envoi de résultat ( application de l'instruction 25 sur les 500 instructions). le deuxième appel , l’interpréteur refais la même lecture et envoi le résultat ( application de l'instruction 25 sur les 500 instructions). donc y'a perte de temps en ms. ce qui j'arrive pas a comprendre comment il sait le chemin le plus court de l'instruction 25 parmi les 500 ( exemple champs indexé dans une table suit un algorithme bien définie).
    Tes questions sont légitimes et pour pouvoir te répondre de manière certaine, il faudrait explorer les spécifications de Zend, voire son code source.

    Cela dit, tu as globalement compris le principe… qui n'est d'ailleurs pas récent ! Tous les BASIC des années 1980, embarqués en ROM sur les ordinateurs huit-bits de l'époque et sur les tout premiers PC, fonctionnaient de la même manière et « crunchaient » le programme saisi en une sorte de bytecode, pour les raisons que tu exposes aujourd'hui et parce que la mémoire était très limitée. En outre, faire du parsing d'un code ASCII était coûteux en temps CPU, même si c'est quasiment transparent aujourd'hui.

    Dans le cas du PHP, cela dit, le code est compilé à la volée, au moins la première fois, puisque le code est en principe inclus au sein d'une page HTML, qui passe donc d'abord par ton serveur Web qui, lorsqu'il reconnaît les balises « <?php ?> », en transmet le contenu à l'interpréteur. D'autre part, si on fait abstraction du cas du goto et de l'inclusion multiple d'un même fichier (soit un copier-coller déguisé), le seul moyen de faire un saut vers une partie arbitraire du code entier est d'appeler une fonction.

    On peut donc facilement en déduire que le code produit :

    — Est effectivement indexé ;
    — Qu'il ne l'est qu'aux endroits soit explicitement définis par la syntaxe du code (dans une boucle, par exemple), soit au point d'entrée d'une fonction chaque fois que l'une d'elle est rencontrée ;

    Ensuite, le reste relève de l'optimisation du moteur proprement dit. Par exemple, si le moteur rencontre un appel à une fonction qu'il ne connait pas encore, il peut choisir de laisser l'appel « en blanc » jusqu'à la fin du fichier en cours pour voir s'il la trouve. On peut facilement mettre cela en évidence par le code suivant :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # Fichier helloworld.php
     
    <?php
     
    function helloworld() { echo "<p>Hello, world!</p>\n"; }
     
    ?>

    … puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # Fichier index.php version 1
    <html>
     <head>
      <title>Hello</title>
     </head>
     <body>
      <p>Bonjour</p>
      <?php 
    include "helloworld.php"; # include avant l'appel
    helloworld(); 
      ?>
     <body>
    </html>
    … et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # Fichier index.php version 2
    <html>
     <head>
      <title>Hello</title>
     </head>
     <body>
      <p>Bonjour</p>
      <?php 
    helloworld();
    include "helloworld.php"; #include après l'appel
      ?>
     <body>
    </html>
    Sur ma machine (Apache 2 + PHP 5.3.13), la première version de « index.php » affiche bien « hello, world! » mais pas la seconde, ce qui tend à montrer que l'interpréteur limite la recherche au fichier courant et ne la propage pas en cascade à travers un include.

    Il n'y a donc rien de compilé « a priori » si on ne lui dit pas explicitement de le faire.

Discussions similaires

  1. Conversion d un fichier php en ini
    Par gilles641 dans le forum Langage
    Réponses: 1
    Dernier message: 09/08/2005, 16h54
  2. Ouvrir un fichier.php d'une ihm
    Par Shandler dans le forum MFC
    Réponses: 3
    Dernier message: 02/05/2005, 14h00
  3. Réponses: 2
    Dernier message: 19/08/2004, 17h12
  4. où se trouve le fichier php.ini ?
    Par teko dans le forum Apache
    Réponses: 5
    Dernier message: 28/07/2004, 12h39

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