#33974 [Bgs]: ob_list_handlers(): object-based handlers returned incorrectly.

From: Date: Thu, 04 Aug 2005 11:58:32 +0000
Subject: #33974 [Bgs]: ob_list_handlers(): object-based handlers returned incorrectly.
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-82945@lists.php.net to get a copy of this message
ID: 33974 User updated by: php at koterov dot ru Reported By: php at koterov dot ru Status: Bogus Bug Type: Output Control Operating System: any PHP Version: 4.3.11 New Comment: I'll detalize why do I say all this words. It would be great to MANUALLY process all output buffers with their callbacks at the end of script - something like this: foreach (array_reverse(ob_list_handlers()) as $h) { $text = ob_get_contents(); ob_end_clean(); echo call_user_func($h, $text); } Why? Very simple: if I let the callbacks to be called automatically, I'll loose ALL errors, warnings and notices in them, because errors are suppress on standard OB callback execution. But, if I call all the callbacks manually (see example above), it's OK with errors. I use OB callbacks very often, an there are a lot of PHP code in them (e.g. - HTML tag parsing, placeholder substitutions etc.). Callbacks is a very powerful technique, but - almost undebuggable. Maybe extend ob_get_status(true) adding valid callback references to returned array? Previous Comments: ------------------------------------------------------------------------ [2005-08-04 13:49:15] php at koterov dot ru Very strange, because object-based callbacks works fine with ob_start(). So I guess that full callback info is stored somewhere. OK, debug purpose. But - maybe write it explicitly in documentation? "This function is for debug purposes only. Do not try to use it for manual callback execution - references will be wrong for object-based callbacks." ------------------------------------------------------------------------ [2005-08-03 15:46:05] tony2001@php.net This is how the engine stores callbacks names. ob_list_handlers() has nothing to do with it. This functions is for debugging purposes only and there is nothing said in the docs that it should return valid callbacks. ------------------------------------------------------------------------ [2005-08-03 15:35:21] php at koterov dot ru There is nothing said about this behaviour in the documentation: http://www.php.net/manual/ru/function.ob-list-handlers.php And - if I cannot trust the result of ob_list_handlers() (I cannot - it returns bogus handler names), is this function necessary at all? ------------------------------------------------------------------------ [2005-08-03 13:22:51] tony2001@php.net Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php ------------------------------------------------------------------------ [2005-08-03 12:35:45] php at koterov dot ru Description: ------------ Seems ob_list_handlers() cannot return handlers represented as object with method names (see ob_start(array(&$obj, 'F'))). It returns them as "ClassName::MethodName", not as array(..., ...). Reproduce code: --------------- <?php class C { function F($s) { return $s; } } $obj = new C(); ob_start(array(&$obj, 'F')); $list = ob_list_handlers(); var_dump($list); ?> Expected result: ---------------- array(1) { [0]=> array(..., 'F') } // where "..." is object $obj Actual result: -------------- array(1) { [0]=> string(4) "c::F" } ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=33974&edit=1

« previous php.bugs (#82945) next »