Debug Consoleの表示処理はregister_shutdown_functionを用いて最後に実行されるようにした
これによって、任意の位置にフィルタさえ登録すれば、処理の最後に表示されるようになった
_printDebugメソッド内のHTMLとJavaScriptを修正した
_detectEncodingメソッドはmb_detect_encodingではなく
mb_convert_encodingのauto指定を使うようにした。
(PHP5での文字化け対策)
@@ -22,6 +22,11 @@ | ||
22 | 22 | * @version CVS: $Id$ |
23 | 23 | */ |
24 | 24 | |
25 | +/** | |
26 | + * Debug Consoleの出力が行われたかどうかを示すフラグ | |
27 | + */ | |
28 | +$GLOBALS['MAPLE_FILTER_DEBUG_EXECUTED'] = false; | |
29 | + | |
25 | 30 | require_once MAPLE_DIR .'/dBug/DumpHelper.class.php'; |
26 | 31 | |
27 | 32 | /** |
@@ -69,15 +74,24 @@ | ||
69 | 74 | $filterChain->execute(); |
70 | 75 | |
71 | 76 | $log->trace("Filter_Debugの後処理が実行されました", "Filter_Debug#execute"); |
72 | - // Debugはビューを表示した後のみ出力する必要あり | |
77 | + | |
78 | + register_shutdown_function(array(&$this, '_postFilter')); | |
79 | + } | |
80 | + | |
81 | + /** | |
82 | + * ResponseがHTMLだったかどうかを調べる | |
83 | + * | |
84 | + * @access private | |
85 | + * @param Response $response | |
86 | + * @return boolean | |
87 | + */ | |
88 | + function _isHtmlResponse(&$response) | |
89 | + { | |
73 | 90 | // ResponseオブジェクトのResultに値があるときはビューを出力するとみなす |
74 | - $response =& $container->getComponent("Response"); | |
75 | 91 | $result = $response->getResult(); |
76 | 92 | $contentType = $response->getContentType(); |
77 | - if ($result != '' && ($contentType == '' || strtolower($contentType) == 'text/html')) { | |
78 | - $this->_postFilter(); | |
79 | - } | |
80 | - | |
93 | + return ($result != '' && | |
94 | + ($contentType == '' || preg_match('|text/html|', $contentType))); | |
81 | 95 | } |
82 | 96 | |
83 | 97 | /** |
@@ -93,6 +107,16 @@ | ||
93 | 107 | */ |
94 | 108 | function _postFilter() |
95 | 109 | { |
110 | + // Debugはビューを表示した後のみ出力する必要あり | |
111 | + $container =& DIContainerFactory::getContainer(); | |
112 | + $response =& $container->getComponent("Response"); | |
113 | + | |
114 | + if(!$this->_isHtmlResponse($response) || | |
115 | + $GLOBALS['MAPLE_FILTER_DEBUG_EXECUTED']) { | |
116 | + return; | |
117 | + } | |
118 | + $GLOBALS['MAPLE_FILTER_DEBUG_EXECUTED'] = true; | |
119 | + | |
96 | 120 | $NO = 'なし'; |
97 | 121 | |
98 | 122 | $var = (isset($_POST) && (0 < count($_POST)))? $_POST: $NO; |
@@ -178,10 +202,7 @@ | ||
178 | 202 | */ |
179 | 203 | function _detectEncoding($var) |
180 | 204 | { |
181 | - $nowencode = mb_detect_encoding($var); | |
182 | - if ($nowencode != OUTPUT_CODE) { | |
183 | - $var = mb_convert_encoding($var, OUTPUT_CODE, $nowencode); | |
184 | - } | |
205 | + $var = mb_convert_encoding($var, OUTPUT_CODE, "auto"); | |
185 | 206 | return $var; |
186 | 207 | } |
187 | 208 |
@@ -208,15 +229,15 @@ | ||
208 | 229 | |
209 | 230 | // 表示するHTMLの作成 |
210 | 231 | $html = <<<HTML |
211 | -<HTML> | |
212 | -<HEAD> | |
213 | -<TITLE>Maple Debug Console</TITLE> | |
214 | -</HEAD> | |
215 | -<BODY bgcolor=#ffffff> | |
216 | -<table border=0 width=100%><tr bgcolor=#cccccc><th colspan=2>Maple Debug Console</th></tr></table> | |
232 | +<html> | |
233 | +<head> | |
234 | +<title>Maple Debug Console</title> | |
235 | +</head> | |
236 | +<body bgcolor="#ffffff"> | |
237 | +<table border="0" width="100%"><tr bgcolor="#cccccc"><th colspan="2">Maple Debug Console</th></tr></table> | |
217 | 238 | {$debug} |
218 | -</BODY> | |
219 | -</HTML> | |
239 | +</body> | |
240 | +</html> | |
220 | 241 | HTML; |
221 | 242 | |
222 | 243 | // Javascript出力用にエスケープ処理 |
@@ -224,12 +245,12 @@ | ||
224 | 245 | |
225 | 246 | // Javascript出力 |
226 | 247 | $JS = <<<JS |
227 | -<SCRIPT language=javascript> | |
248 | +<script type="text/javascript"> | |
228 | 249 | var title = 'Console'; |
229 | - _smarty_console = window.open("",title.value,"width=680,height=600,resizable,scrollbars=yes"); | |
230 | - _smarty_console.document.write("$html"); | |
231 | - _smarty_console.document.close(); | |
232 | -</SCRIPT> | |
250 | + var _maple_debug_console = window.open("",title,"width=680,height=600,resizable,scrollbars=yes"); | |
251 | + _maple_debug_console.document.write("$html"); | |
252 | + _maple_debug_console.document.close(); | |
253 | +</script> | |
233 | 254 | JS; |
234 | 255 | print $JS; |
235 | 256 | } |