画像のアップローダーを作ってみました。
今回は、画像をサーバーにアップして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"]はあまり使わずにサーバーで名前をつけるようにしよう。