2

When I m run my Cron Job in Zend Framework.It gives following Error

 
Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'Session must be started before any output has been sent to the browser; output started in /0' in /home/ZendFramework/library/Zend/Session.php:456 Stack trace: #0 /home/ZendFramework/library/Zend/Session/Namespace.php(143): Zend_Session::start(true) #1 /home/atypqapp/public_html/library/Plugins/AccessCheck.php(17): Zend_Session_Namespace->__construct('licence_error') #2 /home/atypqapp/public_html/application/modules/backend/Bootstrap.php(16): Plugins_AccessCheck->__construct(Object(Backend_Model_Libraryacl), Object(Zend_Auth)) #3 /home/ZendFramework/library/Zend/Application/Bootstrap/BootstrapAbstract.php(679): Backend_Bootstrap->_initAutoload() #4 /home/ZendFramework/library/Zend/Application/Bootstrap/BootstrapAbstract.php(632): Zend_Application_Bootstrap_BootstrapAbstract->_executeResource('autoload') #5 /home/ZendFramework/library/Zend/Application/Bootstrap/BootstrapAbstract.php(596): Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap(NULL) #6 in /home/ZendFramework/library/Zend/Session.php on line 456

Here is my library>plugins AccessCheck.php

class Plugins_AccessCheck extends Zend_Controller_Plugin_Abstract { private $_acl = null; private $_auth = null; public function __construct(Zend_Acl $acl, Zend_Auth $auth) { $this->_acl = $acl; $this->_auth = $auth; //******************************* // Checking License //****************************** $licence_error = new Zend_Session_Namespace('licence_error'); if (!$licence_error->active === NULL) { throw new Exception('Licence Error', 404); } // } public function preDispatch(Zend_Controller_Request_Abstract $request) { parent::preDispatch($request); // echo 'PRE DISPATCH'; $resoruce = $this->_request->getControllerName(); $action = $this->_request->getActionName(); $identity = $this->_auth->getStorage()->read(); //var_dump($identity); if (isset($identity)) { if (isset($identity->userID)) { //Load Adapter // Zend_Registry::get("db"); $previlages_db = new Backend_Model_Usersprofile(); //get Role ID and find out the name of role $previlages_db_results = $previlages_db->loadProfileIDsSpecificUser($identity->userID); // var_dump($identity->userID); $roles = array(); foreach ($previlages_db_results as $value) { array_push($roles, $value['profile_name']); //var_dump($this->_acl->isAllowed($value['profile_name'], $resoruce, $action)); if (!$this->_acl->isAllowed($value['profile_name'], $resoruce, $action)) { $request->setModuleName('public'); $request->setControllerName('unauthorized'); $request->setActionName('index'); } else { //If one profile is OK,Give Permission To Access Particular Resources break; } } // var_dump($roles); // echo 'Allowed or not *******************************'; } } else if (!defined('_CRONJOB_') || _CRONJOB_ == false) { //Load Adapter // Zend_Registry::get("db"); $previlages_db = new Backend_Model_Usersprofile(); //get Role ID and find out the name of role $previlages_db_results = $previlages_db->loadProfileIDsSpecificUser($identity->userID); $roles = array(); foreach ($previlages_db_results as $value) { array_push($roles, $value['profile_name']); if (!$this->_acl->isAllowed($value['profile_name'], $resoruce, $action)) { $request->setModuleName('public'); $request->setControllerName('unauthorized'); $request->setActionName('index'); } else { //If one profile is OK,Give Permission To Access Particular Resources break; } } } if ($this->_request->isXmlHttpRequest()) { if (!$this->_acl->isAllowed($value['profile_name'], $resoruce, $action)) { $request->setModuleName('public'); $request->setControllerName('unauthorized'); $request->setActionName('index'); } } } } 
5
  • 1
    "Session must be started before any output has been sent to the browser". It could not be stated more clearly; don't output stuff before starting your sessions. Commented Jun 18, 2014 at 1:32
  • so.,what should i do now ?? Commented Jun 18, 2014 at 1:38
  • You should fix the problem, as stated in the error message. What is it you do not understand? What is the problem? Commented Jun 18, 2014 at 1:42
  • Sir,what am i do for prevent this error? i didn't echo any one ...so.,that message is still display..on ony cron log!!! Commented Jun 18, 2014 at 1:45
  • There is no reason to be so formal; my name is Sverri. To fix it you have to remove all output before starting the session. The accepted answer to this question should help you find where the output comes from. Commented Jun 18, 2014 at 2:02

2 Answers 2

1

You need to start the session earlier in the application. From your stack trace I can see that you're calling a backend bootstrap file that extends BootstrapAbstract. To fix this error you could initialise the session within that file. Note that any _init methods in bootstrap files are called automatically.

<?php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initSession() { // do any extra session config here Zend_Session::start(); } } 
Sign up to request clarification or add additional context in comments.

Comments

0

Try to move your code about session in the routeStartup function in Plugins_AccessCheck class like this:

public function routeStartup(Zend_Controller_Request_Abstract $request) { //******************************* // Checking License //****************************** $licence_error = new Zend_Session_Namespace('licence_error'); if (!$licence_error->active === NULL) { throw new Exception('Licence Error', 404); } } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.