I've moved EOF detection into the streams layer; a stream reader
implementation should set stream->eof when it detects EOF.
Fixed test for user streams - it still fails but that is due to an output
buffering bug.
open_basedir ini option didn't work. It was removing the trailing
slashes and then addeding it back to only one of the string,
now it adds it back to to both if needed.
with regard to sockets. The behaviour should be aligned with PHP 4.2 now.
This has been verified to some degree.
If the underlying stream operations block when no new data is readable,
we need to take extra precautions.
If there is buffered data available, we check for a EOL. If it exists,
we pass the data immediately back to the caller. This saves a call
to the read implementation and will not block where blocking
is not necessary at all.
If the stream buffer contains more data than the caller requested,
we can also avoid that costly step and simply return that data.
a directory which will be scanned for *.ini files after the main php.ini
file has been parsed. This makes it much easier to automatically deploy
a modular PHP since adding extensions which have their own ini switches can
now be done by simply dropping a foo.ini file in the right directory and
restarting. A list of parsed ini files is maintained and shown on the
phpinfo page.
ob_implicit_flush() and ob_flush_all() are stopped working.
var_dump() and hightlisht_string() outputs buffer contents wrongly
with ob_implicit_flush().
Everyone should be happy now.
It was only OG(implicit_flush) interpretation issue after all.
we must apply the default before calling php_enable_output_compression().
I have left the default setting in the rinit function even though i do think
it is not necessary.
Cause: the chunk size is taken from the zlib.output_compression setting,
which is 0 or 1. This causes the block_size for output buffer to be set
to 0 (1 / 2) and thus causes infinite recursion in php_ob_allocate().
Solution: use a value of 0 for the chunk size which will use the default
sizes. Also add a sanity check which will default the block_size to 1
if it ends up as 0.
second and subsequent events.
Implement very simple recursion protection for user streams written
like this:
class urlEncodeStream {
var $fp = NULL;
function stream_open($path, $mode, $options, &$opened_path)
{
$this->fp = fopen($path, $mode); // <-- this recurses infinitely
return is_resource($this->fp);
}
}
file_register_wrapper('urlencode', 'urlEncodeStream');
$fp = fopen('urlencode:///tmp/outputfile.txt', 'w');
Noticed by: Yasuo.
Rationale: user streams might not be implementing network access,
and the administrator can disable the file_register_wrapper function
and other network access functions if s/he does not want to allow
this functionality.
Eliminate similar code from network.c.
Implement fgets equivalent at the streams level, which can detect
the mac, dos and unix line endings and handle them appropriately.
The default behaviour is unix (and dos) line endings.
An ini option to control this behaviour will follow.
# Don't forget to make clean!
# I've done some testing but would appreciate feedback from
# people with scripts/extensions that seek around a lot.
It doesn't render as nicely as it used to on older browsers, but it
does result in smaller files, and opens the door to using your own CSS
to style it differently.
There is a patch to Zend/zend_ini.c, but I don't have enough Karma, so
Derick has the patch.
# Maybe I'm missing something. PHP has strcoll() since 4.0.5 but HAVE_STRCOLL
# was always only available under Unix, no one activated it for Win32 since
# then?
#
# Test to show it works:
# <? $a=array("a", "z", "ä"); setlocale(LC_ALL, "German"); usort($a, "strcoll"); var_dump($a); ?>
#
# Output:
# array(3) {
# [0]=>
# string(1) "a"
# [1]=>
# string(1) "ä"
# [2]=>
# string(1) "z"
# }
#
# Thanks to a comment found on the usort() page and to a dlcp post about a
# similar issue.
#
# Worth for a MFH for 4.2.3, anyone ?
drop the latter. THX to Markus Fischer - i did not recognize this function.
@Expanded ob_start() to allow object parameters without methodnames and
@use default method __output_handler(). (Marcus)