Lamenting PHP's streaming support...
| From: | jtl_phpdotnet at spamex dot com | Date: | Sun, 01 Aug 2004 20:28:18 +0000 |
| Subject: | Lamenting PHP's streaming support... | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-11797@lists.php.net to get a copy of this message | ||
Hi everyone,
I'm trying to write some serious parsing applications in PHP. I find myself frequently
lamenting the 4GL-like support for buffered streams. I'd rather a full fledged streaming API
with stream handles (or objects) like you get in mature 3GL languages like C and Java.
I'm making do with the single character-stream buffer available to me in the "output
buffer." I wrap this stream in classes that emulate distinct character streams by saving the
current output buffer, clearing the output buffer for the new virtual stream, and then restoring the
original output buffer when the virtual stream is closed.
This works, but it costs in overhead and requires repeatedly creating string objects to store old
buffers and then rewriting those objects back to the output buffer. This is less than ideal from
both a performance standpoint and a complexity standpoint (and an increased potential for wierd
errors).
I'm not too concerned about the performance issues of these virtual buffers because I can
architect the application so that it minimizes these switches. However, I find myself (so far)
unable to architect around another serious performance issue.
I'm having to create a new string for each character sequence that I write to the output
buffer. I'd rather just copy the substring of the document being parsed directly to the output
buffer. Object creation is an expensive activity when thousands of objects needed to be created for
a single page hit.
All I need to deal with this problem is a new PHP function:
ob_write($string, $start, $length)
This would write the characters in substr($string, $start, $length) to the output buffer without
creating an intermediate string object.
Is there anything on the horizon that would give me the kind of streaming support I'm looking
for?
Thanks for your help!
~joe