12
votes

Pourquoi obtiendrai "Impossible de modifier les en-têtes d'informations d'en-tête déjà envoyés par erreur_MODEL" Erreur dans le codeigniter?

J'ai un problème avec le modèle dans mon app. Je reçois cette erreur d'envoyer des informations sur les en-têtes. Fondamentalement, le codeigniter se plaint de mon modèle d'enregistrement envoie des informations d'en-tête avant toute autre chose. Comment est-ce possible? Je pensais que les modèles ne sont que pour détenir des méthodes de requêtes de DB et rien de plus. Quelqu'un peut-il s'il vous plaît expliquer cela?

Voici comment le début d'un contrôleur ressemble à: xxx


4 commentaires

Dans quel fichier utilisez-vous les fonctions d'en-tête, le contrôleur ou la vue?


Je reçois toutes les informations d'en-tête dans la vue Sarfaz. J'aurais dû mention que j'avais besoin de réécrire mon enregistrement_model.php parce que je l'ai perdu lorsque j'ai essayé de le télécharger sur le serveur (j'ai perdu la connexion à l'époque) et je n'ai rien fait de sauvegarde (je connais un terrible Sin Programmers ne devrait jamais commettre). Mais au moins je sais qu'il y a quelque chose qui ne va pas avec mon fichier de modèle.


Avez-vous vérifié pour WhitSpace avant / après PHP-Tags?


Veuillez indiquer le message d'erreur exact que vous obtenez.


3 Réponses :


33
votes

Notez que les en-têtes doivent être envoyés avant autre chose. Assurez-vous qu'il n'y a pas de code / html ni même de l'espace / d'indentation avant la fonction d'en-tête et il n'y a rien avant la première étiquette PHP d'ouverture ainsi que la fin de la balise ?> à votre vue.


4 commentaires

Merci Sarfraz pour l'indice - j'ai mis un espace blanche et un commentaire avant la classe du contrôleur. Après avoir retiré, tout est retourné à la normale.


Yup, avait un espace avant


Un simple espace blanc vissé mes 30 minutes (merci pour la pointe @sarfraz


Vient de passer 2 jours à comprendre cela et presque jeté mon ordinateur portable à travers la pièce, partout dans un seul espace avant la



6
votes

En fait, une partie du fournisseur d'accueil utilise PHP en-tête (); code> pour rediriger notre site, donc dans ce type de serveurs si nous utilisons php en-tête () code> il sera Donnez l'erreur. Je pense que oui. Dans le code Igniter Redirection (); code> utilise php en-tête () code> pour rediriger notre URL. C'est donc pourquoi cela donnera cette erreur!

La seule solution est donc utilisée JavaScript pour résoudre ce problème, je l'utilise! Son puits de travail. P>

//Your Code is for redirect
redirect('site/function1');

//Alternate Code for solve this issue
$url = 'site/function1';
echo'
<script>
window.location.href = "'.base_url().'index.php?/'.$url.'";
</script>
';


0 commentaires

38
votes

Placez cet ob_start (); sur la première ligne de index.php strong> Dans votre répertoire d'applications, comme celui-ci:

<?php
ob_start();
/*
 *---------------------------------------------------------------
 * APPLICATION ENVIRONMENT
 *---------------------------------------------------------------


5 commentaires

Pourriez-vous me dire pourquoi cela a travaillé dans mon cas? +1 btw


Cela fonctionne mais pourquoi ?? , quelqu'un peut-il expliquer?


Selon @sarfraz Réponse, ob_start (); allumera la mise en mémoire tampon de sortie. Bien que la mémoire tampon de sortie est active, aucune sortie n'est envoyée du script (autre que les en-têtes).


Sir @gery génial ... sa solution mon problème.


Je dois me connecter pour voter +1, merci