HTML フォーム経由で送信されたファイルを
お手軽かつ安全に管理します。
この関数は、HTML <input type="file" />
フィールド経由でのファイルのアップロードを管理する高度なシステムを
提供します。以下のような機能があります。
以下の例では、ファイルをアップロードするために
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-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() メソッドで取得可能です。
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"));
} |
|
HTTP_Upload の便利な機能のひとつに
国際化されたエラーメッセージのサポートがあります。これは、
エラー (不正なファイルがアップロードされたなど) が検出された場合に
HTTP_Upload が何語でエラーメッセージを
返すのかをプログラマが指定できるということことを意味します。
HTTP_Upload のコンストラクタの最初の
パラメータで、使用する言語を指定します。詳細は以下の例で
説明します。
例 48-35例 // ドイツ語のエラーメッセージ
$language = "de";
require_once "HTTP/Upload.php";
$upload = new HTTP_Upload($language);
$file = $upload->getFiles("f");
if ($file->isValid()) {
$moved = $file->moveTo("uploads/");
if (!PEAR::isError($moved)) {
echo "ファイルは uploads/ に移動されました。";
} else {
// ドイツ語のエラーメッセージを表示します
echo "エラーが検出されました: " . $moved->getMessage() . "<br />";
}
} |
|