Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > 05cd670d8a02b2b4a0ffb1756f2e8308 > files > 1072

php-manual-zh-5.2.4-1mdv2008.1.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>fopen</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="PHP 手册"
HREF="index.html"><LINK
REL="UP"
TITLE="Filesystem 文件系统函数"
HREF="ref.filesystem.html"><LINK
REL="PREVIOUS"
TITLE="fnmatch"
HREF="function.fnmatch.html"><LINK
REL="NEXT"
TITLE="fpassthru"
HREF="function.fpassthru.html"><META
HTTP-EQUIV="Content-type"
CONTENT="text/html; charset=UTF-8"></HEAD
><BODY
CLASS="refentry"
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="function.fnmatch.html"
ACCESSKEY="P"
>上一页</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="function.fpassthru.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><H1
><A
NAME="function.fopen"
></A
>fopen</H1
><DIV
CLASS="refnamediv"
><A
NAME="AEN53306"
></A
><P
>    (PHP 3, PHP 4, PHP 5)</P
>fopen&nbsp;--&nbsp;打开文件或者 URL</DIV
><DIV
CLASS="refsect1"
><A
NAME="AEN53309"
></A
><H2
>说明</H2
>resource <B
CLASS="methodname"
>fopen</B
> ( string filename, string mode [, bool use_include_path [, resource zcontext]] )<BR
></BR
><P
>&#13;   <B
CLASS="function"
>fopen()</B
> 将
   <CODE
CLASS="parameter"
>filename</CODE
>
   指定的名字资源绑定到一个流上。如果
   <CODE
CLASS="parameter"
>filename</CODE
>
   是 "scheme://..." 的格式,则被当成一个
   URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议,PHP
   将发出一条消息来帮助检查脚本中潜在的问题并将
   <CODE
CLASS="parameter"
>filename</CODE
>
   当成一个普通的文件名继续执行下去。
  </P
><P
>&#13;   如果 PHP 认为
   <CODE
CLASS="parameter"
>filename</CODE
>
   指定的是一个本地文件,将尝试在该文件上打开一个流。该文件必须是
   PHP 可以访问的,因此需要确认文件访问权限允许该访问。如果激活了<A
HREF="features.safe-mode.html#ini.safe-mode"
>安全模式</A
>或者
   <A
HREF="features.safe-mode.html#ini.open-basedir"
>open_basedir</A
>
   则会应用进一步的限制。
  </P
><P
>&#13;   如果 PHP 认为
   <CODE
CLASS="parameter"
>filename</CODE
>
   指定的是一个已注册的协议,而该协议被注册为一个网络
   URL,PHP 将检查并确认
   <A
HREF="ref.filesystem.html#ini.allow-url-fopen"
>allow_url_fopen</A
>
   已被激活。如果关闭了,PHP 将发出一个警告,而 fopen 的调用则失败。
  </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
    所支持的协议列表见<A
HREF="wrappers.html"
>附录 N</A
>。某些协议(也被称为
    <TT
CLASS="literal"
>wrappers</TT
>)支持
    <TT
CLASS="literal"
>context</TT
> 和/或 <TT
CLASS="filename"
>php.ini</TT
>
    选项。参见相应的页面哪些选项可以被设定(例如 <TT
CLASS="filename"
>php.ini</TT
> 中用于
    <TT
CLASS="literal"
>http</TT
> wrapper 的 <TT
CLASS="literal"
>user_agent</TT
> 值)。
   </P
></BLOCKQUOTE
></DIV
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>对 context 的支持是
PHP 5.0.0 添加的。有关 <TT
CLASS="literal"
>context</TT
> 的说明见<A
HREF="ref.stream.html"
>参考 CLX, <I
>Stream Functions</I
></A
>。</P
></BLOCKQUOTE
></DIV
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
    自 PHP 4.3.2
    起,对所有区别二进制和文本模式的平台默认模式都被设为二进制模式。如果在升级后脚本碰到问题,尝试暂时使用
    <TT
CLASS="literal"
>'t'</TT
> 标记,直到所有的脚本都照以下所说的改为更具移植性以后。
   </P
></BLOCKQUOTE
></DIV
><P
>&#13;   <CODE
CLASS="parameter"
>mode</CODE
>
   参数指定了所要求到该流的访问类型。可以是以下:
   <DIV
CLASS="table"
><A
NAME="AEN53356"
></A
><P
><B
>表 1. <B
CLASS="function"
>fopen()</B
> 中 <CODE
CLASS="parameter"
>mode</CODE
> 的可能值列表</B
></P
><TABLE
BORDER="1"
CLASS="CALSTABLE"
><COL><COL><THEAD
><TR
><TH
><CODE
CLASS="parameter"
>mode</CODE
></TH
><TH
>说明</TH
></TR
></THEAD
><TBODY
><TR
><TD
><TT
CLASS="literal"
>'r'</TT
></TD
><TD
>&#13;        只读方式打开,将文件指针指向文件头。
       </TD
