2011-06-06 4 views
2

J'ai un script php écrit qui appelle une commande externe en utilisant exec qui compile un résultat de requête de base de données spatiale dans un fichier de forme. Dans les tables avec beaucoup d'enregistrements (disons 15 000), cette commande peut durer jusqu'à 7 minutes. Le script fonctionne bien sur les scripts qui ne prennent pas trop de temps (peut-être < 2min) mais sur les scripts plus longs (comme celui de 7 minutes) la page affichera "500 erreur interne du serveur". Lors de l'examen du journal du serveur Apache, l'erreur indique: "Fin prématurée des en-têtes de script: php-cgi.exe". J'ai déjà ajusté le temps d'exécution maximum de php pour permettre plus que suffisamment de temps, donc je sais que ce n'est pas ça. Y a-t-il un maximum d'Apache qui est touché, ou autre chose?exec de php provoque une erreur «fin prématurée des en-têtes de script: php-cgi.exe»

Répondre

1

La fin prématurée des en-têtes de script signifie que le délai d'attente du serveur Web pour les scripts CGI a été dépassé par votre script. C'est un timeout de serveur web et cela n'a rien à voir avec la configuration de php.ini. Vous devez examiner la configuration de votre gestionnaire CGI pour augmenter le temps d'exécution des scripts CGI.

E.g. Si vous utilisez mod_fastcgi, vous pouvez spécifier l'option suivante dans votre configuration Apache: FastCgiServer -idle-timeout 600 qui vous donnera un délai de 10 minutes. Par défaut, fastcgi fournit 30 secondes. Vous pouvez trouver d'autres options fastcgi ici http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html

1

Apparemment, le fichier httpd.conf par défaut inclus dans Apache 2.4 ne comprend pas automatiquement le fichier supplémentaire httpd-default.conf sous/conf/extra (probablement par la conception) , qui inclut le paramètre timeout. Comme le paramètre timeout n'est pas défini, il revient à la valeur par défaut de 30 secondes et vos scripts expirent.

j'ai fait ce qui suit pour le résoudre:

  • Ouvert httpd.conf et a ajouté la ligne suivante au fond:

Inclure fichier conf/extra/httpd par défaut.

conf

  • Restarted Apache, et ça a marché.

Une alternative serait d'ajouter simplement la ligne suivante (s) au httpd.conf fichier:

Délai d'attente 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

Espérons que cela aide quelqu'un là-bas :)

Questions connexes