Smarty中的ob_start问题
生活随笔
收集整理的這篇文章主要介紹了
Smarty中的ob_start问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
近日升級php 4.3.10 到 4.4.6,遭遇到一個奇怪的問題。描述如下:
Linux Redhat AS4, Apache 1.3.37, PHP 4.4.6, Smarty 2.6.3 環境中,只要在調用 Smarty 的 display() 函數之前有任何諸如
echo/print/print_r 等輸出,那么整個輸出結果就變成空白頁面。一開始以為是版本升級導致的問題,遂換成舊版本,問題依舊。也懷疑到是否因為 SQUID 緩存引起的,于是直接走 Apache 端口,還是那樣。把 PHP 的 error_reporting 改成 E_ALL,重啟,沒看到任何報錯,但是問題依舊如此...這時已經有點煩躁了。 以前也從來沒碰到過如此BT之問題,百思不得其解,干脆重啟機器吧,可還是那樣...
把保存cache的目錄權限設置成777,把cache清除,禁用cache...能想得到的都做了,可是,結果還是那樣...
沒辦法,那只好debug調試程序了吧,于是就跟蹤 Smarty 的源代碼中的 display() 函數,發現調用了 ob 系列函數,于是懷疑和它們有關>系,于是關閉 ob 功能,問題消失。
究其原因,原來是在 Smarty 中調用了 ob_start() 函數,并且附帶了參數 'ob_gzhandler',代碼段如下:@ob_start('ob_gzhandler'); $this->fetch($resource_name, $cache_id, $compile_id, true); $content = @ob_get_contents(); if($content) {@ob_end_clean();@ob_start('ob_gzhandler');echo $content;@ob_end_flush(); } 在這里,指定輸出緩存(output_handler)要調用了 ob_gzhandler 函數。然而,在 php.ini 中的 output_handler
選項卻沒有打開,也就是無法支持 output_handler 了。打開 php.ini 文件,修改如下內容:output_handler = ob_gzhandler; 指定 output_handler 的默認處理函數為 ob_gzhandler。重啟 Apache,一切 OK。 本文出自 “MySQL中文網”博客 http://www.imysql.cn/
Linux Redhat AS4, Apache 1.3.37, PHP 4.4.6, Smarty 2.6.3 環境中,只要在調用 Smarty 的 display() 函數之前有任何諸如
echo/print/print_r 等輸出,那么整個輸出結果就變成空白頁面。一開始以為是版本升級導致的問題,遂換成舊版本,問題依舊。也懷疑到是否因為 SQUID 緩存引起的,于是直接走 Apache 端口,還是那樣。把 PHP 的 error_reporting 改成 E_ALL,重啟,沒看到任何報錯,但是問題依舊如此...這時已經有點煩躁了。 以前也從來沒碰到過如此BT之問題,百思不得其解,干脆重啟機器吧,可還是那樣...
把保存cache的目錄權限設置成777,把cache清除,禁用cache...能想得到的都做了,可是,結果還是那樣...
沒辦法,那只好debug調試程序了吧,于是就跟蹤 Smarty 的源代碼中的 display() 函數,發現調用了 ob 系列函數,于是懷疑和它們有關>系,于是關閉 ob 功能,問題消失。
究其原因,原來是在 Smarty 中調用了 ob_start() 函數,并且附帶了參數 'ob_gzhandler',代碼段如下:@ob_start('ob_gzhandler'); $this->fetch($resource_name, $cache_id, $compile_id, true); $content = @ob_get_contents(); if($content) {@ob_end_clean();@ob_start('ob_gzhandler');echo $content;@ob_end_flush(); } 在這里,指定輸出緩存(output_handler)要調用了 ob_gzhandler 函數。然而,在 php.ini 中的 output_handler
選項卻沒有打開,也就是無法支持 output_handler 了。打開 php.ini 文件,修改如下內容:output_handler = ob_gzhandler; 指定 output_handler 的默認處理函數為 ob_gzhandler。重啟 Apache,一切 OK。 本文出自 “MySQL中文網”博客 http://www.imysql.cn/
總結
以上是生活随笔為你收集整理的Smarty中的ob_start问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CCIE试验备考之交换security(
- 下一篇: ×××实验