2014-05-07 80 views
0

我在我的博客笨使用,因爲當我得到這個錯誤PHP致命錯誤:調用一個成員函數append_output()

PHP Fatal error: Call to a member function append_output() on a non-object in /var/www/site/blog/system/core/Loader.php on line 862

我不知道什麼樣的變化引起的這一點,爲什麼它會出現。該網站得到渲染並完全發送到瀏覽器,從視圖header.php,index.php到footer.php一切都在那裏,之後出現此錯誤。搜索與谷歌顯示另一個網站,在他們的網站的最底部有這個錯誤...

我現在用error_reporting(0),因爲整個網站工作正常,但這不是我想要的解決方案留下來。

它發生在所有頁面上,我有一個控制器(blog.php)和幾個方法像索引(),文章(),存檔()在裏面。這些方法做他們應該做的事情,但是當CI完成渲染頁面時,出現錯誤和所有控制器方法。

我該如何追蹤出現此問題的位置?

+1

無論你試圖在'Loader.php'的第862行上調用'append_output'的對象實際上都不是一個對象。找出它是什麼對象 - 找出它應該來自哪裏以及它爲什麼不是對象。 (它看起來像CI實例(這是我認爲來自'get_instance()'而不知道CI)沒有' - > output'類。) – h2ooooooo

+0

這就是我對這個問題的理解程度。 Loader.php是CI核心的一部分。 CI創建一個超級對象,所有用戶對象從此處擴展。我從來沒有碰過Loader.php或任何其他核心文件,我在我自己的控制器,模型,視圖中編碼了所有內容。 – fdafgfdgfagfdagfdagfdagfdagfda

+0

你是否覆蓋'output'類?也許有些東西不是一個對象? ([也許你已經用字符串或其他東西替換了'$ this-> output'](http://ellislab.com/codeigniter/user-guide/libraries/output.html))。檢查它的最簡單方法是在行的上方添加'var_dump($ _ ci_CI-> output)',並找出它包含的內容。 – h2ooooooo

回答

2

https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Loader.php#L938 如果錯誤發生在從get_instance返回的值上,這將是您的問題。儘管您可能需要查看您使用的版本才能獲得正確的行號。

此外: https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Controller.php#L75

這似乎是單身類功能導致,它返回它在構造函數中創建self::$instance

對我來說,這意味着在發生錯誤時CI_Controller單例沒有被實例化。

希望能夠幫助您調試您的問題。

+0

那麼我想知道的是,爲什麼它仍然呈現網站,然後在處理完所有內容後引發致命錯誤(所有視圖都已加載)... – fdafgfdgfagfdagfdagfdagfdagfda

+0

@JherekCarnelian如果你看看引用的源代碼的註釋,你可以看到它試圖刷新所有嵌套的輸出緩衝區(以防你的視圖渲染另一個視圖)。這是失敗的。它看起來相同的原因可能是因爲你沒有任何嵌套的輸出緩衝區/視圖。 – h2ooooooo

0

我有同樣的問題。我在我的控制器中覆蓋了輸出類($ this-> output)。

相關問題