<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >PHP 输入/输出流</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="PHP 手册" HREF="index.html"><LINK REL="UP" TITLE="支持的协议/封装协议列表" HREF="wrappers.html"><LINK REL="PREVIOUS" TITLE="FTP 和 FTPS" HREF="wrappers.ftp.html"><LINK REL="NEXT" TITLE="压缩流" HREF="wrappers.compression.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="section" 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 手册</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="wrappers.ftp.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >附录 N. 支持的协议/封装协议列表</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="wrappers.compression.html" ACCESSKEY="N" >下一页</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="section" ><H1 CLASS="section" ><A NAME="wrappers.php" >PHP 输入/输出流</A ></H1 ><P > PHP 3.0.13 及以上版本,自 PHP 4.3.0 起支持 <TT CLASS="filename" >php://output</TT > 和 <TT CLASS="filename" >php://input</TT >,自 PHP 5.0.0 起支持 <TT CLASS="filename" >php://filter</TT >。 </P ><P ></P ><UL ><LI ><P ><TT CLASS="filename" >php://stdin</TT ></P ></LI ><LI ><P ><TT CLASS="filename" >php://stdout</TT ></P ></LI ><LI ><P ><TT CLASS="filename" >php://stderr</TT ></P ></LI ><LI ><P ><TT CLASS="filename" >php://output</TT ></P ></LI ><LI ><P ><TT CLASS="filename" >php://input</TT ></P ></LI ><LI ><P ><TT CLASS="filename" >php://filter</TT ></P ></LI ></UL ><P > <TT CLASS="filename" >php://stdin</TT >,<TT CLASS="filename" >php://stdout</TT > 和 <TT CLASS="filename" >php://stderr</TT > 允许访问 PHP 进程相应的输入或者输出流。 </P ><P > <TT CLASS="filename" >php://output</TT > 允许向输出缓冲机制写入数据,和 <A HREF="function.print.html" ><B CLASS="function" >print()</B ></A > 与 <A HREF="function.echo.html" ><B CLASS="function" >echo()</B ></A > 的方式相同。 </P ><P > <TT CLASS="filename" >php://input</TT > 允许读取 POST 的原始数据。和 <CODE CLASS="varname" >$HTTP_RAW_POST_DATA</CODE > 比起来,它给内存带来的压力较小,并且不需要任何特殊的 <TT CLASS="filename" >php.ini</TT > 设置。<TT CLASS="filename" >php://input</TT > 不能用于 <TT CLASS="literal" >enctype="multipart/form-data"</TT >。 </P ><P > <TT CLASS="filename" >php://stdin</TT > 和 <TT CLASS="filename" >php://input</TT > 是只读的,同时 <TT CLASS="filename" >php://stdout</TT >,<TT CLASS="filename" >php://stderr</TT > 和 <TT CLASS="filename" >php://output</TT > 是只写的。 </P ><P > <TT CLASS="filename" >php://filter</TT > 是一种设计用来允许过滤器程序在打开时成为流的封装协议。这对于单独具有完整功能的文件函数例如 <A HREF="function.readfile.html" ><B CLASS="function" >readfile()</B ></A >,<A HREF="function.file.html" ><B CLASS="function" >file()</B ></A > 和 <A HREF="function.file-get-contents.html" ><B CLASS="function" >file_get_contents()</B ></A > 很有用,否则就没有机会在读取内容之前将过滤器应用于流之上。 </P ><P > <TT CLASS="filename" >php://filter</TT > 的目标接受随后的“参数”作为其“路径”的一部分。 </P ><P ></P ><UL ><LI ><P > <TT CLASS="literal" >/resource=<stream to be filtered></TT > (<SPAN CLASS="emphasis" ><I CLASS="emphasis" >required</I ></SPAN >) 此参数必须位于 <TT CLASS="filename" >php://filter</TT > 的末尾并且需要指向向要过滤的流。 <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN302985" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#FF8000">/* This is equivalent to simply:<br /> readfile("http://www.example.com");<br /> since 否 filters are actually specified */<br /><br /></font><font color="#0000BB">readfile</font><font color="#007700">(</font><font color="#DD0000">"php://filter/resource=http://www.example.com"</font><font color="#007700">);<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ></LI ><LI ><P > <TT CLASS="literal" >/read=<filter list to apply to read chain></TT > (<SPAN CLASS="emphasis" ><I CLASS="emphasis" >optional</I ></SPAN >) 本参数接受一个或多个过滤器的名字,用管道字符 <TT CLASS="literal" >|</TT > 分隔。 <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN302992" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#FF8000">/* This will output the contents of<br /> www.example.com entirely in uppercase */<br /></font><font color="#0000BB">readfile</font><font color="#007700">(</font><font color="#DD0000">"php://filter/read=string.toupper/resource=http://www.example.com"</font><font color="#007700">);<br /><br /></font><font color="#FF8000">/* This will do the same as above<br /> but will also ROT13 encode it */<br /></font><font color="#0000BB">readfile</font><font color="#007700">(</font><font color="#DD0000">"php://filter/read=string.toupper|string.rot13/resource=http://www.example.com"</font><font color="#007700">);<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ></LI ><LI ><P > <TT CLASS="literal" >/write=<filter list to apply to write chain></TT > (<SPAN CLASS="emphasis" ><I CLASS="emphasis" >optional</I ></SPAN >) 本参数接受一个或多个过滤器的名字,用管道字符 <TT CLASS="literal" >|</TT > 分隔。 <DIV CLASS="informalexample" ><P ></P ><A NAME="AEN302999" ></A ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#FF8000">/* 下面的语句将使用 rot13 过滤器过滤 "Hello World"<br /> 字符串,并写入当前目录下的 example.txt */<br /></font><font color="#0000BB">file_put_contents</font><font color="#007700">(</font><font color="#DD0000">"php://filter/write=string.rot13/resource=example.txt"</font><font color="#007700">,</font><font color="#DD0000">"Hello World"</font><font color="#007700">);<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P ></P ></DIV > </P ></LI ><LI ><P > <TT CLASS="literal" >/<filter list to apply to both chains></TT > (<SPAN CLASS="emphasis" ><I CLASS="emphasis" >optional</I ></SPAN >) 任何没有被 <TT CLASS="literal" >read=</TT > 或 <TT CLASS="literal" >write=</TT > 指定的过滤器会被同时应用于读写链。 </P ></LI ></UL ><P > <DIV CLASS="table" ><A NAME="AEN303008" ></A ><P ><B >表 N-6. 封装协议摘要(对于 <TT CLASS="literal" >php://filter</TT >,是指被过滤的封装器摘要。) </B ></P ><TABLE BORDER="1" CLASS="CALSTABLE" ><COL><COL><THEAD ><TR ><TH >属性</TH ><TH >支持</TH ></TR ></THEAD ><TBODY ><TR ><TD >受限于 <A HREF="ref.filesystem.html#ini.allow-url-fopen" >allow_url_fopen</A >。</TD ><TD >否</TD ></TR ><TR ><TD >允许读取</TD ><TD > 仅在 <TT CLASS="literal" >php://stdin</TT > 和 <TT CLASS="literal" >php://input</TT > 中允许。 </TD ></TR ><TR ><TD >允许写入</TD ><TD > 仅在 <TT CLASS="literal" >php://stdout</TT >, <TT CLASS="literal" >php://stderr</TT >, 和 <TT CLASS="literal" >php://output</TT > 中允许。 </TD ></TR ><TR ><TD >允许附加</TD ><TD > 仅在 <TT CLASS="literal" >php://stdout</TT >, <TT CLASS="literal" >php://stderr</TT >, 和 <TT CLASS="literal" >php://output</TT > 中允许 (与写入相同)。 </TD ></TR ><TR ><TD >允许同时读写</TD ><TD >否。这些封装器是单向的。</TD ></TR ><TR ><TD >支持 <A HREF="function.stat.html" ><B CLASS="function" >stat()</B ></A ></TD ><TD >否</TD ></TR ><TR ><TD >支持 <A HREF="function.unlink.html" ><B CLASS="function" >unlink()</B ></A ></TD ><TD >否</TD ></TR ><TR ><TD >支持 <A HREF="function.rename.html" ><B CLASS="function" >rename()</B ></A ></TD ><TD >否</TD ></TR ><TR ><TD >支持 <A HREF="function.mkdir.html" ><B CLASS="function" >mkdir()</B ></A ></TD ><TD >否</TD ></TR ><TR ><TD >支持 <A HREF="function.rmdir.html" ><B CLASS="function" >rmdir()</B ></A ></TD ><TD >否</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="wrappers.ftp.html" ACCESSKEY="P" >上一页</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >起始页</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="wrappers.compression.html" ACCESSKEY="N" >下一页</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >FTP 和 FTPS</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="wrappers.html" ACCESSKEY="U" >上一级</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >压缩流</TD ></TR ></TABLE ></DIV ></BODY ></HTML >