Annotation of embedaddon/php/README.NEW-OUTPUT-API, revision 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>