30 votes

Ini_set ('max_execution_time', 0) est-il une mauvaise idée?

Est-il une bonne raison de ne pas définir la configuration de PHP variable max_execution_time à 0?

Un collègue récemment vérifié dans une modification à un fichier qui a ajouté:

ini_set('max_execution_time', 0);

La valeur par défaut avait été trop faible pour une page qui fait un peu complexe de traitement avant de retourner à la sortie de l'utilisateur.

Le manuel indique que le principal objectif du cadre est de:

prévenir le mal des scripts écrits à partir d'encombrer le serveur.

Mais va également à l'etat:

Votre serveur web peut avoir d'autres timeout configurations qui peuvent également interrompre PHP exécution. Apache a un Délai d'attente de la directive et IIS dispose d'un CGI fonction de délai. Les deux par défaut à 300 secondes. Voir la documentation de votre serveur web pour plus de détails.

Nous sommes en cours d'exécution en vertu de l'Apache, de sorte que le Délai d'attente paramètre s'applique. Est-il une raison de ne pas fixer max_execution_time à zéro à l'échelle mondiale? Je suis surtout curieux de savoir si il y a des avantages, je suis surplombant quand pas de réglage à zéro.

36voto

Teekin Points 4544

Au risque de vous irriter;

Vous vous posez la mauvaise question. Vous n'avez pas besoin d'une raison pour ne PAS s'écarter de la valeur par défaut, mais dans l'autre sens. Vous avez besoin d'une raison de le faire. Délais d'attente sont absolument indispensables lors de l'exécution d'un serveur web et de désactiver ce paramètre sans raison est intrinsèquement contraire à la bonne pratique, même si elle est en cours d'exécution sur un serveur web qui arrive à avoir un délai d'attente de la directive qui lui est propre.

Maintenant, comme pour la vraie réponse; sans doute il n'a pas d'importance dans ce cas particulier, mais c'est une mauvaise pratique de passer par la création d'un système séparé. Que faire si le script est, plus tard, sur un autre serveur avec un autre délai d'attente? Si vous pouvez sans risque dire que cela n'arrivera jamais, bien, mais une bonne pratique est en grande partie sur la comptabilité pour apparemment peu probable des événements et de ne pas inutilement de faire le lien entre les paramètres et les fonctionnalités de des systèmes complètement différents. Le licenciement de ces principes est responsable de beaucoup de inutile incompatibilités dans le monde du logiciel. Presque à chaque fois, ils sont imprévisibles.

Que faire si le serveur web plus tard est configuré pour s'exécuter certains autres runtime environnement qui n'hérite le paramètre de délai d'expiration du serveur web? Disons, par exemple, que plus tard vous avez besoin d'un 15-year-old programme CGI écrit en C++ par quelqu'un qui a déménagé vers un autre continent, qui n'a aucune idée de tout délai d'attente à l'exception du serveur web. Qui pourrait en résulter, dans le délai de devoir être changé et parce que PHP est inutilement en s'appuyant sur le serveur web du délai d'attente au lieu de son propre, qui peut causer des problèmes pour le script PHP. Ou, à l'inverse, que vous avez besoin d'un moindre serveur web de délai d'attente pour une raison quelconque, mais PHP a encore besoin d'avoir de plus en plus haut.

Il est tout simplement pas une bonne idée de lier les fonctionnalités de PHP sur le serveur web parce que le serveur web et PHP sont responsables pour les différents rôles et devrait être conservé comme fonctionnellement distincte que possible. Lorsque le PHP côté a besoin de plus de temps de traitement, il doit être un cadre en PHP tout simplement parce qu'il est lié à PHP, pas nécessairement tout le reste sur le serveur web.

En bref, c'est juste inutilement l'amalgame entre la question quand il n'est pas nécessaire pour.

Dernier mais non le moindre, 'stillstanding' est juste; vous devez au moins utiliser plutôt set_time_limit() que ini_set().

Espérons que ce n'était pas trop paternaliste et irritant. Comme je l'ai dit, sans doute, c'est bien en vertu de votre situation spécifique, mais c'est une bonne pratique de ne pas assumer les circonstances, à être le seul Vrai Circonstance. C'est tout. :)

4voto

HelloDolly1 Points 31

La raison est d'avoir une valeur autre que zéro. De manière générale, ont un temps court à l'échelle mondiale et à long terme pour les longues journées de travail, des scripts comme les analyseurs, les chenilles, les dumpers, exportateurs et importateurs de scripts etc.

  1. Vous pouvez arrêter le serveur, corrompus travail des autres en mémoire consommer script sans même le savoir.
  2. Vous ne serez pas en voyant erreurs où quelque chose de, disons, boucle infinie qui s'est passé, et il sera plus difficile à diagnostiquer.
  3. Un tel site peut être facilement Dosé par un seul utilisateur, lors de la demande de pages avec des temps d'exécution

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X