Re: Assistance using php_start_ob_buffer
| From: | Eric Len | Date: | Sun, 01 Jun 2008 15:20:01 +0000 |
| Subject: | Re: Assistance using php_start_ob_buffer | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-38053@lists.php.net to get a copy of this message | ||
Okay after looking at the php source looks like the problem is in php_request_shutdown where it flushes all the buffers.
So I'm trying from my extension to register a shutdown function to be called prior to that(only alternative I see other than mucking the php source).
I've figured out basic calling for the
zif_register_shutdown_function
but I'm stuck on how to put something on the
argument_stack
so that it can pass
zend_get_parameters_array
which is called in z
if_register_shutdown_function.
any help appreciated
thanks
Eric
Eric Len wrote:
Hi, I'm trying to write an extension that(running under php in fcgi mode) does the equivalent of -php.ini auto_prepend_file = start.inc auto_append_file = end.inc -start.inc ob_start() -end.inc $len = ob_get_length() // modify buffer slightly based on length value // php prints final buffer on script termination So I thought I merely needed to do the C equivalent of these, in short: RINIT php_start_ob_buffer(NULL, 0, 0 TSRMLS_CC); RSHUTDOWN zval * outbuf = NULL; zval outbuflen; INIT_ZVAL(outbuflen); if ( php_ob_get_length(&outbuflen TSRMLS_CC) != FAILURE && Z_L_VAL(outbuflen) != 0 ) {ALLOC_INIT_ZVAL(outbuf); php_ob_get_buffer(outbuf TSRMLS_CC);// Modify buffer based on len parameter} // Done php prints buffer by itself on script return However no matter what variation on the above I've tried, including different php_ob_* api calls I can't ever get any buffer length(I do see script data output). It's like ob_start() was never called. In php.ini I have output_buffering = Off Can someone please point out what I'm missing here? thanks! Dal Eric Len