></TR
><TR
><TD
><TT
CLASS="literal"
>'r+'</TT
></TD
><TD
>&#13;        读写方式打开,将文件指针指向文件头。
       </TD
></TR
><TR
><TD
><TT
CLASS="literal"
>'w'</TT
></TD
><TD
>&#13;        写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
       </TD
></TR
><TR
><TD
><TT
CLASS="literal"
>'w+'</TT
></TD
><TD
>&#13;        读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
       </TD
></TR
><TR
><TD
><TT
CLASS="literal"
>'a'</TT
></TD
><TD
>&#13;        写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
       </TD
></TR
><TR
><TD
><TT
CLASS="literal"
>'a+'</TT
></TD
><TD
>&#13;        读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
       </TD
></TR
><TR
><TD
><TT
CLASS="literal"
>'x'</TT
></TD
><TD
>&#13;        创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则
        <B
CLASS="function"
>fopen()</B
> 调用失败并返回 <TT
CLASS="constant"
><B
>FALSE</B
></TT
>,并生成一条
        <TT
CLASS="constant"
><B
>E_WARNING</B
></TT
> 级别的错误信息。如果文件不存在则尝试创建之。这和给
        底层的 <TT
CLASS="literal"
>open(2)</TT
> 系统调用指定
        <TT
CLASS="literal"
>O_EXCL|O_CREAT</TT
> 标记是等价的。此选项被
         PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
       </TD
></TR
><TR
><TD
><TT
CLASS="literal"
>'x+'</TT
></TD
><TD
>&#13;        创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则
        <B
CLASS="function"
>fopen()</B
> 调用失败并返回 <TT
CLASS="constant"
><B
>FALSE</B
></TT
>,并生成一条
        <TT
CLASS="constant"
><B
>E_WARNING</B
></TT
> 级别的错误信息。如果文件不存在则尝试创建之。这和给
        底层的 <TT
CLASS="literal"
>open(2)</TT
> 系统调用指定
        <TT
CLASS="literal"
>O_EXCL|O_CREAT</TT
> 标记是等价的。此选项被
        PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
       </TD
></TR
></TBODY
></TABLE
></DIV
>
  </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
    不同的操作系统家族具有不同的行结束习惯。当写入一个文本文件并想插入一个新行时,需要使用符合操作系统的行结束符号。基于
    Unix 的系统使用 <TT
CLASS="literal"
>\n</TT
>
    作为行结束字符,基于 Windows 的系统使用 <TT
CLASS="literal"
>\r\n</TT
>
    作为行结束字符,基于 Macintosh 的系统使用 <TT
CLASS="literal"
>\r</TT
>
    作为行结束字符。
   </P
><P
>&#13;    如果写入文件时使用了错误的行结束符号,则其它应用程序打开这些文件时可能会表现得很怪异。
   </P
><P
>&#13;    Windows 下提供了一个文本转换标记(<TT
CLASS="literal"
>'t'</TT
>)可以透明地将
    <TT
CLASS="literal"
>\n</TT
> 转换为 <TT
CLASS="literal"
>\r\n</TT
>。与此对应还可以使用
    <TT
CLASS="literal"
>'b'</TT
> 来强制使用二进制模式,这样就不会转换数据。要使用这些标记,要么用
    <TT
CLASS="literal"
>'b'</TT
> 或者用 <TT
CLASS="literal"
>'t'</TT
> 作为
    <CODE
CLASS="parameter"
>mode</CODE
> 参数的最后一个字符。
   </P
><P
>&#13;    默认的转换模式依赖于 SAPI 和所使用的 PHP
    版本,因此为了便于移植鼓励总是指定恰当的标记。如果是操作纯文本文件并在脚本中使用了
    <TT
CLASS="literal"
>\n</TT
> 作为行结束符,但还要期望这些文件可以被其它应用程序例如
    Notepad 读取,则在 mode 中使用
    <TT
CLASS="literal"
>'t'</TT
>。在所有其它情况下使用 <TT
CLASS="literal"
>'b'</TT
>。
   </P
><P
>&#13;    在操作二进制文件时如果没有指定 <TT
CLASS="literal"
>'b'</TT
>
    标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于
    <TT
CLASS="literal"
>\r\n</TT
> 字符的奇怪问题。
   </P
></BLOCKQUOTE
></DIV
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
    为移植性考虑,强烈建议在用 <B
CLASS="function"
>fopen()</B
>
    打开文件时总是使用 <TT
CLASS="literal"
>'b'</TT
> 标记。
   </P
></BLOCKQUOTE
></DIV
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
    再一次,为移植性考虑,强烈建议你重写那些依赖于
    <TT
