web-dev-qa-db-fra.com

Erreur 500 serveur: Fin prématurée des en-têtes de script:

J'ai un site Web en php qui fonctionne avec un serveur d'indexation solr, basé sur CodeIgniter.

Nous avons eu beaucoup de nouveau contenu, nous avons donc vidé la base de données et avons dû réindexer le contenu (environ 168 000 éléments). J'ai créé un script pour indexer le contenu par tranches de 500. Une fois le script terminé, nous lançons la prochaine indexation.

Cela fonctionne parfaitement sur mon environnement de test local, mais je reçois cette erreur 500 en production:

[Thu Dec 02 ...] [error] [client IP] Premature end of script headers: index.php

Il n'y a absolument rien dans mon php.log, juste le journal d'erreur Apache qui le renvoie. Je l'ai vu se produire une ou deux fois sur d'autres pages du site Web, mais c'était pendant cette indexation.

Des idées?

22
Stéphane Goetz

Cette erreur est généralement (parfois) provoquée par la configuration FastCGI de la directive FcgidIOTimeout (ancien nom: IPCCommTimeout).

C'est le nombre de secondes pour le délai d'attente de IO, la valeur par défaut est de 40 secondes. Timeout signifie que 

"L'application FastCGI doit commencer à générer la réponse dans ce délai. Augmentez cette directive si nécessaire pour traiter les applications dont le délai de réponse est relativement long."

Vous pouvez essayer de le résoudre en le mettant dans votre vhost.conf:

<IfModule mod_fcgid.c>
  # 5 minutes for IO timeout, default is 40 seconds
  FcgidIOTimeout 300
</IfModule>

Vous pouvez l'augmenter selon vos besoins, puis restaurer la valeur d'origine une fois le processus de réindexation terminé.

24
Fabrizio D'Ammassa

Il existe une bonne liste de possibilités sur la base de connaissances de Liquid Web;

  1. La mise à niveau ou la rétrogradation vers une version différente de PHP peut laisser des options résiduelles dans le fichier httpd.conf. Vérifiez la version actuelle de PHP en utilisant php -v sur la ligne de commande et recherchez les lignes mentionnant une autre version dans le fichier httpd.conf. Si vous les trouvez, commentez-les, distillez le fichier httpd.conf et redémarrez Apache.

  2. Les directives RLimitCPU et RLimitMEM dans le fichier httpd.conf peuvent également être responsables de l'erreur si un script a été tué en raison d'une limite de ressources.

  3. Un problème de configuration dans suEXEC, mod_Perl ou un autre module tiers peut souvent interférer avec l'exécution des scripts et provoquer l'erreur. Si tel est le cas, des informations supplémentaires relatives à des informations spécifiques sont disponibles dans Apache error_log.

  4. Si le journal de suphp atteint une taille égale ou supérieure à 2 Go, vous risquez de voir une erreur prématurée de fin d’en-tête de script. Voir ce que le journal contient et gzip ou null. Redémarrez Apache, puis résolvez les problèmes signalés par le journal suphp. Le journal suphp se trouve à:/usr/local/Apache/logs/suphp_log

  5. Les autorisations du script peuvent également provoquer cette erreur. Les scripts CGI peuvent uniquement accéder aux ressources autorisées pour l'utilisateur et le groupe spécifiés dans le fichier httpd.conf. Dans ce cas, l'erreur peut simplement indiquer qu'un utilisateur non autorisé tente d'accéder à un script.

http://www.liquidweb.com/kb/Apache-error-premature-end-of-script-headers/

Si j'étais dans la même situation, je vérifierais d'abord les autorisations, puis continuerais avec 3 et 4.

4
Tim

Je recevais également ce message d'erreur dans etc/httpd/logs/error_log après une erreur de serveur interne 500 lors d'une tentative de chargement d'un site Web.

Pour moi, la solution était des autorisations - devait chmod 755 le fichier. J'avais créé le fichier en tant qu'utilisateur de niveau d'accès supérieur à celui qui "chargeait" le site sur le serveur.

2
the.s.brom

c'est aussi possible parce que PHP APC Extension est mal utilisé . Donc, commencez par retirer apc.so de php.ini, redémarrez Apache et testez-le à nouveau :)

1
Jacob Arlington

J'ai eu ce problème et après avoir lutté pendant plus de 5 heures, j'ai désactivé xcache et tout est rentré dans l'ordre, l'erreur a disparu!

0
Youssef K. Yassin

Quel est votre error_level en php? Le message d'erreur que vous obtenez dans le journal est souvent le résultat d'une simple erreur PHP, mais le serveur est configuré pour ne pas envoyer de messages d'erreur au client pour des raisons de sécurité. Par cela, le message n’est pas très utile, cela pourrait être tout. 

0
Dr.Molle