HTML フォーム経由で送信されたファイルを
お手軽かつ安全に管理します。
以下の例では、ファイルをアップロードするために HTML フォームフィールド <input type="file"
name="f" /> を用いることを想定しています。たとえばこのようなフォームです。
例 48-30単純なファイルアップロード用の HTML フォーム
単一ファイルのアップロードのサンプルを試してみるには、このようなフォームを使用します。
<?php
// 以下のサンプルコードを、ここに書きます
?>
<html>
<head>
</head>
<body>
<form name="fileuploadexample" method="POST" enctype="multipart/form-data"
action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>">
<input type="file" name="f" />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
|
|
例 48-31単純なファイルのアップロード
以下のコードは、リクエストを監視し、ファイルがフォームから正常に アップロードされたかどうかを調べます。この例の場合、ファイルは サブディレクトリ
uploads に移動されます。
require_once "HTTP/Upload.php";
$upload = new HTTP_Upload("en");
$file = $upload->getFiles("f");
if ($file->isValid()) {
$moved = $file->moveTo("uploads/");
if (!PEAR::isError($moved)) {
echo "ファイルが uploads/ に移動されました。";
} else {
echo $moved->getMessage();
}
} elseif ($file->isMissing()) {
echo "ファイルがありません。";
} elseif ($file->isError()) {
echo $file->errorMsg();
}
|
|
例 48-32複数のファイルをアップロードするための HTML フォーム
複数ファイルのアップロードのサンプルを試してみるには、このようなフォームを使用します。
<?php
// 以下のサンプルコードを、ここに書きます
?>
<html>
<head>
</head>
<body>
<form name="fileuploadexample2" method="POST" enctype="multipart/form-data"
action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>">
<input type="file" name="f1" />
<input type="file" name="f2" />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
|
|
例 48-33複数のファイル、より進んだチェック
複数のファイルをアップロードするには、フォームフィールドの名前 (f) を f[] に変更し、 この名前で複数の <input />
フィールドを 作成します。
$upload = new HTTP_Upload("en");
$files = $upload->getFiles();
foreach($files as $file){
if (PEAR::isError($file)) {
echo $file->getMessage();
}
if ($file->isValid()) {
$file->setName("uniq");
$dest_name = $file->moveTo("uploads/");
if (PEAR::isError($dest_name)) {
echo $dest_name->getMessage();
}
$real = $file->getProp("real");
} elseif ($file->isMissing()) {
echo "ファイルがありません。";
} elseif ($file->isError()) {
echo $file->errorMsg();
}
print_r($file->getProp());
}
|
|
HTTP_Upload
では、アップロードされたファイルの 拡張情報を getProp() メソッドで取得可能です。
mixed HTTP_Upload_File::getProp ([name])
name に何も指定しなかった場合は、このメソッドは
アップロードされたファイルに関するすべての情報を含む配列を返します。 それ以外の場合は、指定したパラメータの値を文字列で返します。
とりうる値の内容は $_FILES 配列によって決まりますが、HTTP_Upload
用にカスタマイズされています。 以下に、プロパティをまとめます。
-
'name': アップロードされたファイル名。
-
'tmp_name': アップロードされたファイルの一時的な名前 (PHP が設定します)。
-
'form_name': ファイルをアップロードした HTML フォームの名前。
-
'type': ファイルの Mime 型。
-
'size': ファイルの大きさ。
-
'error': アップロード時にエラーが発生した場合は、
エラーの種類を表す文字列がここに含まれます。 errorCode() メソッドを使用すると、
このプロパティに対応するエラーメッセージを取得できます。
例 48-34getProp() 経由での拡張情報
require_once "HTTP/Upload.php";
$upload = new HTTP_Upload("en");
$file = $upload->getFiles("f");
if ($file->isValid()) {
echo "<pre>";
print_r($file->getProp());
echo "</pre>";
printf("アップロードされたファイルの拡張子は %s です。", $file->getProp("ext"));
}
|
|