CLASS="literal"
>'t'</TT
> 模式的代码使其使用正确的行结束符并改成
    <TT
CLASS="literal"
>'b'</TT
> 模式。
   </P
></BLOCKQUOTE
></DIV
><P
>&#13;   如果也需要在
   <A
HREF="ini.core.html#ini.include-path"
>include_path</A
>
   中搜寻文件的话,可以将可选的第三个参数
   <CODE
CLASS="parameter"
>use_include_path</CODE
>
   设为 '1' 或 <TT
CLASS="constant"
><B
>TRUE</B
></TT
>。
  </P
><P
>&#13;   如果打开失败,本函数返回 <TT
CLASS="constant"
><B
>FALSE</B
></TT
>。
  </P
><P
>&#13;   <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN53445"
></A
><P
><B
>例 1. <B
CLASS="function"
>fopen()</B
> 例子</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$handle </font><font color="#007700">= </font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#DD0000">"/home/rasmus/file.txt"</font><font color="#007700">, </font><font color="#DD0000">"r"</font><font color="#007700">);<br /></font><font color="#0000BB">$handle </font><font color="#007700">= </font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#DD0000">"/home/rasmus/file.gif"</font><font color="#007700">, </font><font color="#DD0000">"wb"</font><font color="#007700">);<br /></font><font color="#0000BB">$handle </font><font color="#007700">= </font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#DD0000">"http://www.example.com/"</font><font color="#007700">, </font><font color="#DD0000">"r"</font><font color="#007700">);<br /></font><font color="#0000BB">$handle </font><font color="#007700">= </font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#DD0000">"ftp://user:password@example.com/somefile.txt"</font><font color="#007700">, </font><font color="#DD0000">"w"</font><font color="#007700">);<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
  </P
><P
>&#13;   如果在用服务器模块版本的 PHP
   时在打开和写入文件上遇到问题,记住要确保所使用的文件是服务器进程所能够访问的。
  </P
><P
>&#13;   在 Windows 平台上,要小心转义文件路径中的每个反斜线,或者用斜线。
   <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN53451"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$handle </font><font color="#007700">= </font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#DD0000">"c:\\data\\info.txt"</font><font color="#007700">, </font><font color="#DD0000">"r"</font><font color="#007700">);<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
  </P
><DIV
CLASS="warning"
><P
></P
><TABLE
CLASS="warning"
BORDER="1"
WIDTH="100%"
><TR
><TD
ALIGN="CENTER"
><B
>警告</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
>当使用
SSL 时,Microsoft IIS 将违反协议不发送 close_notify 标记就关闭连接。PHP
将在到达数据尾端时报告 "SSL: Fatal Protocol Error"。要绕过此问题,应将
<A
HREF="ref.errorfunc.html#ini.error-reporting"
>error_reporting</A
> 级别降低为不包括警告。PHP
4.3.7 及更高版本可以在当使用 https:// 封装协议打开流的时候检测出有此问题的
IIS 服务器并抑制警告。如果使用 <A
HREF="function.fsockopen.html"
><B
CLASS="function"
>fsockopen()</B
></A
>
来创建一个 ssl:// 套接字,则需要自己检测并抑制警告信息。</P
></TD
></TR
></TABLE
></DIV
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>当<A
HREF="features.safe-mode.html"
>安全模式</A
>被激活时,PHP
将检查被操作的目录是否和正在执行的脚本有相同的 UID(所有者)。</P
></BLOCKQUOTE
></DIV
><P
>&#13;   参见<A
HREF="wrappers.html"
>附录 N</A
>,<A
HREF="function.fclose.html"
><B
CLASS="function"
>fclose()</B
></A
>,<A
HREF="function.fgets.html"
><B
CLASS="function"
>fgets()</B
></A
>,<A
HREF="function.fread.html"
><B
CLASS="function"
>fread()</B
></A
>,<A
HREF="function.fwrite.html"
><B
CLASS="function"
>fwrite()</B
></A
>,<A
HREF="function.fsockopen.html"
><B
CLASS="function"
>fsockopen()</B
></A
>,<A
HREF="function.file.html"
><B
CLASS="function"
>file()</B
></A
>,<A
HREF="function.file-exists.html"
><B
CLASS="function"
>file_exists()</B
></A
>,<A
HREF="function.is-readable.html"
><B
CLASS="function"
>is_readable()</B
></A
>,<A
HREF="function.stream-set-timeout.html"
><B
CLASS="function"
>stream_set_timeout()</B
></A
>
   和 <A
HREF="function.popen.html"
><B
CLASS="function"
>popen()</B
></A
>。
  </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="function.fnmatch.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="function.fpassthru.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>fnmatch</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="ref.filesystem.html"
ACCESSKEY="U"
>上一级</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>fpassthru</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>