ID: 26862 Comment by: scottmacvicar at ntlworld dot com Reported By: nunoplopes at sapo dot pt Status: Verified Bug Type: Output Control Operating System: * PHP Version: 4CVS, 5CVS New Comment:
I think i've tracked this one down to the URL parser, it happens when the argument do_flush is set to false for url_adapt_ext (url_scanner_ex.c line 837) this is because it only expects to do the re-write at the final flush. I modified what was passed in to accept the final flush or a flush halfway through the script execution. Patch --- diff -u url_scanner_ex.c url_scanner_ex.c.patched --- url_scanner_ex.c 2004-02-10 01:29:05.000000000 +0000 +++ url_scanner_ex.c.patched 2004-02-10 01:30:51.000000000 +0000 @@ -918,7 +918,8 @@ size_t len; if (BG(url_adapt_state_ex).url_app.len != 0) { - *handled_output = url_adapt_ext(output, output_len, &len, (zend_bool) (mode&PHP_OUTPUT_HANDLER_END ? 1 : 0) TSRMLS_CC); + *handled_output = url_adapt_ext(output, output_len, &len, (zend_bool) ((mode & PHP_OUTPUT_HANDLER_CONT) || (mode +& PHP_OUTPUT_HANDLER_END) ? 1 : 0) TSRMLS_CC); if (sizeof(uint) < sizeof(size_t)) { if (len > UINT_MAX) len = UINT_MAX; Previous Comments: ------------------------------------------------------------------------ [2004-01-22 10:48:57] nunoplopes at sapo dot pt I've checked the sources and if you changed the implementation of ob_flush everything works: use this: php_end_ob_buffer(1, 0 TSRMLS_CC); instead of: php_end_ob_buffer(1, 1 TSRMLS_CC); So, the error is in just_flush in php_end_ob_buffer(). ------------------------------------------------------------------------ [2004-01-10 11:42:24] nunoplopes at sapo dot pt Description: ------------ When using the given code, ob_flush() doesn't output all the buffer. When using ob_get_flush() it works as expected. Reproduce code: --------------- <?php session_start(); output_add_rewrite_var('var', 'value'); echo '<a href="file.php">link</a>'; ob_flush(); output_reset_rewrite_vars(); echo '<a href="file.php">link</a>'; ?> Expected result: ---------------- <a href="file.php?SESSID=xxx&var=value">link</a><a href="file.php">link</a> Actual result: -------------- <a href="file.php?SESSID=xxx&var=value">link</<a href="file.php">link</a> ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=26862&edit=1