ファイルのアップロード

トップ > PHP入門 > ファイルのアップロード

目次

広告

フォームを構成するHTML

PHPでは、ファイルのアップロードも簡単に行うことができます。

まずは form.html を作成し、以下のHTMLを書きます。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
  ファイル:<br />
  <input type="file" name="upfile" size="30" /><br />
  <br />
  <input type="submit" value="アップロード" />
</form>
</body>
</html>

これをブラウザで表示すると、以下のように表示されます。

フォームサンプル

フォームの定義

form タグの methodpost にし、enctypemultipart/form-data にすると、ファイルをアップロードすることができます。

<form action="regist.php" method="post" enctype="multipart/form-data"></form>

アップロード欄

input タグの typefile を指定すると、ファイル参照フォームを表示する事ができます。name で指定したキーワードを基に、PHPでデータを受け取ります。

<input type="file" name="upfile" size="30" />

PHPでのデータ受信

上のフォームから送信されたデータを受け取るPHPプログラムを作成します。

アップロードされたファイルの情報は $_FILES に格納されます。$_FILES$_POST$_GET と同様、PHPが自動的に値をセットしてくれる連想配列です。また、アップロードしたファイルは一時的にサーバー側に保存され、PHPプログラムの実行が終了すると削除されます。

入力項目の name 属性を upfile にして送信した場合、ファイルの名前は $_FILES["upfile"]["name"] とすれば取得する事ができます。
また、一時的にサーバー側へ保存されたファイルの名前は $_FILES["upfile"]["tmp_name"] とすれば取得する事ができます。

前に挙げたサンプルフォームからファイルを受け取る場合、form.html と同じフォルダに upload.phpformaction で指定したファイル。)を作成し、以下の内容を記述します。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample</title>
</head>
<body>
<p><?php

if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) {
  if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"])) {
    chmod("files/" . $_FILES["upfile"]["name"], 0644);
    echo $_FILES["upfile"]["name"] . "をアップロードしました。";
  } else {
    echo "ファイルをアップロードできません。";
  }
} else {
  echo "ファイルが選択されていません。";
}

?></p>
</body>
</html>

また、upload.php と同じ場所に files フォルダを作成し、書き込み権限を与えておきます。(FTPソフトなどでパーミッションを 777 に設定します。Windowsで動作させている場合は設定不要です。)

is_uploaded_file はファイルがアップロードされたかどうか調べる関数です。アップロードされていなければ ファイルが選択されていません。 と表示しています。

また、move_uploaded_file はアップロードファイルを移動する関数です。
移動元のファイルは $_FILES["upfile"]["tmp_name"] です。これはPHPによって一時的に作成されたアップロードファイルの名前です。
移動先は "files/" . $_FILES["upfile"]["name"] です。これで files フォルダの中にオリジナルのファイル名でアップローファイルが保存されます。

chmod はパーミッションを設定する関数です。後でファイルを削除できるように、念のため 644 に設定しています。

これで form.htmlhttp:// でアクセスし、アップロードボタンを押すと files フォルダ内にファイルがアップロードされます。