Sophie

Sophie

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

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
>对 PUT 方法的支持</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.file-upload.html"><LINK
REL="PREVIOUS"
TITLE="上传多个文件"
HREF="features.file-upload.multiple.html"><LINK
REL="NEXT"
TITLE="使用远程文件"
HREF="features.remote-files.html"><META
HTTP-EQUIV="Content-type"
CONTENT="text/html; charset=UTF-8"></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 手册</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="features.file-upload.multiple.html"
ACCESSKEY="P"
>上一页</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
>章 38. 文件上传处理</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="features.remote-files.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="features.file-upload.put-method"
>对 PUT 方法的支持</A
></H1
><P
>&#13;   PHP 3 和 PHP 4 对 PUT 方法的支持有所不同。在 PHP 4
   中,必须使用标准的输入流来读取一个 HTTP PUT 的内容。
  </P
><P
>&#13;   <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN7216"
></A
><P
><B
>例 38-5. 用 PHP 4 来保存 HTTP PUT 文件</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#FF8000">/* PUT data comes in on the stdin stream */<br /></font><font color="#0000BB">$putdata </font><font color="#007700">= </font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#DD0000">"php://stdin"</font><font color="#007700">, </font><font color="#DD0000">"r"</font><font color="#007700">);<br /><br /></font><font color="#FF8000">/* Open a file for writing */<br /></font><font color="#0000BB">$fp </font><font color="#007700">= </font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#DD0000">"myputfile.ext"</font><font color="#007700">, </font><font color="#DD0000">"w"</font><font color="#007700">);<br /><br /></font><font color="#FF8000">/* Read the data 1 KB at a time<br />&nbsp;&nbsp;&nbsp;and write to the file */<br /></font><font color="#007700">while (</font><font color="#0000BB">$data </font><font color="#007700">= </font><font color="#0000BB">fread</font><font color="#007700">(</font><font color="#0000BB">$putdata</font><font color="#007700">, </font><font color="#0000BB">1024</font><font color="#007700">))<br />&nbsp;&nbsp;</font><font color="#0000BB">fwrite</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">, </font><font color="#0000BB">$data</font><font color="#007700">);<br /><br /></font><font color="#FF8000">/* Close the streams */<br /></font><font color="#0000BB">fclose</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">);<br /></font><font color="#0000BB">fclose</font><font color="#007700">(</font><font color="#0000BB">$putdata</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
>
    以下文档的内容仅对 PHP 3 适用。
   </P
></BLOCKQUOTE
></DIV
><P
>&#13;   PHP 提供对诸如 <SPAN
CLASS="productname"
>Netscape Composer</SPAN
>
   和 W3C <SPAN
CLASS="productname"
>Amaya</SPAN
> 等客户端使用的
   HTTP PUT 方法的支持。PUT 请求比文件上传要简单的多,它们一般的形式为:
   <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN7224"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="HTTP"
>PUT /path/filename.html HTTP/1.1</PRE
></TD
></TR
></TABLE
><P
></P
></DIV
>
  </P
><P
>&#13;   这通常意味着远程客户端会将其中的 <TT
CLASS="filename"
>/path/filename.html</TT
>
   存储到 web 目录树。让 Apache 或者 PHP 自动允许所有人覆盖
   web 目录树下的任何文件显然是很不明智的。因此,要处理类似的请求,必须先告诉
   web 服务器需要用特定的 PHP 脚本来处理该请求。在 Apache 下,可以用
   <SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>Script</I
></SPAN
> 选项来设置。它可以被放置到
   Apache 配置文件中几乎所有的位置。通常我们把它放置在
   &#60;Directory&#62; 区域或者 &#60;Virtualhost&#62; 区域。可以用如下一行来完成该设置:
   <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN7229"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="programlisting"
>Script PUT /put.php</PRE
></TD
></TR
></TABLE
><P
></P
></DIV
>
  </P
><P
>&#13;   这将告诉 Apache 将所有对 URI 的 PUT 请求全部发送到 put.php 脚本,这些
   URI 必须和 PUT 命令中的内容相匹配。当然,这是建立在 PHP 支持
   .php 扩展名,并且 PHP 已经在运行的假设之上。
  </P
><P
>&#13;   在 put.php 文件中,可以作如下操作:
  </P
><P
>&#13;   <DIV
CLASS="informalexample"
><P
></P
><A
NAME="AEN7234"
></A
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php copy</font><font color="#007700">(</font><font color="#0000BB">$PHP_UPLOADED_FILE_NAME</font><font color="#007700">, </font><font color="#0000BB">$DOCUMENT_ROOT </font><font color="#007700">. </font><font color="#0000BB">$REQUEST_URI</font><font color="#007700">); </font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
><P
></P
></DIV
>
  </P
><P
>&#13;   这将会把文件拷贝到远程客户端请求的位置。可能希望在文件拷贝之前进行一些检查或者对用户认证之类的操作。这里唯一的问题是,当
   PHP 接受到 PUT 方法的请求时,它将会把上传的文件储存到和其它用
   <A
HREF="features.file-upload.html#features.file-upload.post-method"
>POST
   方法</A
>处理过的文件相同的临时目录。在请求结束时,临时文件将被删除。因此,用来处理
   PUT 的 PHP 脚本必须将该文件拷贝到其它的地方。该临时文件的文件名被储存在变量
   <CODE
CLASS="varname"
>$PHP_PUT_FILENAME</CODE
> 中,也可以通过
   <CODE
CLASS="varname"
>$REQUEST_URI</CODE
> 变量获得建议的目标文件名(在非
   Apache web 服务器上可能会有较大的变化)。该目标文件名是由远程客户端指定的。也可以不听从改客户端的信息,而把所有上传的文件存储到一个特殊的上传目录下。
  </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="features.file-upload.multiple.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.remote-files.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>上传多个文件</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="features.file-upload.html"
ACCESSKEY="U"
>上一级</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>使用远程文件</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>