[prev in list] [next in list] [prev in thread] [next in thread] 

List:       php-doc-bugs
Subject:    [DOC-BUGS] Bug->Doc #74399 [Nab->Ver]: ob_*clean* methods do not respect missing cleanable flag; sam
From:       requinix () php ! net
Date:       2017-04-28 7:50:50
Message-ID: 201704280750.v3S7oovx021327 () sgrv20 ! php ! net
[Download RAW message or body]

Edit report at https://bugs.php.net/bug.php?id=74399&edit=1

 ID:                 74399
 Updated by:         requinix@php.net
 Reported by:        krody dot robi at gmail dot com
 Summary:            ob_*clean* methods do not respect missing cleanable
                     flag; same for flushing
-Status:             Not a bug
+Status:             Verified
-Type:               Bug
+Type:               Documentation Problem
 Package:            Output Control
 Operating System:   Irrelevant
 PHP Version:        7.1.3
 Block user comment: N
 Private report:     N

 New Comment:

Then this is a doc bug because all four functions claim they need the respective \
CLEANABLE/FLUSHABLE flag to work.


Previous Comments:
------------------------------------------------------------------------
[2017-04-28 07:48:47] mike@php.net

See also bug #69404

------------------------------------------------------------------------
[2017-04-28 07:43:24] mike@php.net

Unfortunately there's no one-to-one correlation between the legacy userland function \
names and the flags of the new output API.

- ob_end_flush() is actually a finalize & send and not a "flush" in a strict sense
- ob_get_flush() is a finalize & send action, too
- ob_end_clean() is actually a discard & remove and not a "clean" in a strict sense
- ob_get_clean() is a finalize & remove action

I know, the legacy function names are bad and confusing, but were kept for BC, as was \
their functionality.

------------------------------------------------------------------------
[2017-04-10 08:05:57] requinix@php.net

Goes back to when the flags were introduced in 5.4: https://3v4l.org/G1Eqn

Indeed, CLEANABLE only affects ob_clean() and FLUSHABLE only affects ob_flush(). \
Looks like it would be fairly straightforward to add in.

The alternative would be adjusting the docs, but having those functions respect the \
flags makes sense to me. And in the case of ob_end_clean and ob_end_flush I would \
expect both the cleanable/flushable and the removable flags to be required.

------------------------------------------------------------------------
[2017-04-10 06:02:10] krody dot robi at gmail dot com

Description:
------------
This is happening in both php 5.6.29 and php 7.1.0 haven't checked any other versions \
-> that is why I marked it as version irrelevant as it seems to be version \
independent

Test script:
---------------
function callback($buffer, $status) {
    return "callback $buffer";
    
}

ob_start( 'callback', 0, PHP_OUTPUT_HANDLER_FLUSHABLE | \
PHP_OUTPUT_HANDLER_REMOVABLE);

echo 'test';

echo ob_get_clean();         //this should not work as no CLEANABLE flag was set on \
ob_start  //ob_end_clean is ran as well
                             //ob_clean -> failed to delete buffer notice

echo "\n".ob_get_level();

Expected result:
----------------
PHP Notice on ob_start not having the correct flags set for action for the following \
methods

ob_clean()
ob_get_clean()
ob_end_clean()

Actual result:
--------------
ob_get_clean() - retrieves buffer content, destroys the buffer
ob_end_clean() - buffer destroyed


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=74399&edit=1

-- 
PHP Documentation Bugs Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic