Google Calendar Zend_Loader错误

时间:2011-12-08 22:39:35

标签: php zend-framework google-calendar-api

当我用PHP初始化Google Calendar API时,我遇到了Zend_Loader(1.10.8)的一些错误。这是我的代码:

\Zend_Loader::loadClass('Zend_Gdata');
\Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
\Zend_Loader::loadClass('Zend_Gdata_Calendar');
$this->_service = \Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$this->_client  = \Zend_Gdata_ClientLogin::getHttpClient(USER, PASS, $this->_service);
$this->_client->setConfig(array('keepalive' => true));
$this->_service = new \Zend_Gdata_Calendar($this->_client);
$this->defaultQuery = $this->_service->newEventQuery();

最后一行给出以下错误:

Warning: include_once(Zend/Gdata/Calendar/Extension/EventQuery.php): failed to open stream: No such file or directory
Warning: include_once(): Failed opening 'Zend/Gdata/Calendar/Extension/EventQuery.php' for inclusion

这不会破坏任何功能,但我无法弄清楚如何解决错误。我的EventQuery.php文件位于“/Zend/Gdata/Calendar/EventQuery.php”中,而不是它在错误中使用的路径。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

当您注册了一个抛出异常的错误处理程序时会发生这种情况:

set_error_handler('errorFunction');

function errorFunction($errno, $errstr, $errfile, $errline)
{
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}

在Zend / Gdata / App.php版本1.11.11中,第1046行到第1059行:

1046             foreach ($this->_registeredPackages as $name) {
1047                  try {
1048                      // Autoloading disabled on next line for compatibility
1049                      // with magic factories. See ZF-6660.
1050                      if (!class_exists($name . '_' . $class, false)) {
1051                         require_once 'Zend/Loader.php';
1052                         @Zend_Loader::loadClass($name . '_' . $class);
1053                      }  
1054                      $foundClassName = $name . '_' . $class;
1055                      break;
1056                  } catch (Zend_Exception $e) {
1057                      // package wasn't here- continue searching
1058                  }   
1059             }

如果尝试加载的文件/类不存在,则该类依赖于加载程序抛出Zend_Exception,或者仅使用@符号来抑制错误。

在错误处理程序中抛出ErrorException会绕过错误抑制,并导致此代码失败。

解决方案

我已经评论了ZF问题的原因以及可能解决问题的方法。同时,您可以在1058 - 1060行添加以下内容

} catch (ErrorException $e) {
    //Do Nothing, just the file not found error
}

只需将第1056行的Zend_Exception更改为基础Exception,就像在ZF2中完成一样。