Zend translate пытается включить '.php' и вызывает фатальную ошибку

Я получаю странную фатальную ошибку с фреймворком Zend при попытке использовать класс Translate, похоже, он пытается загрузить пустое имя файла (.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 вызывает класс, вызывающий сбой.


person Clorith    schedule 06.08.2012    source источник
comment
Вам каким-то образом удалось заставить zend loader загружать файл с пустым именем класса. Что бы вы ни делали, для зенда это не выглядит хорошо.   -  person hakre    schedule 06.08.2012
comment
Это странно, поскольку это стандартная установка фреймворка zend с использованием aptitud на debian, и все в значительной степени скопировано из примера с их веб-сайтов. Похоже, это ошибка функции loadClass, если что-нибудь ...   -  person Clorith    schedule 06.08.2012
comment
Да, это похоже на сбой в библиотеке при очистке ввода. Или что-то даже внутренне сломано в этой библиотеке, так что имя класса пропадает. Вы пробовали туда зайти с пошаговым отладчиком?   -  person hakre    schedule 06.08.2012


Ответы (2)


Оказалось, что документация на сайте Zend либо слишком новая, либо слишком старая для Zend Framework, включенного в Aptitude на debian.

Zend_Translate следует вызывать не с одним массивом, а с отдельными элементами следующим образом:

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

В зависимости от того, какую версию ZF вы используете, вы используете старый (устаревший) автозагрузчик.

Вы также можете попробовать:

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

Zend_Loader_Autoloader::getInstance();

При первой загрузке автозагрузчика, вызвав getInstance(), ZF автоматически зарегистрирует автозагрузчик. Это не решает вашу проблему, это просто предложение.

Если вы хотите создать новый объект Zend_Translate, вы можете передать массив для конфигурации, но вы должны использовать пары ключ => значение при указании параметров.

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