PHP/resource/stream

from HTYP, the free directory anyone can edit if they can prove to me that they're not a spambot
Revision as of 01:36, 11 February 2026 by Woozle (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
stream-type "resource" demiobjects in PHP

{{#set: page title=stream-type "resource" demiobjects in PHP }}

About

Although there are a lot of functions that handle streams in PHP, how to properly use these functions is often not explained very well. I'm having to reverse-engineer a lot through trial and error.

Tentative Conclusions

  • If a stream is set to blocking mode (with stream_set_blocking(<stream resource>, TRUE);), then EoS (end-of-stream) is indicated by the return of an empty string.
    • Questions about how it works in non-blocking mode:
      • How do we detect EoS in non-blocking mode? Some tentative leads:
        • We could set the stream with an event-callback (see stream_notification_callback) and look for STREAM_NOTIFY_COMPLETED events. PROBLEM: docs say this is only supported for http and ftp.
        • Maybe feof() would work? PROBLEM: although docs say this can be used on a stream, they also say it has to have been opened with fopen() or fsockopen(), which rules out process-fed streams created with functions like ssh2_exec().
      • Does empty-string still correctly signal that the process has completed?
        • I think we have to assume that this is true for stream_get_contents(): it will never return empty as long as the process is active. (Maybe in non-blocking mode, it blocks until there is at least one byte, or something?)
      • What happens if the process has not completed (so there's no new data yet) -- how can we tell that there might be more?

Reference