読者です 読者をやめる 読者になる 読者になる

リスを倒す 『初めてのPHP,MySQL,JavaScript&CSS』

『初めてのPHP,MySQL,JavaScript&CSS』勉強奮闘記

【番外編】ファイルのアップロードについてもう一度

php 初心者

前回ファイル操作を勉強してきましたが、その中の「ファイルのアップロード」についてもう一度勉強します。
リスに載っていたコードを貼り付けたらファイルのアップロードが出てきてひょえーとなって終わってしまったので、コードを読み返してそれぞれ何を言ってるのかを見ていこうと思います。

まずこちらがそのコード。カラフルですみません。色はMAX3色と教わったのに…

<?php // upload.php
echo <<<_END 〈html〉 〈head〉
〈title〉PHP Form Upload〈/title〉
〈/head〉

〈body〉
〈form method='post' action='upload.php' enctype='multipart/form-data'〉
Select File: 〈input type='file' name='filename' size='10' /〉
〈input type='submit' value='Upload' /〉

_END;

if ($_FILES)
{
$name = $_FILES['filename']['name'];
move_uploaded_file($_FILES['filename']['tmp_name'], $name);

echo "Uploaded image '$name'〈img src='$name' /〉";
}

echo "〈/body〉〈/html〉";
?>

①よくあるhtmlで、タイトルタグにPHP Form Uploadが表示する。
〈head〉
〈title〉PHP Form Upload〈/title〉
〈/head〉

②フォーム送信のPOSTメソッドを設定します。ポストするデータのターゲットをupload.phpに設定。
〈form method='post' action='upload.php'

③webブラウザに対してポストしたデータをmultipart/form-dataというコンテンツタイプを使ってエンコードするように伝える。
enctype='multipart/form-data'〉

④Select Fileというテキストを表示し、2つの入力を作成する。1つが、ファイル選択ボタン。Input tyoeをfileと設定すると、ファイルの入力フィールドとともに、送信するファイルを選択できる参照ボタンが作成される。
Select File: 〈input type='file' name='filename' size='10' /〉

2つめが、アップロードボタン。
〈input type='submit' value='Upload' /〉

⑤アップロードされたファイルはすべて$_FILESという連想配列に入る。ユーザーファイルをアップロードしたかどうか判断するために、$_FILESに含まれているものがあるかどうかを調べるため、if ($_FILES)を使う。
ファイルをアップロードしていない場合は$_FILESは空なので、プログラムはコードをスキップして〈/body〉〈/html〉を出力する行を出力。
if ($_FILES)

⑥アップデート元のコンピュータから読み取った実際の名前を変数$nameに取得する。
$name = $_FILES['filename']['name'];
move_uploaded_file($_FILES['filename']['tmp_name'], $name);


タグを使ってアップロードされたイメージを表示。
echo "Uploaded image '$name'〈img src='$name' /〉";
}

普段よく使っているアップロードはこうしてできているんだなあ、、、すげえなあ、、、


最後に、
$_FILESについて補足。$_FILESには5つの要素が保持されます。

配列のエレメント 内容
$_FILES[‘file’][‘name’] アップロードされたファイルの名前
$_FILES[‘file’][‘type] ファイルのコンテンツタイプ
$_FILES[‘file’][‘size’] バイト単位のファイルのサイズ
$_FILES[‘file’][‘tmp_name’] サーバーに保持された一時的なファイルの名前
$_FILES[‘file’][‘error’] ファイルのアップロードで生成されたエラーコード


いじょー
もうちょっと綺麗にまとめたい...