File クラス
:: 注意 ::
- 2025/10/12 現在、「upfile」というname属性のFILEリクエストですかFileクラスのアップロードができないことになっています。今後、upfile 以外の input 名でも使える柔軟版を作成します。
File
クラスは、ファイルアップロード処理を管理するユーティリティクラスである。
アップロードされたファイルの存在チェック、拡張子検証、保存先への移動などを行い、アップロードの成否を返す。
1. コード
<?php
namespace app\aura\utils;
use app\config\Message;
use app\aura\https\Redirect;
class File {
/**
* uploaded_file
* @param array $file_data
* @return boolean $result
*/
function uploadFile($file_data) {
$result = false;
if (empty($file_data['upfile']['full_path'])) {
$_SESSION['msg'] = 'No files have been uploaded.';
Redirect::to('index');
exit();
}
if ($file_data['upfile']['error'] !== UPLOAD_ERR_OK) {
$msg = [
UPLOAD_ERR_INI_SIZE => Message::UPLOAD_ERR['INT_SIZE'],
UPLOAD_ERR_PARTIAL => Message::UPLOAD_ERR['PARTIAL'],
UPLOAD_ERR_NO_FILE => Message::UPLOAD_ERR['NO_FILE'],
UPLOAD_ERR_NO_TMP_DIR => Message::UPLOAD_ERR['NO_TMP_DIR'],
UPLOAD_ERR_CANT_WRITE => Message::UPLOAD_ERR['CANT_WRITE'],
UPLOAD_ERR_EXTENSION => Message::UPLOAD_ERR['EXTENSION'],
];
$err_msg = $msg[$file_data['upfile']['error']] ?? 'Unknown upload error.';
} else {
// 拡張子チェック
$extension = strtolower(pathinfo($file_data['upfile']['name'], PATHINFO_EXTENSION));
$allowed_extensions = ['gif', 'jpg', 'jpeg', 'png'];
if (!in_array($extension, $allowed_extensions)) {
$err_msg = Message::UPLOAD_ERR['NOT_IMAGE'];
} else {
$src = $file_data['upfile']['tmp_name']; // temporary file path
$dest = 'storage/' . $file_data['upfile']['name'];
if (!move_uploaded_file($src, $dest)) {
$err_msg = Message::UPLOAD_ERR['FAILED'];
} else {
$result = true;
}
}
}
return $result;
}
}
?>
2. コード説明
app\aura\utils
名前空間下にFile
クラスを定義$file_data
:$_FILES
に相当するファイル配列。'upfile'
キーを持つ必要がある。- メソッド
function uploadFile($file_data)
- 引数
$file_data
: アップロードされたファイル情報($_FILES
配列) - 戻り値
$result
: 成功時はtrue
、失敗時はfalse
- 処理概要
- アップロードファイルの存在チェック
- アップロードエラーコードの確認
- 拡張子チェック(gif, jpg, jpeg, png のみ許可)
- 保存先 (
storage/
ディレクトリ) への移動 - 成功なら
true
を返し、失敗時はセッションメッセージをセットしてリダイレクト可能
3. 使い方 / 利用例
■ HTML フォーム
<form method="post" enctype="multipart/form-data" action="/upload">
<input type="file" name="upfile">
<button type="submit">Upload</button>
</form>
■ サービスクラス内での使用例
use app\aura\utils\File;
$fileHandler = new File();
if ($fileHandler->uploadFile($_FILES)) {
echo "Upload successful!";
} else {
echo "Upload failed!";
// エラーメッセージは $_SESSION['msg'] に格納される場合がある
}
- コントローラーやサービスから呼び出して利用可能
- 画像ファイルのアップロードに限定したユーティリティとして機能