解 説

ファイルをアップロードするには、スーパーグローバル変数「$_FILE」でファイルを受け取り、PHPが一時的に保存した場所からmove_uploaded_file()関数を使用して本来の保存先へ移動をします。
テンポラリファイルPHPスクリプト終了と同時に削除されますので必ず別の場所に移動しておく必要があります。

「$_FILE」は、POST メソッドで現在のスクリプトにアップロードされた項目の連想配列です。「$_FILE」は、二次元配列になっています。1つ目のキーは、フォーム部品のinput type=”file”のname属性値、2つ目のキーは、name、type、size、tmp_name、errorのいづれかです。

  • $_FILE[name属性値][ name ] ファイル名
  • $_FILE[name属性値][ type ] MIMEタイプ
  • $_FILE[name属性値][ size ] ファイルサイズ
  • $_FILE[name属性値][ tmp_name ] テンポラリファイル名
  • $_FILE[name属性値][ error ] エラーコード

move_uploaded_file ( 一時ファイルのパス , 本来保存したいファイルのパス )
この関数の結果はbool値を返します。

アップロードの流れをまとめると次のようになります。
up01

  1. formタグ内のinput type=”file” でファイルを送信
  2. この際formタグ内にはenctype=”multipart/form-data”が必要になります。
  3. $_FILES[“upfile”]で受け取ります。
  4. $_FILES[“upfile”]は多次元配列だから$_FILES[“upfile”][“tmp_name”]でtmpファイルの場所がわかります。
  5. move_uploaded_file($tmp_file, $save_file)でファイルを移動します。

単純にアップロードするとセキュリティの問題がでてきます。
ファイルが本当に画像かどうかなどのチェックと保存場所をドキュメントルートの外の階層にするなどの工夫が必要です。