Reputation: 25
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');
}
}
}
}
Upvotes: 2
Views: 5935
Reputation: 5772
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);
}
}
Upvotes: 0
Reputation: 7294
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();
}
}
Upvotes: 1