CakePHP - CakeLog :: write()可以打破进一步的代码执行吗?

时间:2011-06-27 21:22:49

标签: php cakephp cakephp-1.3

登录功能在成功验证后写入几个会话变量,然后重定向到自身以打印欢迎消息(视图根据身份验证状态更改)。这适用于debug> = 0。 现在,当我将CakeLog :: write()添加到同一个登录函数时,它将停止使用debug = 0并显示一个空页面。它继续使用debug> 0

根据Apache日志,白页是POST请求后出现错误500的结果。

CakeLog :: write()除写入日志文件外还做了什么?

'Session','Security'和'Auth'组件都涉及,但我没有调用requirePost方法。

CakeLog :: write()如果成功则返回true但捕获返回代码不会改变进一步执行代码的问题。我必须重新加载白页才能继续(即用GET请求替换POST)。

这是users_controller的登录信息:

function login(){
 [if form contains data do some LDAP checking...]
  if($permission>0){
   $this->Session->write('logname', $samaccountname);
   $this->Session->write('logperm', $permission);
   [...]

   // Here is where it blocks. Without this line debug=0 is okay
   $result = CakeLog::write('log', $samaccountname);

   $this->Auth->login();
   // the Auth redirect target is set in the app_controller to allow jumping right 
   // to the originally intended URL, usually it redirects to itself
   $this->redirect($this->Auth->redirect());
   }
  }

这是app_controller的beforeFilter:

function beforeFilter(){
 $this->Security->blackHoleCallback = 'showErrorPage';
 $this->Security->requireAuth();
 $this->Security->requireSecure();

 if($this->Session->read('logperm') < 1 && $this->here != '/users/login'){
  $this->Auth->redirect($this->here); // store chosen URL
  $this->redirect('/users/login');
  }
 if($this->Session->read('logperm') == 3)
  $this->Auth->allow('*');
 elseif[...]
 }

2 个答案:

答案 0 :(得分:0)

这是一个很长的镜头,但'log'不是有效的日志类型,因此您可以尝试使用'notice'之类的内容。

我唯一能想到的是日志文件目录不能被PHP写入。你也可以检查一下。

答案 1 :(得分:0)

谢谢@François,这使我指向正确的方向。 有必要设置

Configure::write('log', true);

确保消息和错误日志记录工作,即使debug = 0(在bootstrap中添加它) 顺便说一下,1.3食谱明确指出即使debug = 0,默认情况下也会启用日志记录。这可能是文档中的一个小故障。