LoginSignup
1
1

More than 3 years have passed since last update.

PHPの基本操作⑦ 「ファイルアップロードの受信をする」

Last updated at Posted at 2021-04-26

参考書籍

よくわかるPHPの教科書 PHP7対応版

他記事リンク

ファイルアップロードの受信をする

送信元のフォーム

  1. 通常のフォームと違い、画像をアップロードする際には、に「enctype="multipart/form-data」と記載します。 →通常のフォーム+ファイルという意味
  2. 実際にファイルを添付するは「というタイプを選択します。

上記2点だけでファイルを送信できるフォームの完成です
※ファイルの送信時は必ず

にするのを忘れない
index.php
<form action="submit.php" method="post" enctype="multipart/form-data">
  <input type="text" name="ok" >
  <input type="file" name="picture">
  <input type="submit" value="送信">
</form>

データの受け取り先

アップロードされたファイルの取得をするためには「$_FILES」を利用します。連想配列としてファイルが保管されているため、「$_FILES['picture']」とキー(name属性値)を指定して取り出します。
(通常のフォームの内容であれば、「$_POST」で取得可能)

取り出した値はまたそれも連想配列になっています。
この連想配列の中身は決まっていて、以下のようになっています。

  • $file['name'] : ファイル名(name)
  • $file['type'] : ファイルタイプ(type)
  • $file['tmp_name']: アップロードされたファイル(tmp_name)
  • $file['error'] : エラー内容(error)
  • $file['size'] : サイズ(size)

「tmp_name」はアップロードしておくファイルの保管場所のパスとファイル名です。
入力欄(input type="file")→→→(アップロード)→→→tmpフォルダ→→→???→→→目的のフォルダ
ここで「???」にあたる処理を行うのが、「move_uploaded_file関数」です。

tmp→目的ファイルへのアップロード処理
成功失敗 = move_uploaded_file(コピー元, コピー先)

ファイルが目的の保存先に移動できれば、を使って画像を表示させることが可能です。
このようにファイルのアップロードは比較的に簡単に行えますが、ファイルアップロードはセキュリティ的に危険な入り口の一つです。そのため、セキュリティの対策の一環としてファイルの拡張子によるチェックを設けます。ファイル名の最後が「gif」「jpg」「png」もののみの受付にします。
この時に使うのが、ファイル名の切り取りできる「substr関数」です

substr(ファイル名, 場所指定)

場所の指定の仕方は下記のようにします

  • 前から3文字→3
  • 後ろから3文字→-3

以上の処理を組み合わせた操作が以下のプログラムになります。

submit.php
<?php
  $file = $_FILES['picture'];
?>
ファイル名(name) : <?php print($file['name']); ?>
ファイルタイプ(type) : <?php print($file['type']); ?>
アップロードされたファイル(tmp_name) : <?php print($file['tmp_name']); ?>
エラー内容(error) : <?php print($file['error']); ?>
サイズ(size) <?php print($file['size']); ?>

<?php
  $ext = substr($file['name'], -4);

  if ($ext == '.gif' || $ext == '.jpg' || $ext == '.png') :
    $filePath = './user_img/' . $file['name'];
    $success = move_uploaded_file($file['tmp_name'], $filePath);

    if($success) :
?>
      <img src="<?php print($filePath); ?>">
      <?php endif; ?>
  ※拡張子が.gif, .jpg, .pngのいずれかのファイルをアップロードしてください
  <?php endif; ?>

※事前に移動先のパスにあたるファイルの作成をしておかなくてはならない

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1