PHP – 雛形 – ファイルアップロード

概要

HTML側でアップロードされたファイルをPHP側で受け取り、妥当性のチェック、所定の場所への保存などを行う最低限の手順。

HTML側でのファイル選択

  • FORM要素でenctype="multipart/form-data"を指定する
  • INPUT要素でtype="file"を指定し、サーバー側で参照するためのname属性を設定する
  • 複数ファイルを送る場合はINPUT要素にmultiple="multiple"を指定する

HTML表示の際、デフォルトで”ファイルを選択”ボタンが表示され、これをクリックするとダイアログによるファイル選択が可能となる。

PHPで受け取る値

HTML側からの結果が受信されたとき、スーパーグローバル変数$_FILESに連想配列としてアップロードされたファイルの情報が格納される。以下、'name値'はINPUT要素で指定されたname属性の値。

$_FILES['name値']['error']
エラーコード。PHPで定義された定数でエラーステータスを確認可能。(PHP-manual)
$_FILES['name値']['name']
アップロードファイル名。
$_FILES['name値']['tmp_name']
アップロードされたファイルのフルパス。
$_FILES['name値']['type']
アップロードファイルのMIMEタイプを取得。たとえばimage/jpeg、image/pngなど。
$_FILES['name値']['size']
アップロードされたファイルのサイズ

PHP側の処理

INPUT要素を受け取ったPHP側での最低限の処理の流れは以下のとおり。

  1. $_FILES['name値']['error'] === UPLOAD_ERR_OKでアップロード時のエラーをチェック
  2. 以下の変数を設定
    • $image_file_name = $_FILES['name値']['name'];
    • $tmp_name = $_FILES['name値']['tmp_name'];
    • $type = $_FILES['name値']['type'];
  3. is_uploaded_file($tmp_name)でアップロードファイルの妥当性をチェック
  4. $type === 'image/jpeg' && $type !== 'image/png'でファイルタイプをチェック
  5. move_uploaded_file($tmp_name, IMAGE_DIR . $image_file_name);でアップロードされたファイルを任意のディレクトリー(この場合IMAGE_DIR)に移動
    • この実行結果のtrue/falseに応じてファイル名のデータベースへの登録などの処理を実行

$_FILES['name値']['type']ユーザーから送信されたものなので、偽装・改竄に対する完璧な防御にはならないが、上記は最低限の流れ。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です