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'); } } } }
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.