array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ja', ), 'this' => array ( 0 => 'features.file-upload.put-method.php', 1 => 'PUT メソッドのサポート', ), 'up' => array ( 0 => 'features.file-upload.php', 1 => 'ファイルアップロードの処理', ), 'prev' => array ( 0 => 'features.file-upload.multiple.php', 1 => '複数ファイルのアップロード', ), 'next' => array ( 0 => 'features.file-upload.errors.seealso.php', 1 => '参考', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ja', 'path' => 'features/file-upload.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
PHP は、クライアントがサーバーにファイルを保存するための HTTP PUT メソッドのサポートを提供します。 PUT リクエストは POST リクエストによるファイルアップロードよりもシンプルであり、 次のような形になります。
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 では、put.php の中で以下のようなことを行います。 これは、アップロードされたファイルをサーバー上のファイル myputfile.ext にコピーします。 ファイルコピーを行う前には、 何らかの確認やユーザー認証を行いたくなるかもしれません。
例1 HTTP PUT されたファイルの保存
<?php
/* PUT されたデータは標準入力からやってきます */
$putdata = fopen("php://input", "r");
/* 書き込みモードでファイルをオープンします */
$fp = fopen("myputfile.ext", "w");
/* データを 1 KB 単位で読み込み、
ファイルに書き込みます */
while ($data = fread($putdata, 1024))
fwrite($fp, $data);
/* ストリームを閉じます */
fclose($fp);
fclose($putdata);
?>