Zend翻译尝试包括'.php'并导致致命错误



在尝试使用Translate类时,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-translate类的方式如下

<?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)
        )
    );
?>

$translate部分是调用导致崩溃的类的部分。

对于debian上的Aptitude中包含的Zend Framework来说,Zend网站上的文档要么太新,要么太旧。

Zend_Translate不应使用单个数组调用,而应使用以下单个元素调用:

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

根据您使用的ZF版本,您使用的是旧的(已弃用的)自动加载器。

你也可以试试:

require_once( 'Zend/Loader/Autoloader.php' );
Zend_Loader_Autoloader::getInstance();

第一次通过调用getInstance()加载自动加载器时,ZF将自动注册自动加载器。这并不能解决你的问题,只是一个建议。

如果要创建一个新的Zend_Translate对象,可以传递一个数组进行配置,但在指定选项时必须使用key=>值对。

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

最新更新