對 PUT 方法的支援

PHP 提供對諸如 Netscape Composer 和 W3C Amaya 等客戶端使用的 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 將所有對 URIs 的 PUT 請求全部發送到 put.php 腳本,這些 URIs 必須和 PUT 命令中的內容相匹配。當然,這是建立在您的 PHP 支援 .php 擴展名,並且 PHP 已經在執行的假設之上。

在您的 put.php 文件中,您可以作如下操作:

<?php copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?>

這將會把文件拷貝到遠程客戶端請求的位置。您可能希望在文件拷貝之前進行一些檢查或者對用戶認証之類的操作。這裡唯一的問題是,當 PHP 接受到 PUT 方法的請求時,它將會把上傳的文件儲存到和其它用 POST 方法處理過的文件相同的臨時目錄。在請求結束時,臨時文件將被刪除。因此,您用來處理 PUT 的 PHP 腳本必須將該文件拷貝到其它的地方。該臨時文件的文件名被儲存在變數 $PHP_PUT_FILENAME 中,您也可以通過 $REQUEST_URI 變數獲得建議的目標文件名(在非 Apache WEB 伺服器上可能會有較大的變化)。該目標文件名是由遠程客戶端指定的。您也可以不聽從改客戶端的訊息,而把所有上傳的文件存儲到一個特殊的上傳目錄下。