对 PUT 方法的支持

PHP 对部分客户端具备的 HTTP PUT 方法提供了支持。PUT 请求比文件上传要简单的多,它们一般的形式为:

PUT /path/filename.html HTTP/1.1

这通常意味着远程客户端会将其中的 /path/filename.html 存储到 web 目录树。让 Apache 或者 PHP 自动允许所有人覆盖 web 目录树下的任何文件显然是很不明智的。因此,要处理类似的请求,必须先告诉 web 服务器需要用特定的 PHP 脚本来处理该请求。在 Apache 下,可以用 Script 选项来设置。它可以被放置到 Apache 配置文件中几乎所有的位置。通常我们把它放置在 <Directory> 区域或者 <VirtualHost> 区域。可以用如下一行来完成该设置:

Script PUT /put.php

这将告诉 Apache 将所有对 URI 的 PUT 请求全部发送到 put.php 脚本,这些 URI 必须和 PUT 命令中的内容相匹配。当然,这是建立在 PHP 支持 .php 扩展名,并且 PHP 已经在运行的假设之上。此脚本的所有 PUT 请求的目标资源必须是脚本本身,而不是上传文件本身的文件名。

使用 PHP,可以在 put.php 中执行类似下面的操作。这会将上传文件的内容复制到服务器上的文件 myputfile.ext。在执行此文件复制之前,可能会希望执行一些检查并且验证用户身份。

示例 #1 保存 HTTP PUT 文件

<?php
/* PUT 数据来自于 stdin 流 */
$putdata = fopen("php://input", "r");

/* 打开要写入的文件 */
$fp = fopen("myputfile.ext", "w");

/* 每次读取 1KB 的数据并写入到文件 */
while ($data = fread($putdata, 1024))
fwrite($fp, $data);

/* 关闭流 */
fclose($fp);
fclose($putdata);
?>