apache – Symfony2:由于已经发送了标头,因此无法启动会话

前端之家收集整理的这篇文章主要介绍了apache – Symfony2:由于已经发送了标头,因此无法启动会话前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

TL; DR
使用Nginx / PHP-FPM在Linux机器上获取错误,指出“由于已经发送了标头,因此无法启动会话.”. Apache本地计算机设置上未发生错误

所以在我的本地机器上我运行Symfony2应用程序.没有错误弹出.但是当我部署到我们的Linux服务器时,当我在Controller类中调用某个Action时,我遇到了这个错误

  1. @H_502_9@Failed to start the session because headers have already been sent.

在我已经调用的索引操作中

  1. @H_502_9@$session = $this->getRequest()->getSession();

在同一控制器类中的另一个动作中,我再次调用它.我尝试时会弹出错误

  1. @H_502_9@$session->set('foo',$bar);

在我的Twig中,我通过一个表单和一个带有形成属性的按钮来调用动作

  1. @H_502_9@

所以在我的本地机器上运行Apache一切运行正常. Linux服务器正在使用NginxPHP-fpm,由于某种原因它崩溃了.我检查了PHPInfo(),会话自动启动设置为关闭.不确定这是否是Nginx / PHP-fpm问题,但我认为这可能是相关信息.

这是Controller声明,indexAction()和我的2ndAction()

  1. @H_502_9@use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  2. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  3. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\HttpFoundation\Session\Session;
  7. use CBSi\Utils\HTTPUtils\CURLUtil;
  8.  
  9. class StartController extends Controller
  10. {
  11. /**
  12. * @var CurlUtil $curlUtil
  13. */
  14. private $curlUtil;
  15.  
  16. /**
  17. * @var AccessControl $accessControl
  18. */
  19.  
  20. private $accessControl;
  21.  
  22. /*placeholder for request object*/
  23. private $requestHolder;
  24.  
  25.  
  26. /**
  27. * @Route("/path/for/action/one",name="start")
  28. * @Template()
  29. */
  30.  
  31.  
  32. public function indexAction()
  33. {
  34. $session = $this->getRequest()->getSession();
  35. $this->curlUtil = $this->get('curlUtil');
  36. $this->requestHolder= Request::createFromGlobals();
  37.  
  38. // Some logic is done here
  39.  
  40.  
  41. return $this->render('ListEngagementBundle:Start:start.html.twig');
  42.  
  43. }
  44.  
  45. /**
  46. * @Route("/path/to/second/action",name="2ndAction")
  47. * @Template
  48. */
  49. public function 2ndAction(){
  50. $session = $this->getRequest()->getSession();
  51. $this-> curlUtil = $this->get('curlUtil');
  52. $this->requestHolder= Request::createFromGlobals();
  53.  
  54. //Some logic is done here to get the data for the session variable
  55.  
  56. $bar= logic output
  57.  
  58. $session->set('foo',$bar);
  59.  
  60. return $this->redirect($this->generateUrl('start'));
  61. }
  62. }

如果您需要我可以提供的更多信息,我会:)

最佳答案
所以我明白了.在我打电话的第二个动作中

  1. @H_502_9@$session->getRequest()->getSession();

我不得不改变它

  1. @H_502_9@$session = new Session();
  2. $session->start();

去搞清楚. :P

猜你在找的Nginx相关文章