PHPで画像をアップロード!初心者でもできる10ステップ

PHPで画像をアップロードする方法を示すイラストPHP
この記事は約13分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

PHPを使って画像をアップロードする方法を学びたいと思っているあなたへ。

この記事を読むことで、初心者でも簡単に画像をアップロードできるようになります。

10のステップを通じて、PHPの基本から詳細なコードの書き方、注意点、カスタマイズ方法までを詳しく解説します。

それでは、一緒に学んでいきましょう。

●PHPとは

PHPは、Webサイトの開発に広く使用されるサーバーサイドのスクリプト言語です。

HTML内に直接埋め込むことができ、動的なWebページを作成するのに適しています。

今回は、このPHPを使って画像をアップロードする方法を学んでいきます。

●画像アップロードの基本

Webサイトで画像をアップロードするとは、具体的には何を指すのでしょうか。

それは、ユーザーが自分のコンピューターから画像ファイルを選択し、そのファイルをWebサーバーに送信することを指します。

このプロセスは、通常、HTMLのフォームとPHPのスクリプトを組み合わせて実現されます。

●PHPでの画像アップロードのステップ

それでは、具体的なステップに移りましょう。

PHPで画像をアップロードするための10のステップを紹介します。

○ステップ1:HTMLフォームの作成

まずは、ユーザーが画像ファイルを選択できるHTMLフォームを作成します。

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="image">
    <input type="submit" value="アップロード">
</form>

このコードでは、formタグを使ってフォームを作成しています。

action属性には、フォームが送信されたときに実行されるPHPスクリプトのパスを指定します。

method属性にはpostを指定し、フォームデータをHTTP POSTメソッドで送信します。

enctype属性にはmultipart/form-dataを指定し、フォームデータが複数の部分に分割されて送信されることを指定します。

これは、ファイルのアップロードに必要な設定です。

○ステップ2:PHPスクリプトの準備

次に、フォームから送信されたデータを処理するPHPスクリプトを準備します。

このスクリプトは、upload.phpという名前で保存します。

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    $image = $_FILES['image'];
    // その他の処理
}
?>

このコードでは、まず$_SERVER['REQUEST_METHOD']を使って、リクエストメソッドがPOSTかどうかを確認しています。

これは、フォームからデータが正しく送信されたかを確認するためのものです。

次に、$_FILESスーパーグローバル配列を使って、アップロードされたファイルの情報を取得しています。

○ステップ3:ファイルの確認

アップロードされたファイルが正しい形式とサイズであることを確認するためのコードを追加します。

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    $image = $_FILES['image'];
    
    // ファイルの形式とサイズを確認
    if ($image['type'] == 'image/jpeg' || $image['type'] == 'image/png') {
        if ($image['size'] <= 5000000) {
            // その他の処理
        } else {
            echo 'ファイルが大きすぎます。';
        }
    } else {
        echo '無効なファイル形式です。';
    }
}
?>

このコードでは、$image['type']を使ってファイルの形式がJPEGまたはPNGであることを確認しています。

また、$image['size']を使ってファイルのサイズが5MB以下であることを確認しています。

これらの条件を満たさない場合は、エラーメッセージを表示します。

○ステップ4:ファイルの移動

次に、アップロードされたファイルをサーバー上の適切な場所に移動します。

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    $image = $_FILES['image'];
    
    // ファイルの形式とサイズを確認
    if ($image['type'] == 'image/jpeg' || $image['type'] == 'image/png') {
        if ($image['size'] <= 5000000) {
            // ファイルを移動
            $destination = 'uploads/' . $image['name'];
            move_uploaded_file($image['tmp_name'], $destination);
        } else {
            echo 'ファイルが大きすぎます。';
        }
    } else {
        echo '無効なファイル形式です。';
    }
}
?>

このコードでは、move_uploaded_file関数を使って、アップロードされたファイルをuploadsディレクトリに移動しています。

$image['tmp_name']は、アップロードされたファイルがサーバー上に一時的に保存されている場所を指します。

$destinationは、ファイルを移動する先のパスを指します。

○ステップ5:エラーハンドリング

ファイルのアップロードに失敗した場合に備えて、エラーハンドリングのコードを追加します。

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    $image = $_FILES['image'];
    
    // ファイルの形式とサイズを確認
    if ($image['type'] == 'image/jpeg' || $image['type'] == 'image/png') {
        if ($image['size'] <= 5000000) {
            // ファイルを移動
            $destination = 'uploads/' . $image['name'];
            if (move_uploaded_file($image['tmp_name'], $destination)) {
                echo 'ファイルが正常にアップロードされました。';
            } else {
                echo 'ファイルのアップロードに失敗しました。';
            }
        } else {
            echo 'ファイルが大きすぎます。';
        }
    } else {
        echo '無効なファイル形式です。';
    }
}
?>

このコードでは、move_uploaded_file関数の戻り値をチェックして、ファイルのアップロードが成功したかどうかを確認しています。

戻り値がtrueならアップロード成功、falseならアップロード失敗を意味します。

○ステップ6:ファイルのサイズ制限

ファイルのサイズが大きすぎると、サーバーのディスクスペースを過度に消費したり、アップロード時間が長くなったりする問題があります。

そのため、アップロードできるファイルのサイズに制限を設けることが一般的です。

