web-dev-qa-db-fra.com

délai d'expiration php - set_time_limit (0); - ne fonctionne pas

J'ai un problème avec mon fichier PHP qui prend plus de 30 secondes à exécuter.

Après la recherche, j'ai ajouté set_time_limit(0); au début du code, mais le fichier arrive toujours à expiration avec un 500 error après 30 secondes.

log: PHP Fatal error:  Maximum execution time of 30 seconds exceeded in /xxx/xx/xxx.php

safe-mode : off
24
user614963

Vérifiez le php.ini

ini_set('max_execution_time', 300); //300 seconds = 5 minutes

ini_set('max_execution_time', 0); //0=NOLIMIT
27
user1601782

Ceci est un vieux fil de discussion, mais je pensais que je posterais ceci link , car cela m'a beaucoup aidé sur ce problème. Essentiellement, ce qu'il dit, c'est que la configuration du serveur peut remplacer la configuration php. De l'article:

Par exemple, mod_fastcgi a une option appelée "-idle-timeout" qui contrôle le temps d'inactivité du script. Donc, si le script ne génère rien pour le gestionnaire fastcgi pendant autant de secondes, fastcgi le terminera. La configuration ressemble un peu à ceci:

Apache <-> mod_fastcgi <-> php processes

L'article contient d'autres exemples et d'autres explications. J'espère que cela aide quelqu'un d'autre.

6
Paul

J'utilise habituellement set_time_limit (30) dans la boucle principale (donc chaque itération de boucle est limitée à 30 secondes plutôt que le script entier).

Je le fais dans plusieurs scripts de mise à jour de la base de données, qui prennent généralement plusieurs minutes pour terminer mais moins d'une seconde pour chaque itération - garder la limite de 30 secondes signifie que le script ne restera pas coincé dans une boucle infinie si je suis assez stupide pour en créer un .

Je dois admettre que mon choix de 30 secondes pour la limite est quelque peu arbitraire - mes scripts pourraient en fait s'en tirer avec 2 secondes à la place, mais je me sens plus à l'aise avec 30 secondes compte tenu de l'application réelle - bien sûr, vous pouvez utiliser la valeur que vous ressentez adapté.

J'espère que cela t'aides!

4
SteJ
ini_set('max_execution_time', 300);

utilisez ceci

2
Anooj P

Checkout this, This is from PHP MANUAL , Cela peut vous aider.

Si vous utilisez PHP_CLI SAPI et obtenez l'erreur "Temps d'exécution maximal de N secondes dépassé" où N est une valeur entière, essayez d'appeler set_time_limit (0) toutes les M secondes ou chaque itération. Par exemple:

<?php

require_once('db.php');

$stmt = $db->query($sql);

while ($row = $stmt->fetchRow()) {
    set_time_limit(0);
    // your code here
}

?>
1
Vins