【PHP】ファイルのアップロード機能を実装する方法

【PHP】ファイルのアップロード機能を実装する方法 PHP

PHPを使ってWebサイトにファイルアップロード機能を実装することで、ユーザーが画像や書類などをアップロードできる便利な機能を提供できます。本記事では、基本的な実装方法から、セキュリティ対策のポイントまで丁寧に解説します。

HTMLフォームの作成

まずは、ユーザーがファイルを選択して送信するためのフォームを作成します。重要なのは、formタグにenctype=”multipart/form-data”を指定することです。

<form action="upload.php" method="POST" enctype="multipart/form-data">
  <label>ファイルを選択:</label>
  <input type="file" name="upload_file">
  <input type="submit" value="アップロード">
</form>

PHPでアップロード処理を記述

続いて、upload.phpというファイルにアップロード処理を記述します。アップロードされたファイルは$_FILES変数で取得できます。

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  if (isset($_FILES['upload_file']) && $_FILES['upload_file']['error'] === UPLOAD_ERR_OK) {
    
    $fileTmpPath = $_FILES['upload_file']['tmp_name'];
    $fileName = $_FILES['upload_file']['name'];
    $fileSize = $_FILES['upload_file']['size'];
    $fileType = $_FILES['upload_file']['type'];
    
    $uploadDir = './uploads/';
    if (!file_exists($uploadDir)) {
      mkdir($uploadDir, 0777, true);
    }

    $destPath = $uploadDir . basename($fileName);

    if (move_uploaded_file($fileTmpPath, $destPath)) {
      echo 'ファイルが正常にアップロードされました。';
    } else {
      echo 'ファイルの保存に失敗しました。';
    }
  } else {
    echo 'ファイルのアップロードに失敗しました。エラーコード:' . $_FILES['upload_file']['error'];
  }
}
?>

セキュリティ対策のポイント

ファイルアップロードにはセキュリティリスクも伴うため、以下のような対策が必要です。

ファイルの種類を制限する

許可するファイルタイプ(例:画像)を明示的に制限します。

$allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (!in_array($fileType, $allowedTypes)) {
  exit('許可されていないファイルタイプです。');
}

ファイル名を安全に処理する

不正なファイル名による影響を避けるため、サニタイズ処理を行います。

$safeFileName = preg_replace("/[^a-zA-Z0-9.]/", "_", $fileName);

ファイルサイズを制限する

サーバーに過度な負荷をかけないように、サイズ制限を設けましょう。

if ($fileSize > 2 * 1024 * 1024) { // 2MBまで
  exit('ファイルサイズが大きすぎます。');
}

まとめ

PHPでファイルのアップロード機能を実装するには、以下のステップを踏むことで実現できます。

  • フォームにenctype=”multipart/form-data”を指定
  • $_FILESを使ってファイルを取得・保存
  • セキュリティの観点から、ファイルの種類やサイズを制限

基本の実装をしっかり押さえておけば、複数ファイルのアップロードや画像の自動リサイズなどへの拡張も容易です。まずはシンプルな形から始めて、ニーズに応じてカスタマイズしてみましょう。