流れを理解するためのPHPで画像ファイルアップロード

スポンサーリンク

こんばんは。ファガイです。
今日は、FuelPHPではなく、自分がただ一旦FuelPHpで画像アップローダとか作ろうと思った時、素だとどうなるのか気になったわけで。

因みに、今回はセキュリティ等を考えていません。あくまで自分でファイルアップロードの流れを理解するために書いたものです。(ファイル名に関してもuniqid使ったりしてランダムにしてるだけです。普通ならDBとかidを管理するべきでしょうね。)

ここから勝手に自分が書いたものです。あまり参考にしないほうがいいかも知れません。formから1ファイル。name属性がfile。postでsubmitされてくるという条件で。

<?php
if (isset($_POST['submit']))
{
    setlocale(LC_ALL, 'Asia/Tokyo');

    $upload_id = md5(uniqid(rand(), true));
    $uploaddir = 'images/';
    $uploadfile = $uploaddir . $upload_id;

    $handle = finfo_open(FILEINFO_MIME_TYPE);
    $mimeType = @finfo_file($handle, $_FILES['file']['tmp_name']);
    finfo_close($handle);

    switch ($mimeType)
    {
        case 'image/gif':
            $extension = '.gif';
            break;
        case 'image/png':
        case 'image/x-png':
            $extension = '.png';
            break;
        case 'image/jpg':
        case 'image/jpeg':
        case 'image/pjpeg':
            $extension = '.jpg';
            break;
    }

    if (isset($extension))
    {
        echo "画像ファイルです。<br>";
        $uploadfile .= $extension;

        if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile))
        {
            echo 'アップロード完了しました。';
        }
        else
        {
            echo 'アップロードに失敗しました。';
        }
    }
    else
    {
        echo "対応していないファイル形式です。";
    }
}
?>

軽く説明。
setlocaleは一応書いてるだけです。最初の時にbasenameとか、pathinfoメソッドを記述していたからです。
fileinfoに関しては、
ファイル情報 PHP.net
こちらに載ってます。
また、mimeTypeを$_FILESから求めていないのはIE等ブラウザから送られてきたmimeTypeを元にするため、情報が確実でないからです。公式ドキュメントにも載ってます。

こんな所でしょうか。今回はざっくり作ろうとしただけなので、少しなら参考になるんでしょうかね。。。
ただ、こんな風に画像をアップロードする時にしっかり処理していないものがサンプルとして多かったため載せています。

何か参考になれば幸いです。

コメント

タイトルとURLをコピーしました