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 :

Temps d'exécution d'un script PHP


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 43
    Points : 28
    Points
    28
    Par défaut Temps d'exécution d'un script PHP
    Bonjour,

    J'ai un script php qui permet de réaliser une galerie d'image à la volée. Ce script ressemble beaucoup à l'article publié sur developpez.com de Pierre-Baptiste Naigeon.

    Pour chaque image contenu dans le répertoire, le script teste si il existe une miniature, et la crée au besoin.

    Lorsqu'un nouveau répertoire est uploadé (via FTP), la première fois que l'on souhaite afficher les images de ce répertoire, le script va donc générer toutes les miniatures. Si le répertoire contient beaucoup d'images, cela prend pas mal de temps, et on peut alors atteindre la limite d'exécution de PHP.

    Pour l'instant, à chaque fois qu'un nouveau répertoire est uploadé, je rafraîchie autant de fois que nécessaire pour générer toutes les miniatures.

    J'aimerais trouver une meilleure solution (automatiser ce traitement).

    Ma première idée serait de compter le nombre de miniatures créées, et de réexécuter le script (via un header(Location: )).

    Avez-vous d'autres idées ?

    Merci.

  2. #2
    Membre confirmé
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Points : 518
    Points
    518
    Par défaut
    D'une réponse que j'ai donnée il n'y a pas longtemps :
    ini_set — Modifie la valeur d'une option de configuration
    Description
    string ini_set ( string $varname , string $newvalue )

    Change la valeur de l'option de configuration varname et lui donne celle de newvalue . La valeur de l'option de configuration sera modifiée durant toute l'exécution du script et pour ce script spécifiquement. Elle reprendra sa valeur par défaut dès la fin du script.
    source php.net

    C'est une fonction qui se place généralement en début de fichier, notamment pour des scripts isolés.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    ini_set('max_execution_time', 0);
    En choisissant la valeur '0' on indique qu'aucune limite est fixée.

  3. #3
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Dans un premier temps, pour ne pas tomber en erreur, tu peux utiliser le set_time_limit()

    http://fr.php.net/manual/fr/function.set-time-limit.php

    Puis utiliser un script en back-office (une page d'administration) qui va balayer tes dossiers pour générer les images.
    Ce sera toujours aussi long pour toi, mais pas pour les visiteurs par las suite.

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Gats Voir le message
    D'une réponse que j'ai donnée il n'y a pas longtemps :
    J'ajouterais quand même de ne pas utiliser la valeur zéro pour ne pas bloquer le navigateur.

  5. #5
    Nee
    Nee est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 50
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    Je propose 2 solutions à ce probleme :
    - si votre configuration le permet, il est possible d'utiliser PHP en ligne de commande.
    Le temps d'execution n'est pas limité, cela évite de passer par un navigateur, et en plus cela permet de loguer facilement le résultat (sortie standard redirigé dans un fichier, et bien plus si besoin).
    - utiliser une page HTML centrale qui lance plusieurs scripts : pour chaque nouveau fichier, créez une balise <img> par exemple, qui appellera le script (<img src="monServeur/monScriptDeGeneration.php?i=img1.jpg" />).
    Votre script de génération pourra même afficher la miniature a la fin du traitement.
    N'oubliez pas de limiter le nombre d'images générées en même temps, pour éviter de surcharger le serveur.

    Voila.

  6. #6
    Membre confirmé
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Points : 518
    Points
    518
    Par défaut
    Citation Envoyé par jml94 Voir le message
    J'ajouterais quand même de ne pas utiliser la valeur zéro pour ne pas bloquer le navigateur.
    C'est à dire ? je n'ai jamais eu ce problème.

    D'ailleurs je ne l'invente pas c'est bien écrit sur la page de php.net
    Le temps maximal d'exécution, en secondes. S'il vaut 0, aucune limite n'est imposée.

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Gats Voir le message
    C'est à dire ? je n'ai jamais eu ce problème.

    D'ailleurs je ne l'invente pas c'est bien écrit sur la page de php.net
    Oui, c'est tout à fait juste.
    C'est juste qu'à mon avis il est préférable de fixer une limite très grande que pas de limite du tout.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 43
    Points : 28
    Points
    28
    Par défaut
    Merci pour vos réponses.

    Concernant, ini_set je connaissais cette possibilité, mais je n'avais pas envie de modifier cette valeur vue que le traitement des miniatures n'est fait qu'une fois, et c'est très rare.

    Je vais regarder du coté de set_time_limit qui permet de rallonger le temps d'exécution "à la volée".

    Pour Nee, non je n'ai pas accès à php en ligne de commande. Je n'ai pas compris ta deuxième solution.

  9. #9
    Membre confirmé
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Points : 518
    Points
    518
    Par défaut
    Citation Envoyé par punx120 Voir le message
    Merci pour vos réponses.

    Concernant, ini_set je connaissais cette possibilité, mais je n'avais pas envie de modifier cette valeur vue que le traitement des miniatures n'est fait qu'une fois, et c'est très rare.

    Je vais regarder du coté de set_time_limit qui permet de rallonger le temps d'exécution "à la volée".

    Pour Nee, non je n'ai pas accès à php en ligne de commande. Je n'ai pas compris ta deuxième solution.
    c'est la même chose c'est juste pour le script en cours !

    Note: La fonction set_time_limit() et la directive de configuration max_execution_time n'affectent que le temps d'exécution du script lui-même. Tout temps passé en dehors du script, comme un appel système utilisant system(), des opérations sur les flux, les requêtes sur base de données, etc. n'est pas pris en compte lors du calcul de la durée maximale d'exécution du script.

  10. #10
    Nee
    Nee est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 50
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par punx120 Voir le message
    Pour Nee, [...] Je n'ai pas compris ta deuxième solution.
    Soit ton script de création de miniature "creerMiniature.php" qui prends en parametres le nom de l'image à traiter (creerMiniature.php?img=photo1.jpg).

    Soit un autre script qui parcours le dossier contenant les fichiers à traiter.
    C'est ce script qui est appelé dans le navigateur.
    Pour chacun de ces fichiers, on affiche simplement une balise HTML "img", avec comme "src" le premier script. Ce qui donnera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <img src="creerMiniature.php?img=photo1.jpg" />
    <img src="creerMiniature.php?img=photo2.jpg" />
    <img src="creerMiniature.php?img=photo3.jpg" />
    Lorsque cette page sera interpretée par le navigateur, elle appellera tous les scripts "creerMiniature" dans des process séparés. Toutes ces miniatures seront générées, il n'y aura pas de probleme de temps d'execution.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 43
    Points : 28
    Points
    28
    Par défaut
    OK, merci pour vos réponses.

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

Discussions similaires

  1. limitation de temps pour l'exécution d'un script php
    Par franco9 dans le forum Langage
    Réponses: 2
    Dernier message: 05/03/2013, 14h09
  2. Temps d'exécution d'un script PHP
    Par yann123456 dans le forum Langage
    Réponses: 1
    Dernier message: 26/06/2009, 12h55
  3. Le temps d'exécution de vos scripts perl!!
    Par djibril dans le forum Langage
    Réponses: 5
    Dernier message: 17/06/2009, 10h42
  4. Réponses: 3
    Dernier message: 24/06/2007, 01h24
  5. [MySQL] Temps d'exécution d'un script PHP/MySQL
    Par BornBanane dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/06/2007, 15h57

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