CodeIgniterでファイルアップロードとストレージ管理をマスター!初心者向け完全ガイド
生徒
「自分のパソコンにある画像やファイルを、Webサイトに送る機能を作りたいです!」
先生
「それは『ファイルアップロード』という機能ですね。CodeIgniterを使えば、初心者の方でも安全に作成できますよ。」
生徒
「難しそうですが、私にもできますか?ストレージ管理というのも気になります。」
先生
「大丈夫です!まずは基本の仕組みから、ゆっくり丁寧に解説していきますね。」
1. ファイルアップロードの仕組みとは?
Webサイトで「自分の写真を選択して投稿する」という操作をよく見かけますよね。これがファイルアップロードです。仕組みを簡単に例えると、「あなたの家の机(パソコン)にある書類を、学校の受付(Webサーバー)に届けて、指定の棚(ストレージ)に保管してもらう」という流れになります。
CodeIgniter(コードイグナイター)というPHPのフレームワークは、この「届ける」「チェックする」「保管する」という作業を、とても簡単な命令で実行してくれる便利な道具箱のようなものです。プログラミング未経験の方でも、この道具を正しく使えば、安全にファイルを扱うことができます。
ここで出てくるWebサーバーとは、インターネット上でWebサイトのデータを保存・配信している特別なコンピューターのことです。そしてストレージとは、データを保存しておくための場所(本棚のようなもの)を指します。
2. 準備をしよう!HTMLでアップロード画面を作る
まずは、ユーザーがファイルを選ぶための「画面(フォーム)」を作る必要があります。HTMLという言語を使って、ファイルを選択するボタンを作成しましょう。ここで非常に重要なのが、<form>タグにenctype="multipart/form-data"というおまじないを書くことです。
これがないと、コンピューターは「文字は送れるけど、ファイル(画像など)は送れない!」と混乱してしまいます。ファイルを送る時は必ずセットで覚えるようにしましょう。
<form action="/upload/do_upload" method="post" enctype="multipart/form-data">
<p>画像を選んでください:</p>
<input type="file" name="userfile" size="20">
<br><br>
<button type="submit">アップロード開始</button>
</form>
このコードをブラウザで表示すると、ファイルを選択するボタンが表示されます。name="userfile"という部分は、後でPHP側で「どのファイルを受け取るか」を識別するための名前になります。名前は何でも良いですが、分かりやすいものにしましょう。
3. CodeIgniterのコントローラーでファイルを受け取る
画面でボタンが押された後、そのファイルを受け取って処理するのが「コントローラー」の役割です。コントローラーは、司令塔のような存在で、「ファイルが届いたぞ!中身を確認して保存しろ!」と命令を出します。
CodeIgniter 4では、request->getFile()という命令を使うことで、送られてきたファイルを簡単に捕まえることができます。初心者の方が最初につまずきやすいポイントですが、この一行が「受付窓口」になると覚えておけば大丈夫です。
namespace App\Controllers;
use CodeIgniter\Controller;
class Upload extends Controller {
public function do_upload() {
// フォームから送られてきた「userfile」という名前のファイルを取得します
$file = $this->request->getFile('userfile');
// ファイルが存在するか確認します
if ($file->isValid() && ! $file->hasMoved()) {
echo "ファイルを受け取りました!";
}
}
}
上記のコードにあるisValid()は「そのファイルは壊れていないか?」をチェックし、hasMoved()は「もうどこかに保存されていないか?」を確認しています。安全性を高めるための大切な手順です。
4. バリデーションで不正なファイルをブロックする
何でもかんでもファイルを保存してしまうと、コンピューターウイルスが送られてきたり、サーバーの容量がいっぱいになったりして大変なことになります。そこで、「バリデーション(検証)」という作業が必要です。
例えば、「画像ファイル(jpgやpng)だけを許可する」「サイズは2MB(メガバイト)までにする」といったルールを決めます。これは、学校の校門で持ち物検査をするようなイメージですね。
// バリデーションルールの設定例
$rules = [
'userfile' => [
'label' => 'アップロードファイル',
'rules' => 'uploaded[userfile]|max_size[userfile,2048]|ext_in[userfile,jpg,jpeg,png,gif]',
],
];
if (! $this->validate($rules)) {
// ルールを守っていない場合の処理
echo "エラー:画像ファイル以外、またはサイズが大きすぎます。";
}
max_sizeはファイル容量の制限、ext_inは許可するファイルの種類(拡張子)を指定しています。拡張子とは、ファイル名の最後についている「.jpg」などの記号のことで、そのファイルが何の種類かを表しています。
5. ファイルをストレージ(保存場所)に移動させる
チェックが終わったら、いよいよファイルを適切な場所に保管します。これを「移動(ムーブ)」と呼びます。デフォルトでは、ファイルは「一時フォルダ」という仮の場所に置いてあるため、放っておくと消えてしまいます。
move()という命令を使って、Webサーバー内の特定のフォルダに永久保存します。このとき、ファイル名が重ならないようにランダムな名前に変えて保存するのが、プログラミングの世界では一般的です。
// 保存先のパス(場所)を指定します
$uploadPath = WRITEPATH . 'uploads/';
// 新しい名前を自動で付けて、指定した場所に移動します
if ($file->move($uploadPath)) {
echo "保存完了!新しい名前は:" . $file->getName();
}
WRITEPATH(ライトパス)とは、CodeIgniterがあらかじめ決めてくれている「書き込み可能なフォルダ」のことです。ここを使えば、外部から勝手に見られる心配が少なく、安全にデータを管理できます。
6. サーバーのフォルダ構成と権限について
パソコンを初めて触る方にとって「フォルダの権限(パーミッション)」は少し難しいかもしれません。しかし、これは非常に重要です。サーバーのフォルダには「鍵」がかかっていることがあり、PHPというプログラムがそのフォルダにファイルを「書いても良い」という許可(権限)を持っていないと、アップロードに失敗してしまいます。
通常、Web公開用のフォルダは public という名前になっていますが、大切なファイルは writable という名前のフォルダの中に保存するように設定します。これは、「誰でも見れる展示スペース」と「関係者以外立ち入り禁止の倉庫」を使い分けているような状態です。
もしプログラムが正しく動いているのにファイルが保存されない場合は、そのフォルダに「書き込み権限」があるかどうかを確認してみましょう。これは、フォルダの設定画面で変更することができます。
7. アップロードされたファイルを表示する方法
保存したファイルは、後でWebサイト上に表示したいですよね。しかし、安全のために writable フォルダに保存したファイルは、そのままではブラウザから直接見ることができません。これは、大切な書類を金庫に入れているのと同じだからです。
画像を表示するには、ファイルを public フォルダ(誰でも見える場所)に保存するか、あるいはプログラムを経由して中身を読み取って表示させるという工夫が必要になります。初心者のうちは、まずは public/uploads というフォルダを作って、そこに保存する練習から始めるのが一番分かりやすいでしょう。
8. エラーが起きた時の対処法(デバッグ)
プログラミングをしていると、必ずと言っていいほどエラーに遭遇します。「ファイルが送れない!」「画面が真っ白になった!」という時も、慌てなくて大丈夫です。CodeIgniterには、どこで失敗したかを教えてくれる便利な機能があります。
例えば、getErrorString() という命令を使えば、「ファイルが大きすぎます」や「サーバーの調子が悪いです」といった具体的な理由を表示させることができます。これを「デバッグ」と呼び、原因を突き止めて修正する作業のことです。エラーメッセージは「コンピューターからのメッセージ」だと思って、よく読んでみましょう。
9. セキュリティに配慮したストレージ管理
最後に、とても大切な「セキュリティ」の話をします。インターネット上には、悪意を持ってファイルを送りつけようとする人もいます。もし、悪意のあるプログラムをあなたのサーバーにアップロードされて実行されてしまったら、サイトが乗っ取られてしまうかもしれません。
それを防ぐために、これまで説明した「バリデーション」や「ファイル名の変更」が役立ちます。自分で決めたルールをしっかり守ることで、あなたのWebサイトを守ることができるのです。CodeIgniterは、こうしたセキュリティ対策を最初から考慮して作られているので、基本に従ってコードを書くだけで、自然と安全なシステムを作ることができます。