LoginSignup
12
14

More than 5 years have passed since last update.

画像アップローダー

Last updated at Posted at 2014-07-16

画像のアップローダーを作ってみました。
今回は、画像をサーバーにアップしてDBにファイル名を保存するタイプのアップローダーです。

画像のアップロードフォーム

form.html

<!-- MIMEのマルチパートデータとして画像を送ってくれる -->
<form action="form.php" method="post" enctype="multipart/form-data">
  <input type="file" name="upload">
  <input type="submit" value="アップロード">
</form>

受け取りのフォーム

form.php
<?php
//第1引数は、フォームから受け取った画像があるかどうかの確認。第2引数では、画像を指定したフォルダに移動させている。
if (move_uploaded_file($_FILES["upload"]["tmp_name"], "img/" . $_FILES["upload"]["name"])) {
  //chmod関数を使って最初の引数で画像の場所を指定して、次の引数でパーミッションを変更している。
  chmod("img/" . $_FILES["upload"]["name"], 0644);
  echo $_FILES["upload"]["name"] . "をアップロードしました。";
  //DBに接続
  $dsn="mysql:dbname=img;host=localhost;charset=utf8";
  $user="root";
  $pass="root";
  try{
    $pdo=new PDO($dsn,$user,$pass);
  }catch(Exception $e){
    echo 'error' .$e->getMesseage;
    die();
  }
  //エラー文の発行
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  //DBに登録するSQL文の発行
  $sql="INSERT INTO upload (img) VALUES(?)";
  $stmt=$pdo->prepare($sql);
  $stmt->execute(array($_FILES["upload"]["name"]));
} else {
  echo 'ファイルをアップロードできません。';
}
?>

今回使った関数

・move_uploaded_file関数
アップロードされたファイルを別のフォルダに移動させる関数。
第1引数でアップロードされているか確認する。第2引数で指定した場所に移動させる。
似た関数にis_uploaded_file関数がある。これは、HTTP POSTでアップロードされているか確認する関数である。ほとんど同じ処理を行っているのでどちらかでいいらしい。
mpywさんのhttp://qiita.com/mpyw/items/db12ce86b15f3b0b3c19 を参考にさせてもらいました。

・chmod関数
ファイルのパーミッションを変更する関数。
第1引数でファイルの場所をしていして、第2引数でパーミッションを変更している。

追記

コメントにもあるように$_FILES["upload"]["name"]はあまり使わずにサーバーで名前をつけるようにしよう。

12
14
2

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
12
14