9
votes

Obtenir des données de formulaire sur 500 erreurs

Je tente de recueillir des informations lorsque nos sites rencontrent une erreur de serveur interne. Nous avons de nombreuses applications qui n'ont jamais été configurées avec une bonne journalisation des erreurs et lorsqu'un problème se produit, nos clients ne nous donnent pas les meilleures informations pour travailler. Ce que j'aimerais faire, c'est que lorsque un 500 se passe, je voudrais collecter des données sur l'endroit où la question s'est produite comme:

  • la page L'utilisateur était sur
  • Toutes les données associées à la page ($ _GET, $ _post, etc.)

    J'ai configuré des pages d'erreur personnalisées sur notre serveur (IIS 7) avec la configuration suivante: xxx

    et sur cette page je suis juste var_dump-ing $ _Post et $ _GET pour voir si quelque chose dans ceux qui concluent à la page d'erreur, mais ce n'est pas le cas. Mon objectif sur une erreur 500 serait:

    • Rassemblez des données sur la page / Utilisateur au moment de l'erreur
    • Envoyez un e-mail pour soutenir l'équipe sur le problème contenant les données recueillies

      existe-t-il un moyen de collecter ces données et de faire la page d'erreur personnalisée le voir?

      error.php: xxx

      Dans tous les cas $ _Post est vide, même si j'ai soumis un formulaire pour obtenir cette erreur et $ _GET contient ceci (ce qui est logique): xxx

      4/19 mise à jour

      J'ai joué avec quelques idées, et le principal étant de stocker des données utiles dans une variable de session. J'ai tenté de stocker des données de formulaire dans une variable de session sur la page de test qui donne l'erreur, mais elle ne pénètre jamais dans la session. Il semble que le serveur détecte qu'une erreur se produise sur la page afin qu'elle n'exécute même aucun code sur la page et exécute immédiatement la page d'erreur.


3 commentaires

Pouvez-vous poster du code à partir du fichier error.php ?


Code et réponse de la page ajoutée.


Peut-être que cela aidera: Stackoverflow.com/questions/7444418/...


4 Réponses :


0
votes

Vérifiez le tableau _ Server Tableau s'il y a quelque chose d'intérêt.

J'ai recherché un peu et si vous utilisiez ASP, vous seriez capable d'obtenir les détails d'erreur dans serveur.getlasterror qui me conduit à croire que l'IIS pourrait transmettre les informations via le serveur $ _ (code> tableau


2 commentaires

J'utilise php. Je peux obtenir la page qu'ils étaient sur demande_uri, mais aucune autre donnée utile dont j'ai besoin.


Je sais que c'est pourquoi j'avais mentionné que l'IIS remontait les informations sur ASP, il peut donc utiliser le tableau $ € _ Server pour donner les informations à PHP.



0
votes

Je pense que vous pouvez configurer un gestionnaire d'erreur personnalisé dans PHP. La chose difficile est que certaines erreurs peuvent causer des calculs PHP et renvoyer une 500 sans déclencher le gestionnaire d'erreur. Le côté plus est qu'il devrait être facile de mettre en œuvre le site de l'environnement sans beaucoup de changements.

http://www.php.net/manual/ fr / fonction.set-error-handler.php

Vous devriez être en mesure de trouver la plupart des informations pertinentes dans le Global $ _Server. Vous pouvez également consulter la fonction debug_backTrace qui vous donnera une trace de pile.

http://php.net/manual/fr/function.debug- Backtrace.php

bonne chance


0 commentaires

2
votes

Je pense que vous devez enregistrer des détails au niveau du serveur plutôt qu'au niveau PHP, car PHP peut ne même pas initialiser lorsqu'une erreur interne sur une 500 interne se produit. Si vous utilisez Apache, vous pouvez vérifier

http://httpd.apache.org/docs/1.3/ mod / mod_log_config.html # logformat

Les journaux d'erreur vous fourniront définitivement une URL de la demande, une adresse distante et des params d'obtention de paramètres (chaîne de requête). Mais je ne suis pas sûr de poster des données. Peut-être que vous pouvez apporter des modifications au format de journal pour jeter les en-têtes entiers et les données brutes à un certain niveau.

Mais je suis sûr que la journalisation au niveau PHP saute à certains moments lorsque le serveur abandonne réellement et PHP ne frappe pas ...


0 commentaires

2
votes

Si votre serveur a commencé à interpréter le fichier PHP et une fois que 500 erreurs ont eu lieu, cela signifie qu'une erreur fatale s'est produite dans votre code. Il peut être n'importe quoi, de la simple typo à la limite de temps d'exécution atteinte.

Le meilleur moyen d'attraper des erreurs fatales dans PHP est avec register_shutdown_function . Vous devez le définir au-dessus de votre fichier de travail: p> xxx pré>

cas de test simple: p> xxx pré>

C'est ce que je reçois Avec mon manuel_fatal de l'exemple: P>

[FATAL] Class 'Dupa' not found in /var/www/index.php:22
GET:
Array ( [page] => dupa )
POST:
Array ( [subpage] => 1 ) 


1 commentaires

Cela semble exactement ce que je cherchais. Merci pour les problèmes potentiels également, je les garderai à l'esprit.