2016-11-28 4 views
0

J'ai une application écrite dans le framework PHP CodeIgniter. L'un des contrôleurs exécute une fonction qui lit un fichier relativement volumineux, puis ligne par ligne commence à insérer/mettre à jour les informations dans la base de données. Cela, bien sûr, prend un peu de temps, donc je voudrais obtenir un délai d'attente du serveur.Exécution d'une tâche en arrière-plan pour empêcher 504 Gateway Timeout

Sur mon localhost je pouvais contourner ce problème en appelant:

set_time_limit(0); 

Cependant, le serveur de production (je suppose) est tout à fait différent, donc même avec ce code je recevrais une erreur là:

504 Passerelle Time-out nginx/1.8.0

pour empirer les choses, je n'ai pas accès à la configuration du serveur, donc je ne peux pas augmenter tout les valeurs pour les délais d'attente du serveur, même si je pouvais déterminer lequel causait le problème. Au lieu de cela ma question est, comment puis-je dire PHP pour exécuter cette tâche en arrière-plan car je n'ai pas besoin d'avoir un navigateur ouvert ou quoi que ce soit pendant que cela se produit, tout ce qui m'importe c'est d'avoir la fonction terminer son travail A l'avenir?

+0

pourriez-vous faire un essai attraper pour la demande de passerelle? Si cela échoue préparer et envoyer une autre demande où vous vous êtes arrêté? – atoms

Répondre

-1

Pour augmenter le temps d'exécution de PHP, vous pouvez remplacer les paramètres globaux php.ini du serveur en utilisant le fichier .user.ini sur votre site Web.

http://www.php.net/manual/en/configuration.file.per-user.php

Et pour nginx, lorsque la demande est reçue, vous pouvez répondre nginx avec réponse de succès de php et fermer la connexion nginx.