2012-05-02 23 views
7

我收到了來自未引用調試程序類的文件的標題中引用的錯誤。如果我手動導入調試器,錯誤仍然顯示。在上一個}錯誤中引用的行號結束文件中的類定義。沒有任何東西跟在(沒有?>)。我得到錯誤的文件並不直接引用調試器,因爲我可以告訴(因爲沒有明確使用調試器)。CakePHP「致命錯誤:未找到類'調試程序'」在不引用調試程序的文件中

這裏的堆棧跟蹤:

(!) Fatal error: Class 'Debugger' not found in /home/gregg/workspace/Fueled/dapprly/backend/app/Plugin/Facebook/Controller/Component/FapiComponent.php on line 107 
Call Stack 
# Time Memory Function Location 
1 0.0003 245664 {main}() ../index.php:0 
2 0.0168 1657712 Dispatcher->dispatch() ../index.php:100 
3 0.0237 2753568 Dispatcher->_invoke() ../Dispatcher.php:85 
4 0.0237 2753768 Controller->constructClasses() ../Dispatcher.php:99 
5 0.0237 2755712 ComponentCollection->init() ../Controller.php:638 
6 0.0255 3057112 ComponentCollection->load() ../ComponentCollection.php:52 
7 0.0255 3057600 class_exists () ../ComponentCollection.php:99 
8 0.0255 3057896 App::load() ../ComponentCollection.php:0 
9 0.0257 3091416 ErrorHandler::handleError() ../ComponentCollection.php:551 

,這裏是圍繞線107上下文:

class FapiComponent extends Component { 
    // -- snip -- // 

    public function method() 
    { 
     $url = urlencode('http://url'); 

     $param = array(
     'access_token' => '##' , 
     'object' => 'user', 
     'fields' => 'feed', 
     'callback_url' => $url); 
     $id = $this->facebook->getAppId(); 
     $subs = $this->facebook->api('/' . $id . '/subscriptions' , 'POST' , $param); 
    } 
} // <-- line 107 ... nothing after this 
+0

該組件的類使用調試器? –

+0

不,我發現錯誤。我所展示的這個類已經實現了初始化方法。但它被實現爲公共函數初始化($ controller)。這是一個E_STRICT錯誤。我的設置正在捕捉這些錯誤。這個錯誤導致它尋找調試器。我不知道爲什麼它不能自動加載它,但將方法更改爲公共函數初始化(Controller $控制器)修復了我遇到的問題。 – gregghz

回答

8

我發現的錯誤。

我已經展示過的這個類已經實現了初始化方法。但它實現爲

public function initialize($controller) 

這是一個E_STRICT錯誤,因爲它從留出的類型暗示父類的方法不同。我的設置正在捕獲E_STRICT錯誤。這個錯誤導致它尋找調試器。我不知道爲什麼它不能自動加載它,但將方法更改爲

public function initialize(Controller $controller) 

修復了我遇到的問題。

+1

我也發現這是因爲PHP 5.4在E_ALL集合中包含了E_STRICT。所以如果你不想看到這些錯誤,你需要明確* exclude8 E_STRICT。在php 5.3中,如果你想看到這些錯誤,你必須特別包含* E_STRICT。 – gregghz

0

這發生在您有E_STRICT錯誤時。我使用的主要版本是運行PHP 5.4時,您需要有公共,私有和受保護函數聲明

13

這是由於編譯時錯誤沒有執行自動加載的PHP bug(例如,E_STRICT)造成的。

這被修復在PHP 5.4.21workaround pull request被CakePHP接受。

要手動解決此問題,並從CakePHP的錯誤處理程序免除E_STRICT

  1. 打開core.php在你喜歡的編輯器(你可以找到像find . -name core.php進行東西文件)。
  2. 查找以下行:'level' => E_ALL & ~E_DEPRECATED,
  3. 將其替換爲:'level' => E_ALL & ~E_DEPRECATED & ~E_STRICT,
+0

同樣在php 5.5.30 – giuseppe

0

的問題是,PHP 5.4.21比低版本具有與E_STRICT錯誤自動加載磁帶機的問題。 (E_STRICT是一個編譯時錯誤)

https://bugs.php.net/bug.php?id=65322

我遇到了一些老項目完全相同的問題,它的固定2.7.4。

https://github.com/cakephp/cakephp/issues/7376

所以,真正的解決辦法是至少升級到5.4.21或等待的CakePHP 2.7.4

+1

與php 5.5一樣的問題。有時問題的根源在別處。 – giuseppe

+0

我想在php 5.5中同樣的問題也是有效的 –

相關問題