Sophie

Sophie

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

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
>使用远程文件</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="features.html"><LINK
REL="PREVIOUS"
TITLE="对 PUT 方法的支持"
HREF="features.file-upload.put-method.html"><LINK
REL="NEXT"
TITLE="连接处理"
HREF="features.connection-handling.html"><META
HTTP-EQUIV="Content-type"
CONTENT="text/html; charset=UTF-8"></HEAD
><BODY
CLASS="chapter"
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="features.file-upload.put-method.html"
ACCESSKEY="P"
>上一页</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="features.connection-handling.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="chapter"
><H1
><A
NAME="features.remote-files"
>章 39. 使用远程文件</A
></H1
><P
>&#13;  只要在 <TT
CLASS="filename"
>php.ini</TT
> 文件中激活了 <CODE
CLASS="option"
>allow_url_fopen</CODE
>
  选项,就可以在大多数需要用文件名作为参数的函数中使用
  <ACRONYM
CLASS="acronym"
>HTTP</ACRONYM
> 和 <ACRONYM
CLASS="acronym"
>FTP</ACRONYM
> 的 URL
  来代替文件名。同时,也可以在
  <A
HREF="function.include.html"
><B
CLASS="function"
>include()</B
></A
>、<A
HREF="function.include-once.html"
><B
CLASS="function"
>include_once()</B
></A
>、<A
HREF="function.require.html"
><B
CLASS="function"
>require()</B
></A
> 及
  <A
HREF="function.require-once.html"
><B
CLASS="function"
>require_once()</B
></A
> 语句中使用 URL。PHP
  所支持协议的更多信息参见<A
HREF="wrappers.html"
>附录 N</A
>。
 </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
   要在 PHP 4.0.3 及其更早的版本中使用 URL 封装协议,需要在编译时用
  <CODE
CLASS="option"
>--enable-url-fopen-wrapper</CODE
> 参数来配置 PHP。
  </P
></BLOCKQUOTE
></DIV
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
   Windows 版本的 PHP 4.3
   版之前不支持以下函数的远程访问:<A
HREF="function.include.html"
><B
CLASS="function"
>include()</B
></A
>,<A
HREF="function.include-once.html"
><B
CLASS="function"
>include_once()</B
></A
>,<A
HREF="function.require.html"
><B
CLASS="function"
>require()</B
></A
>,<A
HREF="function.require-once.html"
><B
CLASS="function"
>require_once()</B
></A
>
   以及<A
HREF="ref.image.html"
>参考 LXV, <I
>Image 图像函数</I
></A
>中的 imagecreatefromXXX 函数。
  </P
></BLOCKQUOTE
></DIV
><P
>&#13;  例如,可以用以下范例来打开远程 web
  服务器上的文件,解析需要的输出数据,然后将这些数据用在数据库的检索中,或者简单地以和自己网站其它页面相同的风格输出其内容。
 </P
><P
>&#13;  <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN7264"
></A
><P
><B
>例 39-1. 获取远程文件的标题</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$file </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 />if (!</font><font color="#0000BB">$file</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"&lt;p&gt;Unable to open remote file.\n"</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;exit;<br />}<br />while (!</font><font color="#0000BB">feof </font><font color="#007700">(</font><font color="#0000BB">$file</font><font color="#007700">)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$line </font><font color="#007700">= </font><font color="#0000BB">fgets </font><font color="#007700">(</font><font color="#0000BB">$file</font><font color="#007700">, </font><font color="#0000BB">1024</font><font color="#007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">/* This only works if the title and its tags are on one line */<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#007700">if (</font><font color="#0000BB">eregi </font><font color="#007700">(</font><font color="#DD0000">"&lt;title&gt;(.*)&lt;/title&gt;"</font><font color="#007700">, </font><font color="#0000BB">$line</font><font color="#007700">, </font><font color="#0000BB">$out</font><font color="#007700">)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$title </font><font color="#007700">= </font><font color="#0000BB">$out</font><font color="#007700">[</font><font color="#0000BB">1</font><font color="#007700">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></font><font color="#0000BB">fclose</font><font color="#007700">(</font><font color="#0000BB">$file</font><font color="#007700">);<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
 </P
><P
>&#13;  如果有合法的访问权限,以一个用户的身份和某 FTP
  服务器建立了链接,还可以向该 FTP
  服务器端的文件进行写操作。仅能用该方法来创建新的文件;如果尝试覆盖已经存在的文件,<A
HREF="function.fopen.html"
><B
CLASS="function"
>fopen()</B
></A
>
  函数的调用将会失败。
 </P
><P
>&#13;  要以“anonymous”以外的用户名连接服务器,需要指明用户名(可能还有密码),例如“ftp://user:password@ftp.example.com/path/to/file”(也可以在通过需要
  Basic 认证的 HTTP 协议访问远程文件时使用相同的语法)。
 </P
><P
>&#13;  <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN7271"
></A
><P
><B
>例 39-2. 将数据保存到远程服务器</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br />$file </font><font color="#007700">= </font><font color="#0000BB">fopen </font><font color="#007700">(</font><font color="#DD0000">"ftp://ftp.example.com/incoming/outputfile"</font><font color="#007700">, </font><font color="#DD0000">"w"</font><font color="#007700">);<br />if (!</font><font color="#0000BB">$file</font><font color="#007700">) {<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"&lt;p&gt;Unable to open remote file for writing.\n"</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;exit;<br />}<br /></font><font color="#FF8000">/* Write the data here. */<br /></font><font color="#0000BB">fwrite </font><font color="#007700">(</font><font color="#0000BB">$file</font><font color="#007700">, </font><font color="#0000BB">$_SERVER</font><font color="#007700">[</font><font color="#DD0000">'HTTP_USER_AGENT'</font><font color="#007700">] . </font><font color="#DD0000">"\n"</font><font color="#007700">);<br /></font><font color="#0000BB">fclose </font><font color="#007700">(</font><font color="#0000BB">$file</font><font color="#007700">);<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
 </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
   或许可以从以上范例中得到启发,用该技术来存储远程日志文件。但是正如以上提到的,在用
    <A
HREF="function.fopen.html"
><B
CLASS="function"
>fopen()</B
></A
> 方式打开的 URL
    中,仅能对新文件进行写操作。如果远程文件已经存在则
    <A
HREF="function.fopen.html"
><B
CLASS="function"
>fopen()</B
></A
> 函数的操作将会失败。要做类似于分布式日志的事,可以参考
    <A
HREF="function.syslog.html"
><B
CLASS="function"
>syslog()</B
></A
> 函数。
  </P
></BLOCKQUOTE
></DIV
></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="features.file-upload.put-method.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="features.connection-handling.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>对 PUT 方法的支持</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="features.html"
ACCESSKEY="U"
>上一级</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>连接处理</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>