Google

NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7">

PUT メソッドのサポート

PHP は、Netscape Composer や W3C Amaya のようなクライアントで サポートされる HTTP PUT メソッドをサポートします。 PUT リクエストは、ファイルアップロードよりもかなり簡単であり、 次のようなものになります。

PUT /path/filename.html HTTP/1.1

これは、通常、リモートクライアントが /path/filename.html が指す内 容を Web ツリーに保存したいことを意味します。 Apache または PHP に おいて全ての人がWebツリー上の任意のファイルを自動的に上書きできる ようにするというのは明らかに良い発想ではありません。よって、このよ うなりクエストを処理する際には、まずそのリクエストを処理する特定の PHPスクリプトが必要なことをwebサーバーに通知する必要があります。 Apacheにおいては、Script ディレクティブにより これを行うことができます。これは、Apache設定ファイルのほぼ任意の場 所に置くことができます。一般的なのは、<Directory> ブロックま たは <Virtualhost> ブロックの中です。次のように指定します。

Script PUT /put.php

これにより、この行を指定したコンテキストにマッチするURIを有する全 てのPUTリクエストが put.php スクリプトに送られるよう Apache に指 定します。 もちろん、拡張子 .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サーバーでは変わる可能性があります) で指定された送信先ファイル名を得ることができます。送信先ファイル名 は、リモートクライアントが指定したものです。このクライアントの指定 を必ずしも受ける必要はありません。例えば、アップロードされた全ての ファイルを特別なアップロード用ディレクトリにコピーすることも可能で す。