2010-08-13 6 views
1

J'ai mon site en direct dans lequel je répétai quelques chaînes pour le test, il me affiché ces chaînes de test, mais en même temps que le message d'avertissementAvertissement pour les informations d'en-tête dans mon serveur de test, mais pas en local pourquoi?

Avertissement: Impossible de modifier en-tête information - en-têtes déjà envoyés par (sortie commencé à /home/companyfolder/public_html/mycart.php:117) dans /home/companyfolder/public_html/includes/functions/general.php en ligne 50

Mais en même temps je fais pas obtenir cette erreur un ny où dans ma machine locale, donc je veux savoir, y at-il une différence dans l'affichage des informations d'en-tête liés aux serveurs?

Répondre

1

En raison de tampon de sortie

Et pas un seul, qui sont portés volontaires pour partager leurs connaissances sur la gestion des erreurs, a mentionné une façon de raison la plus probable - display_errors est désactivé, comme il devrait être sur le site en direct.

Bien sûr, il devrait être. Pour

  • ne pas effrayer les utilisateurs avec des messages étranges
  • ne pas révéler les informations vitales de votre application attaquant possible. ni pour leur fournir des commentaires.
  • informer un programmeur de toutes les erreurs a eu lieu, en tournant log_errors paramètre sur

Ainsi, sur un site de développement

display_errors = on 
log_errors = off 

sur un site en

display_errors = off 
log_errors = on 

tandis que d'erreur reporting niveau devrait rester le même - E_A LL ou mieux

+0

Est-il bon de faire display_errors est désactivé sur place en direct? –

+0

@OM c'est le seul choix possible. Une règle obligatoire. Voir une réponse mise à jour pour l'explication formatée de fantaisie. –

+0

Alors que display_errors() devrait certainement être désactivé sur un serveur de production, "test" et "machine locale" impliquent tous deux des environnements de développement dans lesquels vous ne voudriez certainement pas * display_errors() désactivé. – jasonbar

0

Vous avez le même problème dans les deux endroits, juste différents niveaux de rapport d'erreur. Vous pouvez configurer dans votre fichier php.ini ou à l'exécution avec error_reporting()

0

Cette erreur est assez générale, mais fondamentalement ce qui se passe est ce qu'il dit. Vous incluez mycart.php dans une page et comme 117 il commence à sortir du HTML (ou quelque chose du côté client), une fois que cela commence, vous ne pouvez pas modifier les informations d'en-tête (par exemple une redirection). Comme jason a dit cependant, la raison pour laquelle l'erreur ne s'affiche pas est le paramètre error_reporting.

EDIT: Vous pouvez résoudre certains de ces problèmes en utilisant ob_start() puis ob_end_flush() après avoir modifié votre en-tête.

+0

Ont-ils un problème? –

+0

Et s'ils en ont un, il doit être résolu avec un design d'application approprié, pas un patch sale. La mise en mémoire tampon de sortie est un outil, pour son propre usage, pour ne pas cacher des trous dans la conception de l'application. Une bonne application planifiée ne produira jamais rien avant l'envoi des en-têtes. –

0

Votre autre configuration de serveur peut avoir output buffering activée dans le fichier php.ini.

0

Le serveur a ceci dans php.ini

error_reporting(E_ALL); 

si vous voulez juste des erreurs puis utilisez

error_reporting(E_ERROR | E_PARSE); 
+0

personne ne veut error_reporting à un niveau autre que E_ALL ou E_STRICT –

Questions connexes