Symfony2 : Échec du démarrage de la session, car les en-têtes ont déjà été envoyés
TL;DR
Une erreur sur une machine Linux avec Nginx /PHP-FPM indiquant "impossible de démarrer la session, car les en-têtes ont déjà été envoyés.". L'erreur ne se produit pas sur un serveur Apache local d'installation de la machine
Donc sur ma machine locale, j'ai l'Symfony2 application en cours d'exécution fine. Pas d'erreurs sont popping up. Mais dès que je le déployer sur notre Serveur Linux j'obtiens cette erreur quand je l'appelle un certain type d'Action au sein d'un Contrôleur de classe
Failed to start the session because headers have already been sent.
Dans l'action "index" j'ai déjà appelé
$session = $this->getRequest()->getSession();
Et dans une autre action au sein de la même classe de contrôleur, je suis d'appeler à nouveau. L'erreur s'affiche lorsque j'essaie un
$session->set('foo', $bar);
Dans mon Twig je suis d'appeler à l'action d'un formulaire et un bouton avec un formaction propriété comme
<form id='blahblah'>
.... some fields here .....
<button type='submit' formaction='{{path('2ndAction')}}'></a>
</form>
Donc sur ma machine locale, en exécutant Apache tout marche bien. Le serveur Linux est d'utiliser Nginx et php-fpm et il plante pour une raison quelconque. J'ai vérifié le phpInfo() et la session de démarrage automatique est désactivée. Vous ne savez pas si c'est un Nginx/php-fpm problème ou pas, mais je pense qu'il peut être pertinent de l'information.
Ici, c'est le Contrôleur de déclaration, indexAction(), et mon 2ndAction()
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;
use CBSi\Utils\HTTPUtils\CURLUtil;
class StartController extends Controller
{
/**
* @var CurlUtil $curlUtil
*/
private $curlUtil;
/**
* @var AccessControl $accessControl
*/
private $accessControl;
/*placeholder for request object*/
private $requestHolder;
/**
* @Route("/path/for/action/one", name="start")
* @Template()
*/
public function indexAction()
{
$session = $this->getRequest()->getSession();
$this->curlUtil = $this->get('curlUtil');
$this->requestHolder= Request::createFromGlobals();
//Some logic is done here
return $this->render('ListEngagementBundle:Start:start.html.twig');
}
/**
* @Route("/path/to/second/action", name="2ndAction")
* @Template
*/
public function 2ndAction(){
$session = $this->getRequest()->getSession();
$this-> curlUtil = $this->get('curlUtil');
$this->requestHolder= Request::createFromGlobals();
//Some logic is done here to get the data for the session variable
$bar= logic output
$session->set('foo', $bar);
return $this->redirect($this->generateUrl('start'));
}
}
Si vous avez besoin de plus d'info que je peux donner je vais 🙂
- Cochez cette stackoverflow.com/questions/8028957/...
Vous devez vous connecter pour publier un commentaire.
J'ai donc pensé à elle. Dans la 2ème action, où j'ai été appeler
J'ai dû changer de
Aller à la figure. 😛
J'ai la même erreur. Mais dans mon cas j'ai mis des espaces dans le AppKernel.php avant la
< ?php
la balise. Donc, si quelqu'un d'autre que vous obtenez cette erreur, vérifiez si vous avez quelques espaces ou des tabulations avant de la première ligne de chaque .fichier php qui se charge avant la session de l'initialisation.
Je recevais ce message d'erreur chaque fois que j'ai essayé de mettre à jour mon schéma de base de données à l'aide de symfony console et quand j'ai essayé d'installer de nouvelles dépendances à l'aide de compositeur:
Donc, je suis allé pour vérifier le fichier , et, sur la ligne 152, j'ai trouvé un " ?> " (php balise de fermeture ).
Donc, je viens de supprimer la balise de fermeture php et l'erreur jamais montré de nouveau !
Ce qui m'arrive quand dans certains des scripts qui permettent de prévoir
$this->session->start();
il y a un echo déclaration!J'espère que cela peut aider quelqu'un d'autre de débogage de la question