CodeIgniter で画像とファイルをアップロードする方法 (例付き)
CodeIgniter ファイルのアップロード
ファイル管理は、ほとんどの Web アプリケーションにとって不可欠です。 コンテンツ管理システムを開発している場合は、画像、Word ドキュメント、PDF レポートなどをアップロードできる必要があります。会員制サイトで作業している場合は、ユーザーがプロフィールをアップロードできるようにする必要がある場合があります。画像。 CodeIgniter の File Uploading クラスを使用すると、上記のすべてを簡単に行うことができます。
このチュートリアルでは、ファイル アップロード ライブラリを使用してファイルをロードする方法を見ていきます。
CodeIgniter での画像のアップロード
ファイルのアップロード中 CodeIgniter には XNUMX つの主要な部分があります。 フロントエンドとバックエンド。 フロントエンドは、フォーム入力タイプのファイルを使用する 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('store-image')?>" 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)){…} は、エラー変数が設定されているかどうかを確認します。結果が 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>
ここに、
- は、アンカー ヘルパーを使用して、images ディレクトリに新しくアップロードされたファイルへのリンクを作成します。 名前は、ファイルが正常にアップロードされたときにビューに渡される画像メタデータから取得されます。
次に、画像のアップロードに応答するコントローラーを作成しましょう。
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 などの他のファイル タイプはサーバーを侵害する可能性があるためアップロードできなくなります。
- $config['max_size'] = 2000; 最大ファイル サイズをキロバイト単位で設定します。 この例では、アップロードできる最大ファイルは 2,000MB に近い 2kb です。 ユーザーが 2,000 kb を超えるファイルをアップロードしようとすると、画像のアップロードは失敗し、ライブラリはエラー メッセージを返します。
- $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」を作成します。
最後に、フォームを表示して結果を表示する XNUMX つのルートを Routes.php ファイルに追加します。
Open application/config/routes.php Add the following routes $route['upload-image'] = 'imageuploadcontroller'; $route['store-image'] = 'imageuploadcontroller/store';
ここに、
- $route['アップロードイメージ'] = 'イメージアップロードコントローラー'; ImageUploadControllerのindexメソッドを呼び出すURLアップロードイメージを定義します
- $route['ストアイメージ'] = 'イメージアップロードコントローラー/ストア'; 選択したユーザー ファイルを受け入れてサーバーにアップロードする URL ストアイメージを定義します。
アプリケーションのテスト
組み込みの PHP サーバーを起動しましょう
ターミナル/コマンド ラインを開き、アプリケーションのルートを参照します。 私の場合、ルートはドライブ C:\Sites\ci-app にあります。
cd C:\Sites\ci-app
次のコマンドを使用してサーバーを起動します
php -S localhost:3000
Web ブラウザに次の URL を読み込みます。 http://localhost:3000/upload-image
以下の結果が表示されます
ファイルの選択をクリックします
次のようなダイアログウィンドウが表示されるはずです。
希望の画像を選択し、「開く」をクリックします
上の画像に示すように、選択したファイル名がフォームのアップロードに表示されます。 画像のアップロードボタンをクリックします
すべてがうまくいけば、次の結果が得られます。
「私の画像を表示」をクリックしてください。 リンク
アップロードした画像が表示されるはずです。結果は次のようになります。
アップロードされた画像の名前がURLに表示されることに注意してください。画像名はアップロードされた画像のメタデータから取得しました。
注: ファイルのアップロード プロセスは、他の種類のファイルでも同じです。