Annotation of embedaddon/php/README.NEW-OUTPUT-API, revision 1.1.1.1

1.1       misho       1: $Id: README.NEW-OUTPUT-API 219039 2006-08-30 07:39:09Z mike $
                      2: 
                      3: 
                      4: API adjustment to the old output control code:
                      5: 
                      6:        Everything now resides beneath the php_output namespace, 
                      7:        and there's an API call for every output handler op.
                      8: 
                      9:        Checking output control layers status:
                     10:                // Using OG()
                     11:                php_output_get_status(TSRMLS_C);
                     12: 
                     13:        Starting the default output handler:
                     14:                // php_start_ob_buffer(NULL, 0, 1 TSRMLS_CC);
                     15:                php_output_start_default(TSRMLS_C);
                     16: 
                     17:        Starting an user handler by zval:
                     18:                // php_start_ob_buffer(zhandler, chunk_size, erase TSRMLS_CC);
                     19:                php_output_start_user(zhandler, chunk_size, flags TSRMLS_CC);
                     20: 
                     21:        Starting an internal handler whithout context:
                     22:                // php_ob_set_internal_handler(my_php_output_handler_func_t, buffer_size, "output handler name", erase TSRMLS_CC);
                     23:                php_output_start_internal(handler_name, handler_name_len, my_php_output_handler_func_t, chunk_size, flags TSRMLS_CC);
                     24: 
                     25:        Starting an internal handler with context:
                     26:                // not possible with old API
                     27:                php_output_handler *h;
                     28:                h = php_output_handler_create_internal(handler_name, handler_name_len, my_php_output_handler_context_func_t, chunk_size, flags TSRMLS_CC);
                     29:                php_output_handler_set_context(h, my_context, my_context_dtor);
                     30:                php_output_handler_start(h TSRMLS_CC);
                     31: 
                     32:        Testing whether a certain output handler has already been started:
                     33:                // php_ob_handler_used("output handler name" TSRMLS_CC);
                     34:                php_output_handler_started(handler_name, handler_name_len TSRMLS_CC);
                     35: 
                     36:        Flushing one output buffer:
                     37:                // php_ob_end_buffer(1, 1 TSRMLS_CC);
                     38:                php_output_flush(TSRMLS_C);
                     39: 
                     40:        Flushing all output buffers:
                     41:                // not possible with old API
                     42:                php_output_flush_all(TSRMLS_C);
                     43: 
                     44:        Cleaning one output buffer:
                     45:                // php_ob_end_buffer(0, 1 TSRMLS_CC);
                     46:                php_output_clean(TSRMLS_C);
                     47: 
                     48:        Cleaning all output buffers:
                     49:                // not possible with old API
                     50:                php_output_clean_all(TSRMLS_C);
                     51: 
                     52:        Discarding one output buffer:
                     53:                // php_ob_end_buffer(0, 0 TSRMLS_CC);
                     54:                php_output_discard(TSRMLS_C);
                     55: 
                     56:        Discarding all output buffers:
                     57:                // php_ob_end_buffers(0 TSRMLS_CC);
                     58:                php_output_discard_all(TSRMLS_C);
                     59: 
                     60:        Stopping (and dropping) one output buffer:
                     61:                // php_ob_end_buffer(1, 0 TSRMLS_CC)
                     62:                php_output_end(TSRMLS_C);
                     63: 
                     64:        Stopping (and dropping) all output buffers:
                     65:                // php_ob_end_buffers(1, 0 TSRMLS_CC);
                     66:                php_output_end_all(TSRMLS_C);
                     67: 
                     68:        Retrieving output buffers contents:
                     69:                // php_ob_get_buffer(zstring TSRMLS_CC);
                     70:                php_output_get_contents(zstring TSRMLS_CC);
                     71: 
                     72:        Retrieving output buffers length:
                     73:                // php_ob_get_length(zlength TSRMLS_CC);
                     74:                php_output_get_length(zlength TSRMLS_CC);
                     75: 
                     76:        Retrieving output buffering level:
                     77:                // OG(nesting_level);
                     78:                php_output_get_level(TSRMLS_C);
                     79: 
                     80:        Issue a warning because of an output handler conflict:
                     81:                // php_ob_init_conflict("to be started handler name", "to be tested if already started handler name" TSRMLS_CC);
                     82:                php_output_handler_conflict(new_handler_name, new_handler_name_len, set_handler_name, set_handler_name_len TSRMLS_CC);
                     83: 
                     84:        Registering a conflict checking function, which will be checked prior starting the handler:
                     85:                // not possible with old API, unless hardcoding into output.c
                     86:                php_output_handler_conflict_register(handler_name, handler_name_len, my_php_output_handler_conflict_check_t TSRMLS_CC);
                     87: 
                     88:        Registering a reverse conflict checking function, which will be checked prior starting the specified foreign handler:
                     89:                // not possible with old API
                     90:                php_output_handler_reverse_conflict_register(foreign_handler_name, foreign_handler_name_len, my_php_output_handler_conflict_check_t TSRMLS_CC);
                     91: 
                     92:        Facilitating a context from within an output handler callable with ob_start():
                     93:                // not possible with old API
                     94:                php_output_handler_hook(PHP_OUTPUT_HANDLER_HOOK_GET_OPAQ, (void *) &custom_ctx_ptr_ptr TSRMLS_CC);
                     95: 
                     96:        Disabling of the output handler by itself:
                     97:                //not possible with old API
                     98:                php_output_handler_hook(PHP_OUTPUT_HANDLER_HOOK_DISABLE, NULL TSRMLS_CC);
                     99: 
                    100:        Marking an output handler immutable by itself because of irreversibility of its operation:
                    101:                // not possible with old API
                    102:                php_output_handler_hook(PHP_OUTPUT_HANDLER_HOOK_IMMUTABLE, NULL TSRMLS_CC);
                    103: 
                    104:        Restarting the output handler because of a CLEAN operation:
                    105:                // not possible with old API
                    106:                if (flags & PHP_OUTPUT_HANDLER_CLEAN) { ... }
                    107: 
                    108:        Recognizing by the output handler itself if it gets discarded:
                    109:                // not possible with old API
                    110:                if ((flags & PHP_OUTPUT_HANDLER_CLEAN) && (flags & PHP_OUTPUT_HANDLER_FINAL)) { ... }
                    111: 
                    112: 
                    113: Output handler hooks
                    114: 
                    115:        The output handler can change its abilities at runtime. Eg. the gz handler can
                    116:        remove the CLEANABLE and REMOVABLE bits when the first output has passed through it;
                    117:        or handlers implemented in C to be used with ob_start() can contain a non-global
                    118:        context:
                    119:                PHP_OUTPUT_HANDLER_HOOK_GET_OPAQ
                    120:                        pass a void*** pointer as second arg to receive the address of a pointer
                    121:                        pointer to the opaque field of the output handler context
                    122:                PHP_OUTPUT_HANDLER_HOOK_GET_FLAGS
                    123:                        pass a int* pointer as second arg to receive the flags set for the output handler
                    124:                PHP_OUTPUT_HANDLER_HOOK_GET_LEVEL
                    125:                        pass a int* pointer as second arg to receive the level of this output handler
                    126:                        (starts with 0)
                    127:                PHP_OUTPUT_HANDLER_HOOK_IMMUTABLE
                    128:                        the second arg is ignored; marks the output handler to be neither cleanable
                    129:                        nor removable
                    130:                PHP_OUTPUT_HANDLER_HOOK_DISABLE
                    131:                        the second arg is ignored; marks the output handler as disabled
                    132: 
                    133: 
                    134: Open questions
                    135: 
                    136:        Should the userland API be adjusted and unified?
                    137:        
                    138:        Many bits of the manual (and very first implementation) do not comply
                    139:        with the behaviour of the current (to be obsoleted) code, thus should
                    140:        the manual or the behaviour be adjusted?
                    141: 
                    142: END

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>