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 :

Une boucle While


Sujet :

Langage PHP

  1. #1
    Inactif   Avatar de Diabless6
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 143
    Points : 58
    Points
    58
    Par défaut Une boucle While
    Bonsoir,

    Voilà j'ai tapé ce code tout simple, d'un livre dont je perfectionne mes connaissances PHP5 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
            $i=0;
            while ($i<10000000000) (j'ai modifié ici)
            {print("<br /> $i ");
            $i++;
            } ;
            
         ?>
    Non seulement le traitement est long malgré 2 cores. Il y a que Firefox qui est sollicité pour l'affichage.

    Mais je reçois ce message :
    Fatal error: Maximum execution time of 60 seconds exceeded in C:\UwAmp\www\Php\index.php on line 101
    La boucle s'arrête sur 799063,voir 828949, très aléatoire. je suis bien loin du compte.

    Comment peut on expliquer cette lenteur et ce message ? Comment peut on optimiser le temps de traitement d'une page PHP ?

    Merci

  2. #2
    Inactif   Avatar de Diabless6
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 143
    Points : 58
    Points
    58
    Par défaut
    Ben en faîtes, après avoir arrêter Apache donc le PHP à la même occasion, les navigateurs suivent pas le flux de la page PHP qui a été envoyé par le serveur j'ai l'impression.

    Avec un echo je n'ai plus de message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {echo'<br />'.$i;
            $i++;
    Apache n'a consommé que 2% de cpu. Donc ça serait les navigateurs qui seraient long à traiter une page qui arrive !

  3. #3
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    En même temps, 10 milliards d'itérations, ça fait beaucoup. Qu'il en traite presque un petit million, c'est déjà pas mal

    Le message d'erreur est explicite, le navigateur n'y est absolument pour rien. Ton script est tellement long à se terminer (passe à quelques millions d'itérations, ça suffira pour tes tests je pense) que c'est le serveur Apache-PHP qui le coupe dans sa lancée. Dans chaque serveur, t'as un fichier de configuration qui définit notamment la durée maximale d'exécution d'un script.
    Chez toi, elle est réglée à 60 secondes.

    Donc soit, tu réduis le nombre d'itérations, soit tu augmentes ce temps.

  4. #4
    Inactif   Avatar de Diabless6
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 143
    Points : 58
    Points
    58
    Par défaut
    10 milliards d'itération ça fait beaucoup certes j'en conviens.
    Mais même en mettant 1 millions d'itérations c'est long.
    On imagine vite le million de visiteur qui pourrait saturer un serveur.

    en rajoutant ça :
    soit 3mins d'itérations
    197215
    197215 itérations
    Fatal error: Maximum execution time of 180 seconds exceeded in C:\UwAmp\www\Php\index.php on line 103
    Apache et PHP il n'y a même pas 1% du temps octroyer aux CPUs !
    Alors que le navigateur lui est monopolisé pour l'affichage de celles-ci

    Je reste septique pours plusieurs raisons: les navigateurs ne prennent pas en charge encore l'accélération matériel, Apache non plus et PHP encore moins peut être dans la version 6.
    Le code n'est pas optimisé pour exploiter la puissance du matos. Deplus les scripts deviennent de plus en plus gourmands en resssources.

    On a toujours mis la charrue avant les beux... Moi j'aimerai un serveur et un php qui fonctionne aux maximum de ces possibilités sous entendu du navigateur aussi.

  5. #5
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    Effectivement, PHP ne consomme pas toutes les ressources de ton CPU. Cependant, il faut absolument te rappeler quelque chose de crucial: il n'y a absolument aucun rapport entre le navigateur et l'exécution de PHP.

    Tu pourrais avoir un navigateur qui soit violemment optimisé et usant de toutes les astuces pour utiliser au maximum les ressources matérielles que ça ne changerait absolument rien à l'exécution de tes scripts PHP.

    Par ailleurs, il y a une énorme différence entre 1 millions de boucles de 10 itérations et 1 boucle de 10 millions d'itérations : le premier cas signifie 1 millions d'exécutions, soit 1 millions fois 30 secondes (ou maintenant 180 dans ton cas), le deuxième signifie 1 seule fois 30 secondes (ou...)

    Ce test ne peut pas te fournir une vision correcte de charge serveur

Discussions similaires

  1. [Tkinter] Méthode get() dans une boucle while
    Par Thundie dans le forum Tkinter
    Réponses: 2
    Dernier message: 04/02/2006, 00h06
  2. Problème de SCANF dans une boucle WHILE
    Par FidoDido® dans le forum C
    Réponses: 4
    Dernier message: 30/12/2005, 17h42
  3. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07
  4. Réponses: 6
    Dernier message: 17/06/2005, 16h51
  5. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51

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