2012-08-06 80 views
2

当我尝试使用Translate类时,我收到Zend框架的一个奇怪的致命错误,它似乎尝试加载一个空文件名(.php),它以致命错误结束。Zend翻译试图包括'.php'并导致致命错误

下面是堆栈跟踪

[error] [client 79.160.197.135] PHP Warning: include_once() [<a href='function.include'>function.include</a>]: Failed opening '.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /usr/share/php/Zend/Loader.php on line 146, referer: index.php 
[error] [client 79.160.197.135] PHP Stack trace:, referer: index.php 
[error] [client 79.160.197.135] PHP 1. {main}() /doc/index.php:0, referer: index.php 
[error] [client 79.160.197.135] PHP 2. Zend_Translate->__construct() /doc/index.php:19, referer: index.php 
[error] [client 79.160.197.135] PHP 3. Zend_Translate->setAdapter() /usr/share/php/Zend/Translate.php:89, referer: index.php 
[error] [client 79.160.197.135] PHP 4. Zend_Loader::loadClass() /usr/share/php/Zend/Translate.php:127, referer: index.php 
[error] [client 79.160.197.135] PHP 5. Zend_Loader::loadFile() /usr/share/php/Zend/Loader.php:94, referer: index.php 
[error] [client 79.160.197.135] PHP Fatal error: Uncaught exception 'Zend_Exception' with message 'File ".php" does not exist or class "" was not found in the file' in /usr/share/php/Zend/Loader.php:99 

而作为一个参考,我打电话了Zend翻译类是如下

<?php 

    require_once('Zend/Loader.php'); 

    Zend_Loader::loadClass('Zend_Translate'); 

    $translate = new Zend_Translate(
     array(
      'gettext', 
      'locale', 
      null, 
      array('scan' => Zend_Translate::LOCALE_DIRECTORY) 
     ) 
    ); 
?> 

的$翻译部分是一个调用类的方法导致崩溃。

+0

你以某种方式设法使zend加载器为空的类名加载文件。无论你做什么,这对zend来说都不太好。 – hakre 2012-08-06 10:49:39

+0

这很奇怪,因为它是在debian上使用aptitud的zend框架的股票安装,而且一切都从他们的网站上复制下来。看起来这必须是loadClass函数的一个错误,如果有的话... – Clorith 2012-08-06 11:33:30

+0

是的,这看起来像是图书馆内输入消毒的失败。或者甚至在该图书馆内部发生了某些内部事件,导致班级名称丢失。你有没有尝试去一步调试? – hakre 2012-08-06 11:36:38

回答

2

原来Zend站点上的文档对于debian上的Aptitude包含的Zend Framework来说太新了,或者太旧了。

的一个Zend_Translate不应该与一个单一的阵列被调用,但单个元素如下:

$translate = new Zend_Translate('gettext', 'path/to/locale.mo', 'locale'); 
0

根据什么ZF版本使用的是,您使用的是旧的(不推荐)自动加载。

您也可以尝试:

require_once('Zend/Loader/Autoloader.php'); 

Zend_Loader_Autoloader::getInstance(); 

当您第一次通过调用getInstance()加载磁带自动加载机,ZF会自动注册自动加载。它不能解决你的问题,但只是一个建议。

如果您想要创建一个新的Zend_Translate对象,可以将一个数组传递给config,但是在指定选项时必须使用key => value对。

$translate = new Zend_Translate(
     array(
       'adapter' => 'gettext', 
       'content' => 'path/to/locale.mo', 
       'locale' => 'en_US', 
       'scan' => Zend_Translate::LOCALE_DIRECTORY 
     ) 
);