<HTML ><HEAD ><TITLE >Streams Basics</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK REL="HOME" TITLE="PHP Manual" HREF="index.html"><LINK REL="UP" TITLE="Streams API for PHP Extension Authors" HREF="streams.html"><LINK REL="PREVIOUS" TITLE="Streams API for PHP Extension Authors" HREF="streams.html"><LINK REL="NEXT" TITLE="Streams as Resources" HREF="streams.resources.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=ISO-8859-1"></HEAD ><BODY CLASS="sect1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >PHP Manual</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="streams.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >Chapter 43. Streams API for PHP Extension Authors</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="streams.resources.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="sect1" ><H1 CLASS="sect1" ><A NAME="streams.basics" ></A >Streams Basics</H1 ><P > Using streams is very much like using ANSI stdio functions. The main difference is in how you obtain the stream handle to begin with. In most cases, you will use <B CLASS="function" >php_stream_open_wrapper()</B > to obtain the stream handle. This function works very much like fopen, as can be seen from the example below: </P ><P > <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN101772" ></A ><P ><B >Example 43-1. simple stream example that displays the PHP home page</B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="c" >php_stream * stream = php_stream_open_wrapper("http://www.php.net", "rb", REPORT_ERRORS, NULL); if (stream) { while(!php_stream_eof(stream)) { char buf[1024]; if (php_stream_gets(stream, buf, sizeof(buf))) { printf(buf); } else { break; } } php_stream_close(stream); }</PRE ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE > </P ><P > The table below shows the Streams equivalents of the more common ANSI stdio functions. Unless noted otherwise, the semantics of the functions are identical. <DIV CLASS="table" ><A NAME="AEN101776" ></A ><P ><B >Table 43-1. ANSI stdio equivalent functions in the Streams API</B ></P ><TABLE BORDER="1" CLASS="CALSTABLE" ><THEAD ><TR ><TH ALIGN="LEFT" VALIGN="MIDDLE" >ANSI Stdio Function</TH ><TH ALIGN="LEFT" VALIGN="MIDDLE" >PHP Streams Function</TH ><TH ALIGN="LEFT" VALIGN="MIDDLE" >Notes</TH ></TR ></THEAD ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="MIDDLE" >fopen</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >php_stream_open_wrapper</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >Streams includes additional parameters</TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="MIDDLE" >fclose</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >php_stream_close</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" > </TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="MIDDLE" >fgets</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >php_stream_gets</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" > </TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="MIDDLE" >fread</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >php_stream_read</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >The nmemb parameter is assumed to have a value of 1, so the prototype looks more like read(2)</TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="MIDDLE" >fwrite</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >php_stream_write</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >The nmemb parameter is assumed to have a value of 1, so the prototype looks more like write(2)</TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="MIDDLE" >fseek</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >php_stream_seek</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" > </TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="MIDDLE" >ftell</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >php_stream_tell</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" > </TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="MIDDLE" >rewind</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >php_stream_rewind</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" > </TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="MIDDLE" >feof</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >php_stream_eof</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" > </TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="MIDDLE" >fgetc</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >php_stream_getc</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" > </TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="MIDDLE" >fputc</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >php_stream_putc</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" > </TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="MIDDLE" >fflush</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >php_stream_flush</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" > </TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="MIDDLE" >puts</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >php_stream_puts</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >Same semantics as puts, NOT fputs</TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="MIDDLE" >fstat</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >php_stream_stat</TD ><TD ALIGN="LEFT" VALIGN="MIDDLE" >Streams has a richer stat structure</TD ></TR ></TBODY ></TABLE ></DIV > </P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="streams.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="streams.resources.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Streams API for PHP Extension Authors</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="streams.html" ACCESSKEY="U" >Up</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Streams as Resources</TD ></TR ></TABLE ></DIV ></BODY ></HTML >