Question

Salut est-il possible de définir la limite de temps à une seule commande ou seulement à une fonction, par exemple:

function doSomething()
{
    //..code here..

    function1();

    //.. some code here..

}

Je veux définir la limite de temps seulement pour function1.

Il sort set_time_limit mais je pense que cela fixe la limite de temps à l'écriture entier. Tout le monde une idée?

Était-ce utile?

La solution

set_time_limit () ne fonctionne globalement, mais il peut être remis à zéro localement.

  

Définissez le nombre de secondes un script est autorisé à exécuter. Si cette limite est atteinte,   le script retourne une erreur fatale. La limite par défaut est de 30 secondes ou, si elle   existe, la valeur max_execution_time définie dans le php.ini.

     

Quand elle est appelée, set_time_limit() redémarre le compteur de délai d'attente de zéro. Dans   Autrement dit, si le délai d'attente est la valeur par défaut 30 secondes et 25 secondes   dans l'exécution du script d'un appel tel que set_time_limit (20) est réalisée, le script   se déroulera pour un total de 45 secondes avant de sortir.

Je ne l'ai pas testé, mais vous pouvez être en mesure de le régler sur place, remise à zéro lorsque vous quittez la

<?php
set_time_limit(0);  // global setting

function doStuff()
{
    set_time_limit(10);   // limit this function
    //  stuff
    set_time_limit(10);   // give ourselves another 10 seconds if we want
    //  stuff
    set_time_limit(0);    // the rest of the file can run forever
}

// ....
sleep(900);
// ....
doStuff();  // only has 10 secs to run
// ....
sleep(900);
// ....

set_time_limit () ... Tous le temps consacré à l'activité qui se passe en dehors de l'exécution du script tels que les appels système à l'aide des opérations, des flux système (), les requêtes de base de données, etc. ne sont pas inclus dans le calcul du temps maximal que le script a été en cours d'exécution. Ce n'est pas vrai sur Windows où le temps mesuré est réel.

Autres conseils

Vous auriez besoin de code qui vous-même si vous voulez function1 pour revenir lorsque la limite de temps est écoulé.

function doStuff($seconds)
{
    $finish=time()+$seconds;

    $done=false;
    $timeout=false;

    while (!$done && !$timeout)
    {
        //do stuff here, set $done to true if you complete

        //out of time?
        $timeout=time() >= $finish;

    }

    return $done; //let caller know if we completed
}

Bien sûr, les « trucs » que vous a besoin d'être itérative afin que vous puissiez garder le contrôle sur votre temps écoulé et de quitter si nécessaire.

Si vous voulez l'exécution délai d'attente d'une fonction arbitraire et le contrôle revient à vous, non pris en charge. Si vous avez vraiment besoin de le faire, l'ingénieur comme un processus distinct. Ensuite, vous pouvez fermer le processus si elle semble prendre trop longtemps.

$endtime=time()+10;

while(time()!=$endtime){

    echo ".";
}

Non, il est impossible: max_execution_time est utilisé comme mesure de sécurité, pour éviter d'avoir des scripts buggy (comme boucle infinie) détruire le serveur; mais il ne vise pas à travailler sur une base fonction unité.

Et le fait qu'il se retrouve avec une erreur fatale est pas agréable pour definitly l'utilisateur de toute façon ...

J'utilise exec pour exécuter shellscript qui génère l'exportation depuis une application externe. Si script est exécuté trop long, max_execution_time est atteint et l'utilisateur ne saura jamais ce qui est arrivé. Limitation à cette fonction me aider à déterminer si fin est proche et envoyer une erreur facile à utiliser.

Je ne pense pas que cela est possible, mais pourquoi voulez-vous faire? Si un script est toujours interrompu je ne pourrais pas ne veux que vous le souhaitez. Cela devrait être plus comme une protection contre vous (juste au cas où vous téléchargez une boucle sans fin ou quelque chose qui va prendre des heures), mais si votre script prend beaucoup de temps, vous devez soit lui donner le temps qu'il faut, ou changer le script de sorte qu'il est plus rapide (pour certains crons son ok pour prendre un certain temps, mais si un script normal que l'on appelle prend souvent plus de la limite de temps par défaut, vous pourriez faire face à des problèmes de performance graves)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top