Re: streams, stderr/out and zend_fprintf ?

From: Date: Tue, 06 May 2003 15:18:15 +0000
Subject: Re: streams, stderr/out and zend_fprintf ?
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-1316@lists.php.net to get a copy of this message
Tips: Don't use zend_printf. Do try and use the php_stream_XXX API where it makes sense. When running in a web environment, or without an ncurses interface, use the PHP_WRITE() or php_printf() functions to generate output to send to the browser; the output will be captured in the output buffering layer. From what you've described, it sounds like you don't need to use the streams API, so you are free to use the usual stdio approach, just beware of the limitations of the solaris libc; if you are using the pre-opened std* streams, you will be fine; if you need to open your own, you might run out of luck. Consider using POSIX open(), read(), write() rather than stdio. If you miss printf and fprintf, you can open a php stream around an existing file descriptor (with no more overhead than stdio) and use php_stream_printf(). To access the std* streams via the streams API, you can open them using the special php://stdin, php://stdout and php://stderr filenames. This is, of course, not always a sensible thing to do in a web environment. For more info, read the docs online at http://php.net/streams --Wez. On Tue, 6 May 2003, Hans Zaunere wrote: > > I'm developing an extension that talks to a serial device (under RedHat 7.3). > The dynamic module will then be loaded into a CLI PHP, which will use an > ncurses interface, MySQL connectivity, etc. to make the application complete. > > In light of recent talk about streams in extensions, I have a couple of > questions (I haven't done much extension programming yet, so forgive any > naiveness and hopefully I haven't missed anything in the mail archives): > > -- With most console C programs I use the builtin stdin/stdout/stderr macros > with functions like fprintf. As a PHP extension, should I still be using > these, or does php_streams implement something different (ie, a php_stderr > macro)? > > -- I'm seeing there is a zend_printf() but no zend_fprintf(). Am I missing > something, or should I just be using the standard C lib functions? > > -- Should I be using php_stream_* functions to explicitly open the standard > I/O streams? Please say no. > > For the extension I'm developing now, I can see how much of this is > irrelevant; it's a CLI based application, and when the process ends, so will > everything else, thanks to the kernel. However, I would like to design the > extension so that if I were to load it into an Apache DSO PHP, it'd be > working "the right way" and utilize all that's modern PHP extension > development (yes, I would have a reason to talk a serial device protocol from > a web server :) > > Any pointers on these types of best practices would be greatly appreciated. > > Thank you, > > Hans > > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > > >

« previous php.internals (#1316) next »