PHPを学習中です。
ファイルのアップロード方法について、備忘録として残します。
1. 【HTML側での処理】データ送信フォームを作成する
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>HTML内でのPHP処理</title>
</head>
<body>
<form enctype="multipart/form-data" action="upload.php" method="POST">
<input type="hidden" name="name" value="value" />
アップロード: <input name="user_file_name" type="file" />
<input type="submit" value="ファイル送信" />
</form>
</body>
</html>
上記コードを記述すると、このように表示されます。
ポイント
・enctype=”multipart/form-data”によりデータのエンコード(暗号化)を行います。
(参考)multipart/form-dataとは
・actionでPHPのURLを指定することで、指定したURLに対してformの送信を行います。
・type=”hidden”と書くことで、送信の際に入力内容を表示させないようにします。
・name=”name”で指定したname属性を持つ、value=”value”の値を送信します。
・input name=”userfile”で、アップロードしたいファイルをname属性で指定しています。
・type=”file”で、ファイルをアップロードすることを指定しています。
2. 【PHP側での処理】アップロードされたファイルを本来格納したい場所へ移動させる
<?php
$temporary_file = $_FILES['user_file_name']['tmp_name']; # 一時ファイル名
$true_file = $_FILES['user_file_name']['name']; # 本来のファイル名
# is_uploaded_fileメソッドで、一時的にアップロードされたファイルが本当にアップロード処理されたかの確認
if (is_uploaded_file($temporary_file)) {
if (move_uploaded_file($temporary_file , $true_file )) {
echo $true_file . "をアップロードしました。";
} else {
echo "ファイルをアップロードできません。";
}
} else {
echo "ファイルが選択されていません。";
}
var_dump($true_file);
?>
ポイント
・アップロード自体は、PHPスクリプトが呼び出された時点で終わっており、既にファイルとしてサーバ上に存在しています。
・ただし、存在すると言っても、サーバ上の一時的な場所に保管されているだけなので、このファイルを本来格納したい変数に移動させる必要があります。
・PHPでは$_FILES[]にアップロードされたファイルに関する各種データが入る仕組みになっています。
・ファイル名は、inputタグの方で付けたuser_file_nameなので、$_FILES[user_file_name]となります。
・$_FILESは連想配列です。
・一時的にサーバ上に保管されているファイル名は「tmp_name」とルールで決められています(tmpはtemporaryの略です)。
・同じく本来のファイル名は「name」とルールで決められています。
・「tmp_name」の中身を「name」に移動させることで、ファイルの移動ができます。
3. 実際にファイルをアップロードしてみる
ファイルをアップロードさせることができました。
またvar_dumpの結果もしっかり出力されています。