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> ブロックまたは a <Virtualhost> ブロックの中です。 次のように指定します。
Script PUT /put.php3
これにより、この行で指定した内容にマッチするURIを有する 全てのPUTリクエストが put.php3 スクリプトに 送られるよう Apache に指定します。 もちろん、拡張子 .php3 により PHP が実行されるよう設定され、 PHP がアクティブであることが必要です。
put.php3 ファイルの中で次のように処理を行う必要があります。
<? copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?>
これは、 リモートクライアントによりリクエストされた位置にファイルをコピーします。 このファイルコピーを実行する前に何らかの確認やユーザーの認証 を実行することが望ましいでしょう。 上記のスクリプトでは、PHPがPUTメソッドのリクエストを 受けた際に POSTメソッド と全く同様にテンポラリファイルにアップロードされたファイルを 保存するということを利用しています。 リクエストが終了した際に、テンポラリファイルは削除されます。 よって、PUTを処理するPHPスクリプトは、このファイルをどこかに コピーする必要があります。 このテンポラリファイルのファイル名は $PHP_PUT_FILENAME 変数に保持されており、 $REQUEST_URI (Apache以外のWebサーバーでは変わる可能性があります) で指定された送信先ファイル名を得ることができます。 送信先ファイル名は、リモートクライアントが指定したものです。 このクライアントの指定を必ずしも受ける必要はありません。 例えば、アップロードされた全てのファイルを特別なアップロード用 ディレクトリにコピーすることも可能です。