2010-06-21 4 views
4
  function new_photo() 
      { 

       if(!empty($this->data)) 
       { 
         $this->data['Photo']['showcase_id'] = $this->Session->read('CurrShowcase.id'); 
         $this->data['Photo']['added'] = date("Y-m-d H:i:s"); 
         $this->Showcase->Photo->save($this->data); 

         $flasher = 'Photo uploaded successfully'; 
         $flasher .= '<br/><img src="' . $this->data['Photo']['thumbnail_url'] . '"/>'; 
         $this->Session->setFlash($flasher); 
         //$this->redirect(array('action'=>'sc',)); 
       } 
      } 

J'ai un contrôleur Showcase dans mon application CakePHP, et un nouveau formulaire photo pour soumettre de nouvelles photos. Chaque fois que je décommenter la dernière ligne qui redirige après les données sont enregistrées, je reçois cette erreur:En-têtes déjà envoyé une erreur dans l'application CakePHP

Warning (2): Cannot modify header information - headers already 
sent by (output started at D:\..... 

Même si je reçois cette erreur, $ this-> données obtient encore enregistrée correctement dans la base de données. Cependant, si je commente la ligne de redirection comme indiqué ci-dessus, tout fonctionne correctement et sans erreur. J'ai vérifié les espaces vides autour des étiquettes, donc je suis presque sûr que ce n'est pas ça.

Des idées?

Modifier: en commentant l'instruction setFlash ne résout pas le problème.

+0

Avez-vous essayé de rediriger vers une autre action? Pourquoi ne supprimes-tu pas la virgule après 'sc'? – bancer

+0

La virgule était l'un des problèmes. J'avais en fait un print_r ($ this-> Session-> read ('CurrUser.username')); print_r ($ this-> Session-> read ('CurrShowcase.id')); avant l'instruction if qui a causé quelques problèmes. – vette982

Répondre

3

Modifiez votre mode de débogage à 0 pour vous assurer que ce n'est pas un avis/avertissement généré avant la redirection. De plus, vous pouvez resserrer votre section de traitement pour être (paranoïaque) et vous assurer qu'elle n'utilise pas d'index non valides, ni ailleurs dans le flux de l'application pour s'assurer que vous n'obtenez aucune sortie (si elle fonctionne lorsque vous modifiez le débogage à 0).

0

Je suppose que setFlash génère quelque chose dans le navigateur?

Si un espace avant ou après vos balises <? Php?> N'est pas votre problème, vous devrez peut-être passer 'null' pour le paramètre 'layout' de setFlash();

à savoir

$this->Session->setFlash($flasher, null); 
+0

Oui, il ne fait que clignoter un message (dans ce cas, $ clignotant) sur la page suivante chargée – vette982

+0

Si vous commentez setFlash, puis que la redirection fonctionne-t-elle? –

+0

Réponse mise à jour avec une solution possible. –

0

Soit cette sortie de code quelque chose au navigateur, ou si vous avez un espace après ?> à la fin du fichier (ou tout autre fichier inclus). L'espace est envoyé à l'utilisateur, ce qui envoie l'en-tête http.

0

Y at-il une déclaration de débogage quelque part que vous ne nous montrez pas?

1

Vous pouvez être confronté à un caractère invisible UTF-8 BOM quelque part. Vérifiez vos paramètres d'éditeur de texte, qu'il enregistre vos fichiers avec BOM ou sans.

1

Je vérifierais les espaces dans les modèles. N'importe lequel d'entre eux. C'était l'un des pièges que j'ai touchés.

Questions connexes