画像とファイルをアップロードする方法 Codeイグナイター(例付き)
⚡ スマートサマリー
CodeIgniterのファイルアップロード機能は、組み込みのアップロードライブラリを使用して、HTMLフォームからサーバーディレクトリに画像やドキュメントを転送します。この例では、アップロードフォーム、ファイルの種類とサイズを検証するコントローラー、およびアップロード完了を確認する結果ページを作成します。

CodeIgniterファイルアップロード
ファイル管理はほとんどの Web アプリケーションに不可欠です。ping コンテンツ管理システムを使用する場合は、画像、Word文書、PDFレポートなどをアップロードできる必要があります。会員制サイトを運営している場合は、ユーザーがプロフィール画像をアップロードできるようにする必要があるかもしれません。 CodeIgniterのファイルアップロードクラスを使えば、上記すべてを簡単に実行できます。
このチュートリアルでは、ファイル アップロード ライブラリを使用してファイルをロードする方法を見ていきます。
画像をアップロードする Codeイグナイター
ファイルのアップロード中 Codeイグナイター システムは主にフロントエンドとバックエンドの2つの部分から構成されています。フロントエンドは、入力タイプがファイルであるHTMLフォームによって処理されます。バックエンドでは、ファイルアップロードライブラリがフォームから送信された入力を処理し、アップロードディレクトリに書き込みます。
まずは入力フォームから始めましょう。
application/views ディレクトリ内に files という名前の新しいディレクトリを作成します。
application/views/filesに以下のファイルを追加します。
- Upload_form.php – このビューには、ファイルの入力タイプを持ち、選択したファイルを処理のためにサーバーに送信する HTML フォームが含まれています
- upload_result.php – このビューには、アップロードされた画像の結果が表示され、結果を表示するためのリンクも含まれています。
upload_form.phpに次のコードを追加します。
<!DOCTYPE html> <html> <head> <title>CodeIgniter Image Upload</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <div> <h3>Select an image from your computer and upload it to the cloud</h3> <?php if (isset($error)){ echo $error; } ?> <form method="post" action="<?=base_url(0)?>" enctype="multipart/form-data"> <input type="file" id="profile_image" name="profile_image" size="33" /> <input type="submit" value="Upload Image" /> </form> </div> </body> </html>
ここに、
- if (isset($error)){…} は、error 変数が設定されているかどうかを確認します。結果が true の場合、アップロードライブラリから返されたエラーがユーザーに表示されます。
- ファイルタイプを使用すると、ユーザーは自分のコンピューターを参照してアップロードするファイルを選択できます。
upload_result.php に以下のコードを追加してください。
<!DOCTYPE html> <html> <head> <title>Image Upload Results</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <div> <h3>Congratulations, the image has successfully been uploaded</h3> <p>Click here to view the image you just uploaded <?=anchor('images/'.$image_metadata['file_name'], 'View My Image!')?> </p> <p> <?php echo anchor('upload-image', 'Go back to Image Upload'); ?> </p> </div> </body> </html>
ここに、
- アンカーヘルパーを使用して、画像ディレクトリに新しくアップロードされたファイルへのリンクを作成します。ファイル名は、ファイルが正常にアップロードされたときにビューに渡される画像メタデータから取得されます。
それでは、画像アップロードに応答するコントローラーを作成しましょう。
application/controllers に新しいファイル ImageUploadController.php を追加します
ImageUploadController.phpに次のコードを追加します。
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class ImageUploadController extends CI_Controller { public function __construct() { parent::__construct(); $this->load->helper('url', 'form'); } public function index() { $this->load->view('files/upload_form'); } public function store() { $config['upload_path'] = './images/'; $config['allowed_types'] = 'gif|jpg|png'; $config['max_size'] = 2000; $config['max_width'] = 1500; $config['max_height'] = 1500; $this->load->library('upload', $config); if (!$this->upload->do_upload('profile_image')) { $error = array('error' => $this->upload->display_errors()); $this->load->view('files/upload_form', $error); } else { $data = array('image_metadata' => $this->upload->data()); $this->load->view('files/upload_result', $data); } } }
ここに、
- class ImageUploadController extends CI_Controller {…} コントローラー クラスを定義し、ベース コントローラー CI_Controller を拡張します
- public function __construct() {…} 親コンストラクター メソッドを初期化し、URL とフォーム ヘルパーを読み込みます
- public functionindex() {…} 画像アップロードフォームの表示に使用されるインデックスメソッドを定義します
- public function store() {…} は、画像をアップロードして Web アプリケーション サーバーに保存するメソッドを定義します。
- $config['upload_path'] = './images/'; 画像をアップロードするディレクトリを設定します
- $config['allowed_types'] = 'gif|jpg|png'; は、許可されるファイル拡張子を定義します。これはセキュリティ上の理由から重要です。許可されたファイルタイプによって、画像のみがアップロードされ、PHPなどの他のファイルタイプはアップロードされないことが保証されます。PHPなどのファイルタイプは、サーバーを侵害する可能性があるためです。
- $config['max_size'] = 2000; は、最大ファイルサイズをキロバイト単位で設定します。この例では、アップロードできる最大ファイルサイズは2,000KB(約2MB)です。ユーザーが2,000KBを超えるファイルをアップロードしようとすると、画像のアップロードは失敗し、ライブラリはエラーメッセージを返します。
- $config['max_width'] = 1500; は画像の最大幅を設定します。この例では 1,500 ピクセルです。これより大きい幅を設定するとエラーが発生します。
- $config['max_height'] = 1500; 許容可能な最大の高さを定義します。
- $this->load->library('upload', $config); アップロード ライブラリをロードし、上で定義した配列 $config で初期化します。
- if (!$this->upload->do_upload('profile_image')) {…} は、送信された画像(この場合は profile_image という名前)をアップロードしようとします。
- $error = array('error' => $this->upload->display_errors()); アップロードが失敗した場合のエラーメッセージを設定します
- $this->load->view('files/upload_form', $error); ファイル アップロード フォームをロードし、アップロード ライブラリから返されたエラー メッセージを表示します。
- $data = array('image_metadata' => $this->upload->data()); アップロードが成功した場合は画像メタデータを設定します
- $this->load->view('files/upload_result', $data); アップロードされたビューを正常にロードし、アップロードされたファイルのメタデータを渡します。
コントローラーの設定は以上です。次に、画像をアップロードするディレクトリを作成しましょう。アプリケーションのルートディレクトリに「images」という名前の新しいディレクトリを作成してください。
最後に、フォームを表示するルートと結果を表示するルートの2つをroutes.phpファイルに追加します。
application/config/routes.phpを開き、以下のルートを追加します。
$route['upload-image'] = 'imageuploadcontroller'; $route['store-image'] = 'imageuploadcontroller/store';
ここに、
- $route['upload-image'] = 'imageuploadcontroller'; は、 URL ImageUploadControllerのindexメソッドを呼び出すupload-image
- $route['store-image'] = 'imageuploadcontroller/store'; は、 URL 選択されたユーザーファイルを受け取り、サーバーにアップロードするstore-image。
一般的な修正方法 CodeIgniterのファイルアップロードエラー
ほとんどのアップロード失敗時には、アップロードライブラリから明確なエラーメッセージが返されます。以下に、よくあるエラーとその解決策を一覧で示します。
- アップロードしようとしているファイル形式は許可されていません。 不足している拡張子を allowed_types 設定に追加してください。例えば、「gif|jpg|png|pdf」のように追加します。
- アップロードしようとしているファイルは、許可されているサイズを超えています。 max_sizeの値を増やし、php.iniのupload_max_filesizeとpost_max_sizeが十分な大きさであることを確認してください。
- アップロードパスが有効ではないようです。 upload_pathディレクトリを作成し、Webサーバーがそのディレクトリへの書き込み権限を持っていることを確認してください。
- アップロードするファイルを選択しませんでした。 入力名が do_upload() の引数と一致していること、およびフォームが enctype multipart/form-data を使用していることを確認してください。
アプリケーションのテスト
組み込みのPHPサーバーを起動しましょう。
ターミナルまたはコマンドプロンプトを開き、アプリケーションのルートディレクトリに移動します。私の場合は、ルートディレクトリはドライブ C:\Sites\ci-app にあります。
cd C:\Sites\ci-app
以下のコマンドを使用してサーバーを起動します。
php -S localhost:3000
以下を読み込んでください URL ウェブブラウザで: http://localhost:3000/upload-image
以下のような結果が表示されます。
ファイルの選択をクリックします
次のようなダイアログウィンドウが表示されるはずです。
目的の画像を選択し、「開く」をクリックしてください。
選択したファイル名は、上の画像のようにアップロードフォームに表示されます。「画像をアップロード」ボタンをクリックしてください。
全てが順調に進んだ場合、以下の結果が得られます。
「画像を表示!」リンクをクリックしてください。
アップロードした画像が表示されるはずです。表示結果は以下のようになります。
アップロードされた画像名が表示されていることに注意してください。 URL画像名は、アップロードされた画像のメタデータから取得しました。
注:その他の種類のファイルについても、ファイルのアップロード手順は同じです。





