Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:38053 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 24370 invoked from network); 1 Jun 2008 15:18:10 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 1 Jun 2008 15:18:10 -0000 X-Host-Fingerprint: 66.51.222.14 unknown Received: from [66.51.222.14] ([66.51.222.14:6356] helo=localhost.localdomain) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 04/38-54820-1BDB2484 for ; Sun, 01 Jun 2008 11:18:10 -0400 Message-ID: <04.38.54820.1BDB2484@pb1.pair.com> To: internals@lists.php.net Date: Sun, 01 Jun 2008 08:20:01 -0700 User-Agent: Thunderbird 2.0.0.14 (Windows/20080421) MIME-Version: 1.0 References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Posted-By: 66.51.222.14 Subject: Re: Assistance using php_start_ob_buffer From: spamthis@dslextreme.com (Eric Len) 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