Comment empêcher un script php d'expirer en raison d'une longue requête mysql
J'ai une requête de mise à jour en cours d'exécution par une tâche cron, c'est le timing. La requête prend, en moyenne, cinq minutes pour exécuter lors de l'exécution dans navicat.
Le code ressemble à peu près comme ceci. C'est très simple:
//$db is a mysqli link
set_time_limit (0); //should keep the script from timing out
$query = "SLOW QUERY";
$result = $db->query($query);
if (!$result)
echo "error";
Même si le script ne devrait pas le délai d'attente, le temps passé à attendre l'appel sql semble faire l'objet d'un dépassement de délai.
Est-il un appel asynchrone qui peut être utilisé? Ou de régler le délai d'attente?
Est le délai d'attente différent parce qu'il est appelé à partir de la ligne de commande plutôt que par le biais d'Apache?
Grâce
source d'informationauteur Eric Goodwin | 2008-12-13
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème somwhere, et "résolu" avec le code suivant (les deux premières lignes de mon fichier):
Selon la manuel:
Il est donc peu probable d'avoir quelque chose à voir avec PHP limite de temps. Quel message avez-vous quand il expire? Peut-être il y a un serveur MySQL d'un paramètre en cause.
Est votre php exécute en mode sans échec? Citation de Manuel PHP de set_time_limit:
En supposant que vous êtes sur linux, basé sur Debian systèmes ont des configurations distinctes pour mod_php/php, cgi et php-cli. Cela ne devrait pas être trop difficile à mettre en place sur un autre système linux qui n'est pas séparée de la cgi/cli configuration.
Une fois que vous avez séparé les configs, je voudrais ajuster votre php cli configuration. Désactiver le safe mode et les limites de temps et de mémoire ram limites.
Découvrez quelques-unes de la limite des ressources variables en php,ini:
max_execution_time, max_input_time, memory_limit
Vous pouvez également définir une limite de temps pour le script en PHP lui-même:
http://ca3.php.net/set_time_limit