phpでファイルアップロード

スポンサーリンク

はじめに

ファイルアップロード画面とphpの処理のやり方について
紹介していきます。

フォーム画面

ファイルのアップロードを行う場合、フォームに特別な指定をする必要がある。

フォーム部分だけ単純に書いてみると

 <form action="test.php" method="post" enctype="multipart/form-data">
      <input name="my_img" type="file" id="my_img" size="50" />
      <input type="submit" value="送信する" />
</form> 

enctypeでmultipart/form-dataを指定することでファイルのアップロードが
可能になる。またactionでファイルのアップロード処理をするphpファイルの指定
をしている。

gist1fd74e8e245972d0e2f58e46289b1e85

php

次にphp側の処理。処理する内容はアップロードされたファイル名の取得と
そのファイルの移動だけ。

gist6d3f1551f247877eef490ea629850544

結果

まずフォーム画面 f:id:shangtian:20190210102924p:plain

ファイル選択画面 f:id:shangtian:20190210102926p:plain 送信するをクリックすると

f:id:shangtian:20190210103010p:plain

アップロード先のフォルダにファイルがアップロードされている。 f:id:shangtian:20190210103131p:plain

セキュリティ対策

先ほどのコードはただアップロード処理をするだけで
セキュリティ対策してないので、少ししていきます。

html側のコードは同じで大丈夫です。php側のコードに少し
付け加えていきます。

以下のコードでHTTP POSTでアップロードされたファイルかどうか
わかります。

悪意のあるユーザーがスクリプトをだまして、 本来見られてはいけないはずのファイル (/etc/passwd など) にアクセスすることを防止したい場合に、この関数は有用です。

$filename = $_FILES['gif']['tmp_name'];
is_uploaded_file($filename);

gist5c1737947790a292065e74ceff0cb53a

参考文献

http://php.net/manual/ja/function.is-uploaded-file.php

https://uxmilk.jp/14317