ステップ3で既にサイズ制限のコードを追加しましたが、具体的な制限値はサーバーの設定や要件によります。

○ステップ7:ファイルタイプの制限

セキュリティ上の理由から、アップロードできるファイルの種類を制限することが一般的です。

ステップ3で既にファイルタイプの制限のコードを追加しましたが、具体的な制限値はサーバーの設定や要件によります。

○ステップ8:ファイル名の変更

アップロードされたファイルの名前が他のファイルと重複すると、既存のファイルが上書きされてしまう可能性があります。

そのため、一意のファイル名を生成して、アップロードされたファイルの名前を変更することが一般的です。

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    $image = $_FILES['image'];
    
    // ファイルの形式とサイズを確認
    if ($image['type'] == 'image/jpeg' || $image['type'] == 'image/png') {
        if ($image['size'] <= 5000000) {
            // ファイルを移動
            $filename = uniqid() . '.' . pathinfo($image['name'], PATHINFO_EXTENSION);
            $destination = 'uploads/' . $filename;
            if (move_uploaded_file($image['tmp_name'], $destination)) {
                echo 'ファイルが正常にアップロードされました。';
            } else {
                echo 'ファイルのアップロードに失敗しました。';
            }
        } else {
            echo 'ファイルが大きすぎます。';
        }
    } else {
        echo '無効なファイル形式です。';
    }
}
?>

このコードでは、uniqid関数を使って一意のIDを生成し、それを新しいファイル名の一部としています。

また、pathinfo関数を使って元のファイル名から拡張子を取得し、それを新しいファイル名の一部としています。

○ステップ9:画像の表示

最後に、アップロードされた画像を表示するコードを追加します。

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    $image = $_FILES['image'];
    
    // ファイルの形式とサイズを確認
    if ($image['type'] == 'image/jpeg' || $image['type'] == 'image/png') {
        if ($image['size'] <= 5000000) {
            // ファイルを移動
            $filename = uniqid() . '.' . pathinfo($image['name'], PATHINFO_EXTENSION);
            $destination = 'uploads/' . $filename;
            if (move_uploaded_file($image['tmp_name'], $destination)) {
                echo 'ファイルが正常にアップロードされました。';
                echo '<img src="' . $destination . '" alt="アップロードされた画像">';
            } else {
                echo 'ファイルのアップロードに失敗しました。';
            }
        } else {
            echo 'ファイルが大きすぎます。';
        }
    } else {
        echo '無効なファイル形式です。';
    }
}
?>

このコードでは、imgタグを使ってアップロードされた画像を表示しています。

src属性には、アップロードされた画像のパスを指定します。

○ステップ10:完成したコード

以上のステップを経て、PHPで画像をアップロードするためのコードが完成しました。

このコードを使えば、初心者でも簡単に画像をアップロードできます。

●サンプルコード

ここでは、上記のステップを組み合わせて作成したサンプルコードを紹介します。

このコードを使って、自分のサイトに画像アップロード機能を追加することができます。

<!-- HTMLフォーム -->
<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="image">
    <input type="submit" value="アップロード">
</form>
<!-- PHPスクリプト -->
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    $image = $_FILES['image'];
    
    // ファイルの形式とサイズを確認
    if ($image['type'] == 'image/jpeg' || $image['type'] == 'image/png') {
        if ($image['size'] <= 5000000) {
            // ファイルを移動
            $filename = uniqid() . '.' . pathinfo($image['name'], PATHINFO_EXTENSION);
            $destination = 'uploads/' . $filename;
            if (move_uploaded_file($image['tmp_name'], $destination)) {
                echo 'ファイルが正常にアップロードされました。';
                echo '<img src="' . $destination . '" alt="アップロードされた画像">';
            } else {
                echo 'ファイルのアップロードに失敗しました。';
            }
        } else {
            echo 'ファイルが大きすぎます。';
        }
    } else {
        echo '無効なファイル形式です。';
    }
}
?>

●注意点と対処法

画像をアップロードする際には、注意点がいくつかあります。

  1. ファイルの形式とサイズを確認する:アップロードされるファイルの形式とサイズを制限することで、サーバーのリソースを適切に管理し、セキュリティを保つことができます。
  2. ファイル名を一意にする:アップロードされるファイルの名前が他のファイルと重複しないように、一意のファイル名を生成することが重要です。
  3. エラーハンドリングを行う:ファイルのアップロードに失敗した場合に備えて、適切なエラーハンドリングを行うことが重要です。

●カスタマイズ方法

以上のコードは基本的な画像アップロードの機能を提供しますが、必要に応じてカスタマイズすることも可能です。

例えば、アップロードできるファイルの形式やサイズの制限を変更したり、アップロード後に画像をリサイズしたり、データベースに情報を保存したりすることができます。

これらのカスタマイズは、PHPの他の関数やライブラリを使用して実装することができます。

まとめ

この記事では、PHPを使って画像をアップロードする方法を初心者向けに詳しく解説しました。

10のステップを通じて、HTMLフォームの作成からPHPスクリプトの準備、ファイルの確認、移動、エラーハンドリングまでを学びました。

また、注意点と対処法、カスタマイズ方法についても触れました。

これからPHPで画像をアップロードする機能を実装する方は、ぜひこの記事を参考にしてみてください。

それでは、あなたのプログラミング学習がさらに進むことを願っています。