2012-08-06 79 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 
     ) 
);