当我用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”中,而不是它在错误中使用的路径。有什么想法吗?
答案 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中完成一样。