Codeigniter-quick-guide
CodeIgniter-概要
CodeIgniterは、PHPを使用してWebサイトを開発するために使用できるアプリケーション開発フレームワークです。 これはオープンソースのフレームワークです。 非常に豊富な機能セットを備えているため、Webサイト開発作業の速度が向上します。
PHPを熟知していれば、CodeIgniterはタスクを簡単にします。 非常に豊富なライブラリとヘルパーのセットがあります。 CodeIgniterを使用すると、ゼロからWebサイトを開発する場合に多くの時間を節約できます。 それだけでなく、CodeIgniterで構築されたWebサイトも、Webサイトを介して行われるさまざまな攻撃を防ぐことができるため、安全です。
CodeIgniterの機能
CodeIgniterの重要な機能の一部を以下にリストします-
- モデルビューコントローラーベースのシステム
- 非常に軽量
- いくつかのプラットフォームをサポートするフル機能のデータベースクラス。
- クエリビルダーデータベースのサポート
- フォームとデータの検証
- セキュリティとXSSフィルタリング
- セッション管理
- メール送信クラス。 添付ファイル、HTML/テキストメール、複数のプロトコル(送信メール、SMTP、メール)などをサポートします。
- 画像操作ライブラリ(トリミング、サイズ変更、回転など)。 GD、ImageMagick、およびNetPBMをサポート
- ファイルアップロードクラス
- FTPクラス
- ローカライゼーション
- ページ付け
- データ暗号化
- ベンチマーク
- フルページキャッシング
- エラーログ
- アプリケーションプロファイリング
- カレンダークラス
- ユーザーエージェントクラス
- Zipエンコードクラス
- テンプレートエンジンクラス
- トラックバッククラス
- XML-RPCライブラリ
- ユニットテストクラス
- 検索エンジンに優しいURL
- 柔軟なURIルーティング
- フックとクラス拡張のサポート
- 「ヘルパー」関数の大規模なライブラリ
CodeIgniter-インストール
CodeIgniterのインストールは非常に簡単です。 以下の手順に従ってください-
- *ステップ-1 *-リンクhttp://www.codeigniter.com/download[CodeIgniter]からCodeIgniterをダウンロードします
- レガシーと最新の2つの異なるオプションがあります。 名前自体は自己記述的です。 レガシーのバージョンは2.x未満で、最新のバージョンは3.0バージョンです。
- GitHubで最新のスクリプトをすべて入手することもできます。
- *ステップ-2 *-フォルダを解凍します。
- *ステップ-3 *-すべてのファイルとフォルダーをサーバーにアップロードします。
- *ステップ-4 *-すべてのファイルをサーバーにアップロードした後、サーバーのURL(www.domain-name.comなど)にアクセスします。
URLにアクセスすると、次の画面が表示されます-
CodeIgniter-アプリケーションアーキテクチャ
CodeIgniterアプリケーションのアーキテクチャを以下に示します。
- 図に示すように、リクエストがCodeIgniterに届くたびに、最初に index.php ページに移動します。
- 2番目のステップで、 Routing は、キャッシュのためにこの要求をステップ3に渡すか、セキュリティチェックのためにこの要求をステップ4に渡すかを決定します。
- 要求されたページが既に*キャッシュ*にある場合、*ルーティング*は要求をステップ3に渡し、応答はユーザーに戻ります。
- 要求されたページが*キャッシュ*に存在しない場合、*ルーティング*は*セキュリティ*チェックのために要求されたページをステップ4に渡します。
- 要求を Application Controller に渡す前に、送信されたデータの Security がチェックされます。 *セキュリティ*チェックの後、*アプリケーションコントローラー*は必要な*モデル、ライブラリ、ヘルパー、プラグイン*および*スクリプト*をロードし、*ビュー*に渡します。
- View は利用可能なデータでページをレンダリングし、 Caching に渡します。 要求されたページは以前にキャッシュされていなかったため、今回は Caching にキャッシュされ、今後の要求のためにこのページを迅速に処理します。
ディレクトリ構造
以下の画像は、CodeIgniterのディレクトリ構造を示しています。
CodeIgniterディレクトリ構造は3つのフォルダに分かれています-
- 応用
- システム
- ユーザーガイド
応用
名前が示すように、アプリケーションフォルダーには、ビルドしているアプリケーションのすべてのコードが含まれています。 これは、プロジェクトを開発するフォルダーです。 アプリケーションフォルダには、以下で説明するいくつかの他のフォルダが含まれています-
- キャッシュ-このフォルダには、アプリケーションのすべてのキャッシュページが含まれます。 これらのキャッシュされたページは、ページへのアクセスの全体的な速度を向上させます。
- Config -このフォルダーには、アプリケーションを構成するためのさまざまなファイルが含まれています。 config.php ファイルの助けを借りて、ユーザーはアプリケーションを設定できます。 database.php ファイルを使用して、ユーザーはアプリケーションのデータベースを構成できます。
- Controllers -このフォルダーは、アプリケーションのコントローラーを保持します。 これはアプリケーションの基本的な部分です。
- Core -このフォルダーには、アプリケーションの基本クラスが含まれます。
- ヘルパー-このフォルダーには、アプリケーションのヘルパークラスを配置できます。
- フック-このフォルダー内のファイルは、コアファイルをハッキングすることなく、フレームワークの内部の仕組みを活用するための手段を提供します。
- Language -このフォルダーには、言語関連のファイルが含まれています。
- ライブラリ-このフォルダには、アプリケーション用に開発されたライブラリのファイルが含まれています。
- ログ-このフォルダには、システムのログに関連するファイルが含まれています。
- モデル-データベースログインはこのフォルダに配置されます。
- Third_party -このフォルダには、アプリケーションに使用されるプラグインを配置できます。
- Views -アプリケーションのHTMLファイルはこのフォルダーに配置されます。
システム
このフォルダーには、コーディングを容易にするCodeIgniterコアコード、ライブラリ、ヘルパー、およびその他のファイルが含まれています。 これらのライブラリとヘルパーはロードされ、Webアプリ開発で使用されます。
このフォルダーには、さまざまなフォルダーに整理された結果のCodeIgniterコードがすべて含まれています-
- Core -このフォルダーにはCodeIgniterのコアクラスが含まれています。 ここでは何も変更しないでください。 すべての作業は、アプリケーションフォルダーで行われます。 CodeIgniterコアを拡張することを目的とする場合でも、フックを使用して行う必要があり、フックはアプリケーションフォルダーに存在します。
- データベース-データベースフォルダには、コアデータベースドライバと他のデータベースユーティリティが含まれています。
- フォント-フォントフォルダには、フォント関連の情報とユーティリティが含まれています。
- ヘルパー-ヘルパーフォルダーには、標準のCodeIgniterヘルパー(日付、Cookie、URLヘルパーなど)が含まれています。
- Language -言語フォルダーには言語ファイルが含まれています。 今のところ無視して構いません。
- ライブラリ-ライブラリフォルダーには、標準のCodeIgniterライブラリが含まれています(電子メール、カレンダー、ファイルのアップロードなどに役立ちます)。 独自のライブラリを作成したり、標準ライブラリを拡張(および置換)することもできますが、これらは application/libraries ディレクトリに保存され、この特定のフォルダに保存された標準CodeIgniterライブラリとは別になります。
ユーザーガイド
これはCodeIgniterのユーザーガイドです。 基本的には、CodeIgniter Webサイトのユーザーガイドのオフラインバージョンです。 これを使用して、さまざまなライブラリ、ヘルパー、およびクラスの機能を学習できます。 CodeIgniterで最初のWebアプリを構築する前に、このユーザーガイドを読むことをお勧めします。
これらの3つのフォルダーのほかに、「 index.php 」という名前のもう1つの重要なファイルがあります。 このファイルでは、アプリケーション環境とエラーレベルを設定し、システムとアプリケーションのフォルダー名を定義できます。 実行する内容について十分な知識がない場合は、これらの設定を編集しないことをお勧めします。
CodeIgniter-MVCフレームワーク
CodeIgniterは、* Model-View-Controller(MVC)開発パターン*に基づいています。 MVCは、アプリケーションロジックをプレゼンテーションから分離するソフトウェアアプローチです。 実際には、プレゼンテーションはPHPスクリプトとは別なので、Webページに最小限のスクリプトを含めることができます。
- Model はデータ構造を表します。 通常、モデルクラスには、データベースの情報を取得、挿入、更新するのに役立つ関数が含まれます。
- View は、ユーザーに提示される情報です。 通常、ビューはWebページですが、CodeIgniterでは、ビューはヘッダーまたはフッターのようなページフラグメントになることもあります。 RSSページ、またはその他の種類の「ページ」でもかまいません。
- Controller は、モデル、ビュー、およびHTTP要求を処理してWebページを生成するために必要な他のリソース間の仲介役として機能します。
CodeIgniter-基本概念
コントローラー
コントローラーは単純なクラスファイルです。 名前が示すように、URIによってアプリケーション全体を制御します。
コントローラーの作成
まず、 application/controllers フォルダーに移動します。 ここには、 indexl と Welcome.php の2つのファイルがあります。 これらのファイルはCodeIgniterに付属しています。
これらのファイルはそのままにしてください。 「 Test.php 」という名前の同じパスの下に新しいファイルを作成します。 そのファイルに次のコードを書きます-
<?php
class Test extends CI_Controller {
public function index() {
echo "Hello World!";
}
}
?>
*Test* クラスは、 *CI_Controller* と呼ばれる組み込みクラスを拡張します。 このクラスは、独自のコントローラークラスを作成する場合は常に拡張する必要があります。
コントローラーの呼び出し
上記のコントローラは、次のようにURIで呼び出すことができます-
http://www.your-domain.com/index.php/test
上記のURIのindex.phpの後の単語「 test 」に注意してください。 これは、コントローラーのクラス名を示します。 コントローラの名前「 Test 」を指定したので、index.phpの後に「 test 」を記述します。 クラス名は*大文字*で始まる必要がありますが、URIでそのコントローラーを呼び出すときは*小文字*と書く必要があります。 コントローラを呼び出すための一般的な構文は次のとおりです-
http://www.your-domain.com/index.php/controller/method-name
コンストラクターメソッドの作成と呼び出し
上記のクラスを変更して、「hello」という名前の別のメソッドを作成しましょう。
<?php
class Test extends CI_Controller {
public function index() {
echo "This is default function.";
}
public function hello() {
echo "This is hello function.";
}
}
?>
私たちは次の3つの方法で上記のコントローラを実行することができます-
- http://www.your-domain.com/index.php/test
- http://www.your-domain.com/index.php/test/index
- http://www.your-domain.com/index.php/test/hello
ブラウザーで最初のURIにアクセスすると、次の図に示すような出力が得られます。 ご覧のとおり、メソッドの名前にURIを渡さなかった場合でも、メソッド「 index 」の出力が得られました。 URIにはコントローラー名のみを使用しました。 このような状況では、CodeIgniterはデフォルトのメソッド「 index 」を呼び出します。
ブラウザの2番目のURIにアクセスすると、上の図に示されているものと同じ出力が得られます。 ここでは、URIでコントローラーの名前の後にメソッドの名前を渡しました。 メソッドの名前は「 index 」なので、同じ出力が得られます。
ブラウザの3番目のURIにアクセスすると、下の図に示す出力が得られます。 ご覧のとおり、URIのコントローラー名「 test 」の後に「 hello 」をメソッド名として渡したため、メソッド「 hello 」の出力を取得しています。
覚えておくべきポイント
- コントローラークラスの名前は大文字で始める必要があります。
- コントローラーは小文字で呼び出す必要があります。
- 親クラスの機能をオーバーライドするため、親クラスと同じ名前のメソッドを使用しないでください。
ビュー
これは、コントローラーで呼び出すことができる単純なWebページでも複雑なWebページでもかまいません。 Webページには、ヘッダー、フッター、サイドバーなどが含まれる場合があります。 ビューを直接呼び出すことはできません。 簡単なビューを作成しましょう。 「 test.php 」という名前で application/views の下に新しいファイルを作成し、そのファイルに以下のコードをコピーします。
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>CodeIgniter View Example</title>
</head>
<body>
CodeIgniter View Example
</body>
</html>
以下に示すように、 application/controllers/test.php ファイルのコードを変更します。
ビューをロードする
ビューは、次の構文によってロードすることができます-
$this->load->view('name');
nameは、レンダリングされるビューファイルです。 あなたがいくつかのディレクトリにビューファイルを保存することを計画している場合は、次の構文を使用することができます-
$this->load->view('directory-name/name');
php以外を使用しない限り、拡張子をphpとして指定する必要はありません。.
- application/views/test.php* の下の「 *test.php* 」ファイルにhtmlコーディングを保存しているため、index()メソッドはviewメソッドを呼び出し、view()メソッドに引数として「test」を渡します。
<?php
class Test extends CI_Controller {
public function index() {
$this->load->view('test');
}
}
?>
ここに上記のコードの出力があります-
次のフローチャートは、すべてがどのように機能するかを示しています-
モデル
モデルクラスは、データベース内の情報を操作するように設計されています。 例として、CodeIgniterを使用してアプリケーション内のユーザーを管理している場合、ユーザーのデータを挿入、削除、更新、取得する関数を含むモデルクラスが必要です。
モデルクラスの作成
モデルクラスは application/models ディレクトリに保存されます。 次のコードは、CodeIgniterでモデルクラスを作成する方法を示しています。
<?php
Class Model_name extends CI_Model {
Public function __construct() {
parent::__construct();
}
}
?>
Model_nameは、指定するモデルクラスの名前です。 各モデルクラスは、CodeIgniterのCI_Modelクラスを継承する必要があります。 モデルクラスの最初の文字は大文字でなければなりません。 以下は、ユーザーのモデルクラスのコードです。
<?php
Class User_model extends CI_Model {
Public function __construct() {
parent::__construct();
}
}
?>
上記のモデルクラスは、User_model.phpとして保存する必要があります。 クラス名とファイル名は同じでなければなりません。
ローディングモデル
モデルはコントローラーで呼び出すことができます。 次のコードを使用して、任意のモデルをロードできます。
$this->load->model('model_name');
model_nameは、ロードするモデルの名前です。 モデルをロードした後、次のようにメソッドを呼び出すだけです。
$this->model_name->method();
モデルの自動読み込み
アプリケーション全体で何らかのモデルクラスが必要な場合があります。 このような状況では、自動ロードする方が良いでしょう。
/*
| ---------------------------------------------------------------
| Auto-Load Models
| ---------------------------------------------------------------
| Prototype:
|
| $autoload['model'] = array('first_model', 'second_model');
|
| You can also supply an alternative model name to be assigned
| in the controller:
|
| $autoload['model'] = array('first_model' => 'first');
*/
$autoload['model'] = array();
上の図に示すように、自動ロードするモデルの名前を配列に渡すと、システムが初期化状態にあり、アプリケーション全体からアクセスできる状態で、自動ロードされます。
ヘルパー
名前が示すように、システムの構築に役立ちます。 さまざまな機能を提供するために、小さな機能に分割されています。 CodeIgniterには、以下の表にリストされているヘルパーがいくつかあります。 独自のヘルパーも作成できます。
通常、ヘルパーは system/helpers または* application/helpersディレクトリ*に保存されます。 カスタムヘルパーは application/helpers ディレクトリに保存され、システムのヘルパーは system/helpers ディレクトリに保存されます。 CodeIgniterは最初に* application/helpersディレクトリ*を探します。 ディレクトリが存在しない場合、または指定されたヘルパーが見つからない場合、CodeIgniterは代わりにグローバル* system/helpers/ディレクトリ*を検索します。 カスタムヘルパーかシステムヘルパーかに関係なく、各ヘルパーを使用する前にロードする必要があります。
以下に、最も一般的に使用されるヘルパーを示します。
S.N. | Helper Name & Description |
---|---|
1 |
Array Helper 配列ヘルパーファイルには、配列の操作を支援する関数が含まれています。 |
2 |
CAPTCHA Helper CAPTCHAヘルパーファイルには、CAPTCHAイメージの作成を支援する関数が含まれています。 |
3 |
Cookie Helper Cookie Helperファイルには、Cookieの操作を支援する関数が含まれています。 |
4 |
Date Helper 日付ヘルパーファイルには、日付の操作に役立つ関数が含まれています。 |
5 |
Directory Helper ディレクトリヘルパーファイルには、ディレクトリの操作を支援する関数が含まれています。 |
6 |
Download Helper ダウンロードヘルパーを使用すると、データをデスクトップにダウンロードできます。 |
7 |
Email Helper 電子メールヘルパーは、電子メールを操作するためのいくつかの支援機能を提供します。 より堅牢なメールソリューションについては、CodeIgniterのメールクラスをご覧ください。 |
8 |
File Helper ファイルヘルパーファイルには、ファイルの操作を支援する関数が含まれています。 |
9 |
Form Helper フォームヘルパーファイルには、フォームの操作を支援する関数が含まれています。 |
10 |
HTML Helper HTMLヘルパーファイルには、HTMLの操作を支援する関数が含まれています。 |
11 |
Inflector Helper Inflector Helperファイルには、単語を複数形、単数形、キャメルケースなどに変更できる関数が含まれています。 |
12 |
Language Helper 言語ヘルパーファイルには、言語ファイルの操作を支援する関数が含まれています。 |
13 |
Number Helper 数値ヘルパーファイルには、数値データの操作に役立つ関数が含まれています。 |
14 |
Path Helper パスヘルパーファイルには、サーバー上のファイルパスを操作できる関数が含まれています。 |
15 |
Security Helper セキュリティヘルパーファイルには、セキュリティ関連の機能が含まれています。 |
16 |
Smiley Helper スマイリーヘルパーファイルには、スマイリー(絵文字)を管理できる関数が含まれています。 |
17 |
String Helper 文字列ヘルパーファイルには、文字列の操作を支援する関数が含まれています。 |
18 |
Text Helper テキストヘルパーファイルには、テキストの操作を支援する関数が含まれています。 |
19 |
Typography Helper Typography Helperファイルには、意味的に関連する方法でテキストをフォーマットするのに役立つ関数が含まれています。 |
20 |
URL Helper URLヘルパーファイルには、URLの操作を支援する関数が含まれています。 |
21 |
XML Helper XMLヘルパーファイルには、XMLデータの操作を支援する関数が含まれています。 |
ヘルパーをロードする
ヘルパーは以下に示すようにロードすることができます-
$this->load->helper('name');
nameはヘルパーの名前です。 たとえば、URLヘルパーをロードする場合、次のようにロードできます-
$this->load->helper('url');
ルーティング
CodeIgniterにはユーザーフレンドリーなURIルーティングシステムがあるため、URLを簡単に再ルーティングできます。 通常、URL文字列とそれに対応するコントローラークラス/メソッドの間には1対1の関係があります。 URIのセグメントは通常このパターンに従います-
your-domain.com/class/method/id/
- *最初のセグメント*は、呼び出す必要のあるコントローラクラスを表します。
- * 2番目のセグメント*は、呼び出す必要のあるクラス関数またはメソッドを表します。
- * 3番目*および追加のセグメントは、コントローラーに渡されるIDおよび変数を表します。
状況によっては、このデフォルトのルーティングメカニズムを変更する必要がある場合があります。 CodeIgniterは、独自のルーティングルールを設定できる機能を提供します。
ルーティングルールのカスタマイズ
これらすべてを処理できる特定のファイルがあります。 ファイルはapplication/config/routes.phpにあります。 ルーティングルールをカスタマイズできる$ routeという配列があります。 $ route配列のキーがルーティングするものを決定し、値がルーティングする場所を決定します。 CodeIgniterには3つの予約されたルートがあります。
S.N. | Reserved Routes & Description |
---|---|
1 |
$route['default_controller'] このルートは、URIにデータが含まれていない場合にユーザーがルートURLをロードする場合に、どのコントローラークラスをロードするかを示します。 デフォルトルートを使用することをお勧めします。そうしないと、デフォルトで404ページが表示されます。 ここでウェブサイトのホームページを設定して、デフォルトでロードされるようにすることができます。 |
2 |
$route['404_override'] このルートは、要求されたコントローラーが見つからない場合にどのコントローラークラスをロードする必要があるかを示します。 デフォルトの404エラーページを上書きします。 * show_404()関数には影響しません。この関数は、 *_ application/views/errors/error_404.php_ にあるデフォルトの error_404.php ファイルのロードを継続します。 |
3 |
$route['translate_uri_dashes'] ブール値から明らかなように、これは正確なルートではありません。 このオプションを使用すると、コントローラーおよびメソッドURIセグメント内のダッシュ(「-」)を自動的にアンダースコアに置き換えることができるため、必要に応じて追加のルートエントリを節約できます。 ダッシュは有効なクラスまたはメソッド名の文字ではなく、使用しようとすると致命的なエラーが発生するため、これが必要です。 |
ルートは*ワイルドカード*または*正規表現*を使用してカスタマイズできますが、これらのカスタマイズされたルーティングルールは予約済みルールの後に来る必要があることに注意してください。
ワイルドカード
以下に説明するように、2つのワイルドカード文字を使用できます-
- (:num)-数字のみを含むセグメントに一致します。
- (:any)-任意の文字を含むセグメントに一致します。
例
$route['product/:num']='catalog/product_lookup';
上記の例では、URLの最初のセグメントにリテラル単語「product」が見つかり、2番目のセグメントに数字が見つかった場合、代わりに「catalog」クラスと「product_lookup」メソッドが使用されます。
正規表現
ワイルドカードのように、 $ route array key 部分で正規表現を使用することもできます。 URIが正規表現と一致する場合、$ route配列に設定された値部分にルーティングされます。
例
$route['products/([a-z]+)/(\d+)']='$1/id_$2';
上記の例では、代わりにproducts/shoes/123に似たURIが「 shoes 」コントローラークラスと「 id_123 」メソッドを呼び出します。
CodeIgniter-構成
サイトをセットアップしたら、次にすべきことはサイトを構成することです。 application/configフォルダーには、サイトの基本構成を設定するファイルのグループが含まれています。
ベースURLの構成
サイトのベースURLはapplication/config/config.phpファイルで設定できます。 CodeIgniterルートへのURLです。 通常、これはベースURLであり、末尾にスラッシュが付きます。
http://example.com/
これが設定されていない場合、CodeIgniterはインストールのプロトコル、ドメイン、パスを推測しようとします。 ただし、特に本番環境では、これを常に明示的に設定し、自動推測に依存しないでください。 以下に示すように、キー「base_url」で$ config配列のベースURLを設定できます-
$config['base_url'] = 'http://your-domain.com';
データベース構成
サイトのデータベースはapplication/config/database.phpファイルで設定できます。 多くの場合、開発や本番などの異なる環境用にデータベースを設定する必要があります。 CodeIgniterで提供される多次元配列を使用して、さまざまな環境にデータベースをセットアップできます。 構成設定は、以下に示すように配列に保存されます-
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'database_name',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array()
);
ホスト名、ユーザー名、パスワード、データベース、dbdriver以外のいくつかのオプションをデフォルト値のままにすることができます。
- ホスト名-ここでデータベースの場所を指定します。 localhostまたはIPアドレス
- username -データベースのユーザー名をここに設定します。
- password -ここにデータベースのパスワードを設定します。
- database -データベースの名前をここに設定します。
- dbdriver -使用しているデータベースのタイプを設定します。 MySQL、MySQLi、Postgre SQL、ODBC、およびMS SQL。
配列 $ db のキーを変更することにより、以下に示すようにデータベースの他の構成を設定できます。 ここでは、他のデータベース環境をそのままにして、キーを 'test' に設定して、テスト環境用のデータベースを設定しています。
$db['test'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'database_name',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array()
);
次のように変数の値を変更することで、異なる環境に簡単に切り替えることができます-
- $ active_group = 'default';//これはデフォルトの環境を設定します*
- $ active_group = ‘テスト’;//これにより、テスト環境が設定されます*
自動ロード構成
このファイルは、デフォルトで、ロードするシステムを指定します。 フレームワークを可能な限り軽量に保つために、デフォルトでは絶対最小リソースのみがロードされます。 ローカルレベルで繰り返しロードするのではなく、頻繁に使用するシステムを自動ロードする必要があります。 以下は、自動的にロードできるものです-
- ライブラリ-これはライブラリのリストであり、自動ロードされる必要があります。 CodeIgniterによって自動ロードされるように、以下に示すように、配列内のライブラリのリストを提供します。 この例では、データベース、電子メール、およびセッションライブラリを自動ロードしています。
$autoload['libraries'] = array('database', 'email', 'session');
- ドライバ-これらのクラスはsystem/libraries/またはapplication/libraries/ディレクトリにありますが、独自のサブディレクトリ内にも配置され、CI_Driver_Libraryクラスを拡張します。 複数の交換可能なドライバーオプションを提供します。 以下は、キャッシュドライバーを自動ロードする例です。
$autoload['drivers'] = array('cache');
- ヘルパーファイル-オートロードされるヘルパーファイルのリストです。 以下に示すように、CodeIgniterによって自動ロードされるライブラリのリストを配列に提供します。 この例では、URLとファイルヘルパーを自動ロードしています。
$autoload['helper'] = array('url', 'file');
- カスタム構成ファイル-これらのファイルは、カスタム構成ファイルを作成した場合にのみ使用することを目的としています。 それ以外の場合は、空白のままにします。 次に、複数の構成ファイルを自動ロードする方法の例を示します。
$autoload['config'] = array('config1', 'config2');
- 言語ファイル-言語ファイルのリストであり、自動ロードされる必要があります。 以下の例を見てください。 CodeIgniterによって自動ロードされるように、以下に示すように配列内の言語のリストを提供します。 ファイルの「_lang」部分を含めないでください。 たとえば、「codeigniter_lang.php」はarray( 'codeigniter')として参照されます。
- モデル-モデルファイルのリストであり、自動ロードする必要があります。 CodeIgniterによって自動ロードされる以下のように、配列内のモデルのリストを提供します。 以下は、複数のモデルファイルを自動ロードする方法の例です。
$autoload['model'] = array('first_model', 'second_model');
CodeIgniter-データベースの操作
他のフレームワークと同様に、データベースと頻繁にやり取りする必要があり、CodeIgniterはこの作業を簡単にします。 データベースと対話するための豊富な機能セットを提供します。
このセクションでは、CRUD(作成、読み取り、更新、削除)機能がCodeIgniterでどのように機能するかを理解します。 stud テーブルを使用して、 stud テーブルのデータを選択、更新、削除、および挿入します。
テーブル名:スタッド
roll_no
int(11)
name
varchar(30)
データベースへの接続
私たちは次の2つの方法でデータベースに接続できます-
- 自動接続-ファイルapplication/config/autoload.phpを使用して自動接続を行うことができます。 自動接続は、各ページのデータベースをロードします。 以下に示すように、データベースライブラリを追加するだけです-
$autoload['libraries'] = array(‘database’);
- 手動接続-一部のページのみのデータベース接続が必要な場合は、手動で接続できます。 任意のクラスに次の行を追加して、データベースに手動で接続できます。
$this->load->database();
ここでは、すべてがデータベース構成ファイルapplication/config/database.phpに設定されているため、引数を渡していません。
レコードを挿入する
データベースにレコードを挿入するには、次の表に示すように、insert()関数を使用します-
Syntax | insert([$table = ''[, $set = NULL[, $escape = NULL]]]) |
Parameters |
|
Returns | TRUE on success, FALSE on failure |
Return Type | bool |
次の例は、 stud テーブルにレコードを挿入する方法を示しています。 $ dataはデータを設定した配列で、このデータを stud テーブルに挿入するには、この配列を2 ^ nd ^引数で挿入関数に渡すだけです。
$data = array(
'roll_no' => ‘1’,
'name' => ‘Virat’
);
$this->db->insert("stud", $data);
レコードを更新する
データベースのレコードを更新するには、以下の表に示すように、* set()および where()関数とともに update()*関数を使用します。 * set()*関数は、更新するデータを設定します。
Syntax | set($key[, $value = ''[, $escape = NULL]]) |
Parameters |
|
Returns | CI_DB_query_builder instance (method chaining) |
Return Type | CI_DB_query_builder |
- where()*関数は、更新するレコードを決定します。
Syntax | where($key[, $value = NULL[, $escape = NULL]]) |
Parameters |
|
Returns | DB_query_builder instance |
Return Type | object |
最後に、* update()*関数はデータベース内のデータを更新します。
Syntax | update([$table = ''[, $set = NULL[, $where = NULL[, $limit = NULL]]]]) |
Parameters |
|
Returns | TRUE on success, FALSE on failure |
Return Type | bool |
$data = array(
'roll_no' => ‘1’,
'name' => ‘Virat’
);
$this->db->set($data);
$this->db->where("roll_no", ‘1’);
$this->db->update("stud", $data);
レコードを削除する
データベース内のレコードを削除するには、次の表に示すようにdelete()関数が使用されます-
Syntax | delete([$table = '[, $where = '[, $limit = NULL[, $reset_data = TRUE]]]]) |
Parameters |
|
Returns | CI_DB_query_builder instance (method chaining) or FALSE on failure |
Return Type | mixed |
次のコードを使用して、 stud テーブルのレコードを削除します。 最初の引数はレコードを削除するテーブルの名前を示し、2番目の引数は削除するレコードを決定します。
$this->db->delete("stud", "roll_no = 1");
レコードを選択する
データベース内のレコードを選択するには、次の表に示すように、 get 関数が使用されます-
Syntax | get([$table = ''[, $limit = NULL[, $offset = NULL]]]) |
Parameters |
|
Returns | CI_DB_result instance (method chaining) |
Return Type | CI_DB_result |
次のコードを使用して、データベースからすべてのレコードを取得します。 最初のステートメントは、「スタッド」テーブルからすべてのレコードをフェッチし、$ queryオブジェクトに保存されるオブジェクトを返します。 2番目のステートメントは、$ queryオブジェクトで* result()*関数を呼び出して、すべてのレコードを配列として取得します。
$query = $this->db->get("stud");
$data['records'] = $query->result();
接続を閉じる
次のコードを実行することにより、データベース接続を手動で閉じることができます-
$this->db->close();
例
*Stud_controller.php* というコントローラークラスを作成し、 *application/controller/Stud_controller.php* に保存します。
これは完全な例です。ここでは、上記のすべての操作が実行されます。 次の例を実行する前に、この章の冒頭で説明したようにデータベースとテーブルを作成し、 application/config/database.php に保存されているデータベース構成ファイルに必要な変更を加えます。
<?php
class Stud_controller extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->helper('url');
$this->load->database();
}
public function index() {
$query = $this->db->get("stud");
$data['records'] = $query->result();
$this->load->helper('url');
$this->load->view('Stud_view',$data);
}
public function add_student_view() {
$this->load->helper('form');
$this->load->view('Stud_add');
}
public function add_student() {
$this->load->model('Stud_Model');
$data = array(
'roll_no' => $this->input->post('roll_no'),
'name' => $this->input->post('name')
);
$this->Stud_Model->insert($data);
$query = $this->db->get("stud");
$data['records'] = $query->result();
$this->load->view('Stud_view',$data);
}
public function update_student_view() {
$this->load->helper('form');
$roll_no = $this->uri->segment('3');
$query = $this->db->get_where("stud",array("roll_no"=>$roll_no));
$data['records'] = $query->result();
$data['old_roll_no'] = $roll_no;
$this->load->view('Stud_edit',$data);
}
public function update_student(){
$this->load->model('Stud_Model');
$data = array(
'roll_no' => $this->input->post('roll_no'),
'name' => $this->input->post('name')
);
$old_roll_no = $this->input->post('old_roll_no');
$this->Stud_Model->update($data,$old_roll_no);
$query = $this->db->get("stud");
$data['records'] = $query->result();
$this->load->view('Stud_view',$data);
}
public function delete_student() {
$this->load->model('Stud_Model');
$roll_no = $this->uri->segment('3');
$this->Stud_Model->delete($roll_no);
$query = $this->db->get("stud");
$data['records'] = $query->result();
$this->load->view('Stud_view',$data);
}
}
?>
*Stud_Model.php* というモデルクラスを作成し、 *application/models/Stud_Model.php* に保存します。
<?php
class Stud_Model extends CI_Model {
function __construct() {
parent::__construct();
}
public function insert($data) {
if ($this->db->insert("stud", $data)) {
return true;
}
}
public function delete($roll_no) {
if ($this->db->delete("stud", "roll_no = ".$roll_no)) {
return true;
}
}
public function update($data,$old_roll_no) {
$this->db->set($data);
$this->db->where("roll_no", $old_roll_no);
$this->db->update("stud", $data);
}
}
?>
*Stud_add.php* という名前のビューファイルを作成し、 *application/views/Stud_add.php* に保存します。
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>Students Example</title>
</head>
<body>
<?php
echo form_open('Stud_controller/add_student');
echo form_label('Roll No.');
echo form_input(array('id'=>'roll_no','name'=>'roll_no'));
echo "<br/>";
echo form_label('Name');
echo form_input(array('id'=>'name','name'=>'name'));
echo "<br/>";
echo form_submit(array('id'=>'submit','value'=>'Add'));
echo form_close();
?>
</body>
</html>
*Stud_edit.php* という名前のビューファイルを作成し、 *application/views/Stud_edit.php* に保存します。
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>Students Example</title>
</head>
<body>
<form method = "" action = "">
<?php
echo form_open('Stud_controller/update_student');
echo form_hidden('old_roll_no',$old_roll_no);
echo form_label('Roll No.');
echo form_input(array('id'⇒'roll_no',
'name'⇒'roll_no','value'⇒$records[0]→roll_no));
echo "
";
echo form_label('Name');
echo form_input(array('id'⇒'name','name'⇒'name',
'value'⇒$records[0]→name));
echo "
";
echo form_submit(array('id'⇒'sub mit','value'⇒'Edit'));
echo form_close();
?>
</form>
</body>
</html>
*Stud_view.php* というビューファイルを作成し、 *application/views/Stud_view.php* に保存します。
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>Students Example</title>
</head>
<body>
<a href = "<?php echo base_url(); ?>
index.php/stud/add_view">Add</a>
<table border = "1">
<?php
$i = 1;
echo "<tr>";
echo "<td>Sr#</td>";
echo "<td>Roll No.</td>";
echo "<td>Name</td>";
echo "<td>Edit</td>";
echo "<td>Delete</td>";
echo "<tr>";
foreach($records as $r) {
echo "<tr>";
echo "<td>".$i++."</td>";
echo "<td>".$r->roll_no."</td>";
echo "<td>".$r->name."</td>";
echo "<td><a href = '".base_url()."index.php/stud/edit/"
.$r->roll_no."'>Edit</a></td>";
echo "<td><a href = '".base_url()."index.php/stud/delete/"
.$r->roll_no."'>Delete</a></td>";
echo "<tr>";
}
?>
</table>
</body>
</html>
*application/config/routes.php* のルートファイルに次の変更を加え、ファイルの最後に次の行を追加します。
$route['stud'] = "Stud_controller";
$route['stud/add'] = 'Stud_controller/add_student';
$route['stud/add_view'] = 'Stud_controller/add_student_view';
$route['stud/edit/(\d+)'] = 'Stud_controller/update_student_view/$1';
$route['stud/delete/(\d+)'] = 'Stud_controller/delete_student/$1';
次に、ブラウザで次のURLにアクセスして、この例を実行します。 yoursite.comをURLに置き換えます。
http://yoursite.com/index.php/stud
CodeIgniter-ライブラリ
CodeIgniterフレームワークの重要な部分はそのライブラリです。 ライブラリの豊富なセットを提供し、アプリケーションの開発速度を間接的に向上させます。 システムライブラリはsystem/librariesにあります。 必要なのは、使用したいライブラリをロードすることだけです。 ライブラリは以下に示すようにロードすることができます-
$this->load->library('class name');
*class name* は、ロードするライブラリの名前です。 複数のライブラリをロードする場合は、以下に示すように、* library()*関数に引数として配列を渡すだけです-
$this->load->library(array('email', 'table'));
ライブラリクラス
ライブラリクラスは system/libraries にあります。 各クラスには、開発作業を簡素化するためのさまざまな機能があります。 次の表に、ライブラリクラスの名前とその説明を示します。
以下は、最も一般的に使用されるライブラリクラスです。
S.N. | Library Class & Description |
---|---|
1 |
Benchmarking Class ベンチマーククラスは常にアクティブで、マークされた2つのポイント間の時間差を計算できます。 |
2 |
Caching Class このクラスはページをキャッシュして、ページ速度にすばやくアクセスします。 |
3 |
Calendaring Class このクラスを使用すると、カレンダーを動的に作成できます。 |
4 |
Shopping Cart Class このクラスを使用すると、ショッピングカートにアイテムを追加または削除できます。 アイテムはセッションに保存され、ユーザーがサイトを閲覧するまでアクティブのままになります。 |
5 |
Config Class このクラスを使用して、構成設定を取得できます。 このクラスは自動的に初期化されます。 |
6 |
Email Class このクラスは、メールの送信や返信などのメール関連機能を提供します。 |
7 |
Encryption Class このクラスは、双方向のデータ暗号化機能を提供します。 |
8 |
File Uploading Class このクラスは、ファイルのアップロードに関連する機能を提供します。 アップロードするファイルの種類、ファイルのサイズなど、さまざまな設定を設定できます。 |
9 |
Form Validation Class このクラスは、フォームを検証するためのさまざまな機能を提供します。 |
10 |
FTP Class このクラスは、ファイルを転送してサーバーを削除したり、サーバー上のファイルを移動、名前変更、削除するなど、さまざまなFTP関連機能を提供します。 |
11 |
Image Manipulation Class このクラスの助けを借りて、サイズ変更、サムネイルの作成、トリミング、回転、透かしなどの画像の操作を行うことができます。 |
12 |
Input Class このクラスは、セキュリティ上の理由から入力データを前処理します。 |
13 |
Language Class このクラスは国際化に使用されます。 |
14 |
Loader Class このクラスは、Viewファイル、ドライバー、ヘルパー、モデルなどの要素をロードします。 |
15 |
Migrations Class このクラスは、データベースの移行に関連する機能を提供します。 |
16 |
Output Class このクラスは、出力をブラウザに送信し、そのWebページをキャッシュします。 |
17 |
Pagination Class このクラスは、ページネーション機能をWebページに追加します。 |
18 |
Template Parser Class テンプレートパーサークラスは、ビューファイル内に含まれる擬似変数の単純なテキスト置換を実行できます。 単純な変数または変数タグのペアを解析できます。 |
19 |
Security Class このクラスには、XSSフィルタリング、CSRFなどのセキュリティ関連の機能が含まれます。 |
20 |
Session Library このクラスは、アプリケーションのセッションを維持する機能を提供します。 |
21 |
HTML Table このクラスは、配列またはデータベースの結果からHTMLテーブルを自動生成するために使用されます。 |
22 |
Trackback Class トラックバッククラスは、トラックバックデータを送受信できる機能を提供します。 |
23 |
Typography Class Typographyクラスは、テキストのフォーマットを支援するメソッドを提供します。 |
24 |
Unit Testing Class このクラスは、アプリケーションを単体テストし、結果を生成する機能を提供します。 |
25 |
URI Class URIクラスは、URI文字列から情報を取得するのに役立つメソッドを提供します。 URIルーティングを使用する場合、再ルーティングされたセグメントに関する情報も取得できます。 |
26 |
User Agent Class ユーザーエージェントクラスは、ブラウザ、モバイルデバイス、またはサイトにアクセスしているロボットに関する情報の識別に役立つ機能を提供します。 さらに、リファラー情報、言語、およびサポートされている文字セット情報を取得できます。 |
27 |
XML-RPC and XML-RPC Server Classes CodeIgniterのXML-RPCクラスを使用すると、リクエストを別のサーバーに送信したり、独自のXML-RPCサーバーをセットアップしてリクエストを受信したりできます。 |
28 |
Zip Encoding Class このクラスは、データのzipアーカイブを作成するために使用されます。 |
ライブラリを作成する
CodeIgniterには system/libraries フォルダーにある豊富なライブラリーセットがありますが、CodeIgniterはシステムライブラリーに限定されず、 application/libraries フォルダーに保存できる独自のライブラリーも作成できます。 ライブラリは3つの方法で作成できます。
- 新しいライブラリを作成
- ネイティブライブラリを拡張する
- ネイティブライブラリを置き換える
新しいライブラリを作成
新しいライブラリを作成する際には、次の点に留意する必要があります-
ファイルの名前は大文字で始める必要があります。 Mylibrary.php
クラス名は大文字で始まる必要があります。 クラスMylibrary
クラスの名前とファイルの名前は一致する必要があります。
*Mylibrary.php*
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Mylibrary {
public function some_function() {
}
}
/*End of file Mylibrary.php*/
カスタムライブラリの読み込み
上記のライブラリは、コントローラで次の行を実行するだけでロードできます。
$this->load->library(‘mylibrary’);
mylibraryはライブラリの名前であり、大文字でも小文字でも記述できます。 「.php」拡張子なしでライブラリの名前を使用します。 ライブラリをロードした後、以下に示すようにそのクラスの関数を呼び出すこともできます。
$this->mylibrary->some_function();
ネイティブライブラリを拡張する
CodeIgniterが提供するライブラリに独自の機能を追加する必要がある場合があります。 CodeIgniterは、ネイティブライブラリを拡張し、独自の機能を追加できる機能を提供します。 これを実現するには、ネイティブライブラリクラスのクラスを拡張する必要があります。 たとえば、メールライブラリを拡張する場合は、以下に示すように行うことができます-
Class MY_Email extends CI_Email {
}
ここで、上記の例では、MY_EmailクラスはネイティブライブラリのメールクラスCI_Emailを拡張しています。 このライブラリは、電子メールライブラリをロードする標準的な方法でロードできます。 上記のコードをMy_Email.phpファイルに保存します
ネイティブライブラリを置き換える
状況によっては、ネイティブライブラリを機能する方法で使用したくない場合や、独自の方法に置き換えたい場合があります。 これは、ネイティブライブラリを置き換えることで実行できます。 これを実現するには、ネイティブライブラリで名前が付けられているのと同じクラス名を付けるだけです。 たとえば、* Emailクラス*を置き換える場合は、以下に示すコードを使用します。 Email.php でファイル名を保存し、 CI_Email にクラス名を付けます。
*Email.php*
Class CI_Email {
}
CodeIgniter-エラー処理
多くの場合、アプリケーションの使用中にエラーが発生します。 エラーが適切に処理されない場合、ユーザーにとって非常に迷惑です。 CodeIgniterは、簡単なエラー処理メカニズムを提供します。
エラーメッセージは開発段階で簡単に解決できるため、アプリケーションが本番モードではなく開発モードの場合に、メッセージを表示する必要があります。
以下の行を index.php ファイルから変更することにより、アプリケーションの環境を変更できます。 これは何にでも設定できますが、通常、この目的に使用される3つの値(開発、テスト、生産)があります。
define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
異なる環境では、異なるレベルのエラー報告が必要になります。 デフォルトでは、開発モードではエラーとテストが表示され、ライブモードではエラーが非表示になります。 CodeIgniterは、エラーを処理するために以下に示す3つの関数を提供します。
- * show_error()*関数は、画面の上部にエラーをHTML形式で表示します。
Syntax | show_error($message, $status_code, $heading = 'An Error Was Encountered') |
Parameters |
|
Return Type | mixed |
- * show_404()*関数は、存在しないページにアクセスしようとするとエラーを表示します。
Syntax | show_404($page = , $log_error = TRUE) |
Parameters |
|
Return Type | void |
- * log_message()*関数は、ログメッセージを書き込むために使用されます。 これは、カスタムメッセージを作成する場合に便利です。
Syntax | log_message($level, $message, $php_error = FALSE) |
Parameters |
|
Return Type | void |
ロギングは application/config/config.php ファイルで有効にできます。 以下に、しきい値を設定できるconfig.phpファイルのスクリーンショットを示します。
/*
|--------------------------------------------------------------------------------
| Error Logging Threshold
|--------------------------------------------------------------------------------
| You can enable error logging by setting a threshold over zero. The
| threshold determines what gets logged. Threshold options are:
|
| 0 = Disable logging, Error logging TURNED OFF
| 1 = Error Message (including PHP errors)
| 2 = Debug Message
| 3 = Informational Messages
| 4 = All Messages
|
| You can also pass an array with threshold levels to show individual error types
|
| array(2) = Debug Message, without Error Messages
| For a live site you'll usually only enable Errors (1) to be logged otherwise
| your log files will fill up very fast.
|
*/
$config['log_threshold'] = 0;
ログメッセージは application/log/ にあります。 ログファイルを有効にする前に、このディレクトリが書き込み可能であることを確認してください。
エラーメッセージのさまざまなテンプレートは、 application/views/errors/cli または application/views/errors/html にあります。
CodeIgniter-ファイルのアップロード
File Uploadingクラスを使用すると、ファイルをアップロードできます。また、アップロードするファイルのタイプとサイズを制限できます。 CodeIgniterでのファイルのアップロードプロセスを理解するには、所定の例に示されている手順に従ってください。
例
次のコードをコピーして、 application/view/Upload_form.php に保存します。
<html>
<head>
<title>Upload Form</title>
</head>
<body>
<?php echo $error;?>
<?php echo form_open_multipart('upload/do_upload');?>
<form action = "" method = "">
<input type = "file" name = "userfile" size = "20"/>
<br/><br/>
<input type = "submit" value = "upload"/>
</form>
</body>
</html>
以下のコードをコピーして、 application/view/Upload_success.php に保存します
<html>
<head>
<title>Upload Form</title>
</head>
<body>
<h3>Your file was successfully uploaded!</h3>
<ul>
<?phpforeach ($upload_data as $item => $value):?>
<li><?php echo $item;?>: <?php echo $value;?></li>
<?phpendforeach; ?>
</ul>
<p><?php echo anchor('upload', 'Upload Another File!'); ?></p>
</body>
</html>
以下のコードをコピーして、 application/controllers/Upload.php に保存します。 CodeIgniterのルートに「 uploads 」フォルダーを作成します。 アプリケーションフォルダーの親ディレクトリ。
<?php
class Upload extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->helper(array('form', 'url'));
}
public function index() {
$this->load->view('upload_form', array('error' => ' ' ));
}
public function do_upload() {
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 100;
$config['max_width'] = 1024;
$config['max_height'] = 768;
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload('userfile')) {
$error = array('error' => $this->upload->display_errors());
$this->load->view('upload_form', $error);
}
else {
$data = array('upload_data' => $this->upload->data());
$this->load->view('upload_success', $data);
}
}
}
?>
*application/config/routes.php* のルートファイルに次の変更を加え、ファイルの最後に次の行を追加します。
$route['upload'] = 'Upload';
次に、ブラウザで次のURLにアクセスして、この例を実行します。 yoursite.comをURLに置き換えます。
http://yoursite.com/index.php/upload
それは次の画面を生成します-
ファイルを正常にアップロードした後、次の画面が表示されます-
CodeIgniter-メールの送信
CodeIgniterでメールを送信するのははるかに簡単です。 CodeIgniterで電子メールに関する設定も構成します。 CodeIgniterは、メールを送信するための次の機能を提供します-
- 複数のプロトコル-メール、Sendmail、およびSMTP
- SMTPのTLSおよびSSL暗号化
- 複数の受信者
- CCおよびBCC
- HTMLまたはプレーンテキストメール
- 添付ファイル
- ワードラッピング
- 優先順位
- BCCバッチモード。大きな電子メールリストを小さなBCCバッチに分割できます。 *メールデバッグツール
電子メールクラスには、電子メールの送信作業を簡素化する次の機能があります。
S.N. | Syntax | Parameters | Return | Return Type |
---|---|---|---|---|
1 | from($from[, $name = ''[, $return_path = NULL]]) |
|
CI_Email instance (method chaining) | CI_Email |
2 | reply_to($replyto[, $name = '']) |
$replyto (string) − E-mail address for replies
|
CI_Email instance (method chaining) | CI_Email |
2 | to($to) | $to (mixed) − Comma-delimited string or an array of e-mail addresses | CI_Email instance (method chaining) | CI_Email |
3 | cc($cc) | *$cc *(mixed) − Comma-delimited string or an array of e-mail addresses | CI_Email instance (method chaining) | CI_Email |
4 | bcc($bcc[, $limit = '']) |
|
CI_Email instance (method chaining) | CI_Email |
5 | subject($subject) | $subject (string) − E-mail subject line | CI_Email instance (method chaining) | CI_Email |
6 | message($body) | $body (string) − E-mail message body | CI_Email instance (method chaining) | CI_Email |
7 | set_alt_message($str) | *$str *(string) − Alternative e-mail message body | CI_Email instance (method chaining) | CI_Email |
8 | set_header($header, $value) |
|
CI_Email instance (method chaining) | CI_Email |
9 | clear([$clear_attachments = FALSE]) | $clear_attachments (bool) – Whether or not to clear attachments | CI_Email instance (method chaining) | CI_Email |
10 | send([$auto_clear = TRUE]) | *$auto_clear *(bool) − Whether to clear message data automatically | CI_Email instance (method chaining) | CI_Email |
11 | attach($filename[, $disposition = [, $newname = NULL[, $mime = ]]]) |
|
CI_Email instance (method chaining) | CI_Email |
12 | attachment_cid($filename) | *$filename *(string) − Existing attachment filename | Attachment Content-ID or FALSE if not found | string |
メールを送る
CodeIgniterを使用して電子メールを送信するには、まず、次を使用して電子メールライブラリをロードする必要があります-
$this->load->library('email');
ライブラリをロードした後、次の関数を実行して、電子メールを送信するために必要な要素を設定します。* from()関数は、電子メールの送信元および to()関数の使用元を設定するために使用されます-電子メールの送信先。 * subject()*および message()*関数は、電子メールの件名とメッセージを設定するために使用されます。
$this->email->from('[email protected]', 'Your Name');
$this->email->to('[email protected]');
$this->email->subject('Email Test');
$this->email->message('Testing the email class.');
その後、以下に示す* send()*関数を実行してメールを送信します。
$this->email->send();
例
コントローラーファイル Email_controller.php を作成し、 application/controller/Email_controller.php に保存します。
<?php
class Email_controller extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->library('session');
$this->load->helper('form');
}
public function index() {
$this->load->helper('form');
$this->load->view('email_form');
}
public function send_mail() {
$from_email = "[email protected]";
$to_email = $this->input->post('email');
//Load email library
$this->load->library('email');
$this->email->from($from_email, 'Your Name');
$this->email->to($to_email);
$this->email->subject('Email Test');
$this->email->message('Testing the email class.');
//Send mail
if($this->email->send())
$this->session->set_flashdata("email_sent","Email sent successfully.");
else
$this->session->set_flashdata("email_sent","Error in sending Email.");
$this->load->view('email_form');
}
}
?>
*email_form.php* というビューファイルを作成し、 *application/views/email_form.php* に保存します。
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>CodeIgniter Email Example</title>
</head>
<body>
<?php
echo $this->session->flashdata('email_sent');
echo form_open('/Email_controller/send_mail');
?>
<input type = "email" name = "email" required/>
<input type = "submit" value = "SEND MAIL">
<?php
echo form_close();
?>
</body>
</html>
*application/config/routes.php* の *routes.php* ファイルに変更を加え、ファイルの最後に次の行を追加します。
$route['email'] = 'Email_Controller';
次のリンクにアクセスして、上記の例を実行します。 yoursite.comをサイトのURLに置き換えます。
http://yoursite.com/index.php/email
CodeIgniter-フォーム検証
検証は、Webアプリケーションを構築する際の重要なプロセスです。 取得するデータが適切であり、保存または処理するのに有効であることを保証します。 CodeIgniterはこのタスクを非常に簡単にしました。 簡単な例でこのプロセスを理解しましょう。
例
ビューファイル myform.php を作成し、以下のコードを application/views/myform.php に保存します。 このページには、ユーザーが名前を送信できるフォームが表示されます。このページを検証して、送信中に空にならないようにします。
<html>
<head>
<title>My Form</title>
</head>
<body>
<form action = "" method = "">
<?php echo validation_errors(); ?>
<?php echo form_open('form'); ?>
<h5>Name</h5>
<input type = "text" name = "name" value = "" size = "50"/>
<div><input type = "submit" value = "Submit"/></div>
</form>
</body>
</html>
ビューファイル formsuccess.php を作成し、 application/views/formsuccess.php に保存します。 フォームが正常に検証されると、このページが表示されます。
<html>
<head>
<title>My Form</title>
</head>
<body>
<h3>Your form was successfully submitted!</h3>
<p><?php echo anchor('form', 'Try it again!'); ?></p>
</body>
</html>
コントローラーファイル Form.php を作成し、 application/controller/Form.php に保存します。 このフォームは、適切に検証されていないか、 formsuccess.php ページにリダイレクトされていない場合、エラーを表示します。
<?php
class Form extends CI_Controller {
public function index() {
/*Load form helper*/
$this->load->helper(array('form'));
/*Load form validation library*/
$this->load->library('form_validation');
/*Set validation rule for name field in the form*/
$this->form_validation->set_rules('name', 'Name', 'required');
if ($this->form_validation->run() == FALSE) {
$this->load->view('myform');
}
else {
$this->load->view('formsuccess');
}
}
}
?>
*application/config/routes.php* に次の行を追加します。
$route['validation'] = 'Form';
ブラウザで次のURLにアクセスして、この例を実行します。 このURLは、サイトによって異なる場合があります。
http://yoursite.com/index.php/validation
それは次の画面を生成します-
コントローラーに検証を追加しました-フォームを送信する前に*名前*は必須フィールドです。 したがって、名前フィールドに何も入力せずに送信ボタンをクリックすると、以下の画面に示すように、送信する前に名前を入力するように求められます。
名前を正常に入力すると、次のように画面にリダイレクトされます。
上記の例では、必要なルール設定を使用しています。 CodeIgniterには、以下で説明する多くのルールがあります。
検証ルールのリファレンス
以下は、使用可能なすべてのネイティブルールのリストです-
以下に、最も一般的に使用されるネイティブルールのリストを示します。
Rule | Parameter | Description | Example |
---|---|---|---|
required | No | Returns FALSE if the form element is empty. | |
matches | Yes | Returns FALSE if the form element does not match the one in the parameter. | matches[form_item] |
regex_match | Yes | Returns FALSE if the form element does not match the regular expression. | regex_match[/regex/] |
differs | Yes | Returns FALSE if the form element does not differ from the one in the parameter. | differs[form_item] |
is_unique | Yes | Returns FALSE if the form element is not unique to the table and field name in the parameter. Note − This rule requires Query Builder to be enabled in order to work. | is_unique[table.field] |
min_length | Yes | Returns FALSE if the form element is shorter than the parameter value. | min_length[3] |
max_length | Yes | Returns FALSE if the form element is longer than the parameter value. | max_length[12] |
exact_length | Yes | Returns FALSE if the form element is not exactly the parameter value. | exact_length[8] |
greater_than | Yes | Returns FALSE if the form element is less than or equal to the parameter value or not numeric. | greater_than[8] |
greater_than_equal_to | Yes | Returns FALSE if the form element is less than the parameter value, or not numeric. | greater_than_equal_to[8] |
less_than | Yes | Returns FALSE if the form element is greater than or equal to the parameter value or not numeric. | less_than[8] |
less_than_equal_to | Yes | Returns FALSE if the form element is greater than the parameter value, or not numeric. | less_than_equal_to[8] |
in_list | Yes | Returns FALSE if the form element is not within a predetermined list. | in_list[red,blue,green] |
alpha | No | Returns FALSE if the form element contains anything other than alphabetical characters. | |
alpha_numeric | No | Returns FALSE if the form element contains anything other than alphanumeric characters. | |
alpha_numeric_spaces | No | Returns FALSE if the form element contains anything other than alphanumeric characters or spaces. Should be used after trim to avoid spaces at the beginning or end | |
alpha_dash | No | Returns FALSE if the form element contains anything other than alphanumeric characters, underscores or dashes. | |
numeric | No | Returns FALSE if the form element contains anything other than numeric characters. | |
integer | No | Returns FALSE if the form element contains anything other than an integer. | |
decimal | No | Returns FALSE if the form element contains anything other than a decimal number. | |
is_natural | No | Returns FALSE if the form element contains anything other than a natural number − 0, 1, 2, 3, etc. | |
is_natural_no_zero | No | Returns FALSE if the form element contains anything other than a natural number, but not zero − 1, 2, 3, etc. | |
valid_url | No | Returns FALSE if the form element does not contain a valid URL. | |
valid_email | No | Returns FALSE if the form element does not contain a valid email address. | |
valid_emails | No | Returns FALSE if any value provided in a comma-separated list is not a valid email. | |
valid_ip | No | Returns FALSE if the supplied IP is not valid. Accepts an optional parameter of ‘ipv4’ or ‘ipv6’ to specify an IP format. | |
valid_base64 | No | Returns FALSE if the supplied string contains anything other than valid Base64 characters. |
CodeIgniter-セッション管理
ウェブサイトを構築するとき、ユーザーのアクティビティと状態を追跡する必要があることが多く、そのためには*セッション*を使用する必要があります。 CodeIgniterには、この目的のためのセッションクラスがあります。
セッションの初期化
セッションデータはサイト全体でグローバルに利用できますが、これらのデータを使用するには、まずセッションを初期化する必要があります。 これを行うには、コンストラクタで次の行を実行します。
$this->load->library('session');
セッションライブラリをロードした後、次のようにセッションオブジェクトを使用するだけです。
$this->session
セッションデータを追加する
PHPでは、 $ _ SESSION 配列を使用して、以下に示すようにセッション内のデータを設定します。
$_SESSION[‘key’] = value;
「 key 」は配列のキーで、 value は等号の右側に割り当てられます。
以下に示すように、CodeIgniterでも同じことができます。
$this->session->set_userdata('some_name', 'some_value');
- set_userdata()関数は2つの引数を取ります。 最初の引数 *some_name はセッション変数の名前で、その下に some_value が保存されます。
- set_userdata()*関数は、以下に示すように値を格納するために配列を渡すことができる別の構文もサポートしています。
$newdata = array(
'username' => 'johndoe',
'email' => '[email protected]',
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
セッションデータを削除する
PHPでは、以下に示すように* unset()*関数を使用してセッションに保存されたデータを削除できます。
unset($_SESSION[‘some_name’]);
CodeIgniterでのセッションデータの削除は、以下に示すように非常に簡単です。 以下の* unset_userdata()*関数のバージョンは、セッションから1つの変数のみを削除します。
$this->session->unset_userdata('some_name');
セッションからさらに値を削除したい場合、または配列全体を削除したい場合は、以下のバージョンの* unset_userdata()*関数を使用できます。
$this->session->unset_userdata($array_items);
セッションデータの取得
セッションでデータを設定した後、以下に示すようにそのデータを取得することもできます。 * Userdata()関数がこの目的に使用されます。 アクセスしようとしているデータが利用できない場合、この関数は *NULL を返します。
$name = $this->session->userdata('name');
例
*Session_controller.php* というコントローラークラスを作成し、 *application/controller/Session_controller.php* に保存します。
<?php
class Session_controller extends CI_Controller {
public function index() {
//loading session library
$this->load->library('session');
//adding data to session
$this->session->set_userdata('name','virat');
$this->load->view('session_view');
}
public function unset_session_data() {
//loading session library
$this->load->library('session');
//removing session data
$this->session->unset_userdata('name');
$this->load->view('session_view');
}
}
?>
*session_view.php* という名前のビューファイルを作成し、 *application/views/session_view.php* に保存します。
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>CodeIgniter Session Example</title>
</head>
<body>
Welcome <?php echo $this->session->userdata('name'); ?>
<br>
<a href = 'http://localhost:85/CodeIgniter-3.0.1/CodeIgniter3.0.1/index.php/sessionex/unset'>
Click Here</a> to unset session data.
</body>
</html>
*application/config/routes.php* の *routes.php* ファイルに変更を加え、ファイルの最後に次の行を追加します。
$route['sessionex'] = 'Session_Controller';
次のアドレスを使用して上記の例を実行します。 yoursite.com をサイトのURLに置き換えます。
http://yoursite.com/index.php/sessionex
CodeIgniter-Flashdata
Webアプリケーションの構築中に、データを一度だけ保存する必要があり、その後そのデータを削除する必要があります。 たとえば、エラーメッセージまたは情報メッセージを表示する場合。 PHPでは、手動で行う必要がありますが、CodeIgniterによりこの作業が簡単になりました。 CodeIgniterでは、flashdataは次のリクエストまでしか使用できず、自動的に削除されます。
Flashdataを追加
以下に示すように、単にフラッシュデータを保存できます。
$this->session->mark_as_flash('item');
- * mark_as_flash()*関数はこの目的で使用され、保存される値の引数を1つだけ取ります。 配列を渡して複数の値を保存することもできます。
- * set_flashdata()*関数も使用できます。これは、以下に示すように、名前と値の2つの引数を取ります。 配列を渡すこともできます。
$this->session->set_flashdata('item','value');
Flashdataを取得する
Flashdataは、以下に示すように、フェッチするアイテムの1つの引数を取るflashdata()関数を使用して取得できます。 flashdata()関数は、フラッシュデータのみを取得し、他のデータは取得しないようにします。
$this->session->flashdata('item');
引数を渡さない場合、同じ関数で配列を取得できます。
例
*FlashData_Controller.php* というクラスを作成し、 *application/controller/FlashData_Controller.php* に保存します。
<?php
class FlashData_Controller extends CI_Controller {
public function index() {
//Load session library
$this->load->library('session');
//redirect to home page
$this->load->view('flashdata_home');
}
public function add() {
//Load session library
$this->load->library('session');
$this->load->helper('url');
//add flash data
$this->session->set_flashdata('item','item-value');
//redirect to home page
redirect('flashdata');
}
}
?>
*flashdata_home.php* というビューファイルを作成し、 *application/views/flashdata_home.php* に保存します。
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>CodeIgniter Flashdata Example</title>
</head>
<body>
Flash Data Example
<h2><?php echo $this->session->flashdata('item'); ?></h2>
<a href = 'flashdata/add'>Click Here</a> to add flash data.
</body>
</html>
*application/config/routes.php* の *routes.php* ファイルに変更を加え、ファイルの最後に次の行を追加します。
$route['flashdata'] = 'FlashData_Controller';
$route['flashdata/add'] = 'FlashData_Controller/add';
次のリンクにアクセスして、上記の例を実行します。 yoursite.comをサイトのURLに置き換えます。
http://yoursite.com/index.php/flashdata
上記のURLにアクセスすると、次のような画面が表示されます。
「ここをクリック」リンクをクリックすると、次のような画面が表示されます。 この画面では、フラッシュデータ変数の値が表示されます。 ページを再度更新すると、上記のような画面が表示され、フラッシュデータ変数が自動的に削除されます。
CodeIgniter-Tempdata
特定の期間後にセッションに保存されたデータを削除したい状況では、CodeIgniterの tempdata 機能を使用してこれを行うことができます。
Tempdataを追加
データを tempdata として追加するには、* mark_as_tempdata()関数を使用する必要があります。 この関数は、 *tempdata として保存される2つの引数アイテムまたはアイテムを受け取り、それらのアイテムの有効期限は以下のとおりです。
//'item' will be erased after 300 seconds(5 minutes)
$this->session->mark_as_temp('item',300);
配列を渡して複数のデータを保存することもできます。 以下に保存されているすべてのアイテムは、300秒後に期限切れになります。
$this->session->mark_as_temp(array('item','item2'),300);
以下に示すように、各アイテムに異なる有効期限を設定することもできます。
//'item' will be erased after 300 seconds, while 'item2'
//will do so after only 240 seconds
$this->session->mark_as_temp(array(
'item'=>300,
'item2'=>240
));
Tempdataを取得する
- tempdata()*関数を使用してtempdataを取得できます。 この関数は、tempdataのみを取得し、他のデータは取得しないようにします。 以下の例を見て、tempdataを取得する方法を確認してください。 * tempdata()*関数は、取得するアイテムの1つの引数を取ります。
$this->session->tempdata('item');
引数を省略すると、既存のすべてのtempdataを取得できます。
Tempdataを削除
Tempdataは有効期限後に自動的に削除されますが、その前にtempdataを削除する場合は、削除するアイテムの引数を1つ取る* unset_tempdata()*関数を使用して、以下に示すように実行できます。
$this->session->unset_tempdata('item');
例
*Tempdata_controller.php* というクラスを作成し、 *application/controller/Tempdata_controller.php* に保存します。
<?php
class Tempdata_controller extends CI_Controller {
public function index() {
$this->load->library('session');
$this->load->view('tempdata_view');
}
public function add() {
$this->load->library('session');
$this->load->helper('url');
//tempdata will be removed after 5 seconds
$this->session->set_tempdata('item','item-value',5);
redirect('tempdata');
}
}
?>
*tempdata_view.php* というファイルを作成し、 *application/views/tempdata_view.php* に保存します
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>CodeIgniter Tempdata Example</title>
</head>
<body>
Temp Data Example
<h2><?php echo $this->session->tempdata('item'); ?></h2>
<a href = 'tempdata/add'>Click Here</a> to add temp data.
</body>
</html>
application/config/routes.phpの routes.php ファイルに変更を加え、ファイルの最後に次の行を追加します。
$route['tempdata'] = "Tempdata_controller";
$route['tempdata/add'] = "Tempdata_controller/add";
次のリンクにアクセスして、上記の例を実行します。 yoursite.comをサイトのURLに置き換えます。
http://yoursite.com/index.php/tempdata
上記のURLにアクセスすると、次のような画面が表示されます。
- 「ここをクリック」*リンクをクリックすると、次のような画面が表示されます。
この画面では、一時データ変数の値が表示されます。 一時データを5秒間設定したため、同じページを5秒後に再度更新すると、上記のような画面が表示され、一時データ変数は5秒後に自動的に削除されます。 5秒前に同じページを更新すると、期間が終了していないため、一時データは削除されません。
セッションの破棄
PHPでは、* session_destroy()*関数を使用してセッションを破棄し、CodeIgniterでは、以下に示すように関数を破棄できます。
$this->session->sess_destroy();
この関数を呼び出した後、 flashdata および tempdata を含むすべてのセッションデータは完全に削除され、元に戻すことはできません。
CodeIgniter-Cookie管理
Cookieは、クライアントのコンピューターに保存するためにWebサーバーから送信される小さなデータです。 CodeIgniterには、Cookie管理用の「Cookie Helper」というヘルパーが1つあります。
Syntax | set_cookie($name[, $value = ''[, $expire = '[, $domain = '[, $path = '/[, $prefix = '[, $secure = FALSE[, $httponly = FALSE]]]]]]]]) |
Parameters |
|
Return Type | void |
- set_cookie()*関数では、2つの方法を使用してすべての値を渡すことができます。 最初の方法では、配列のみを渡すことができ、2番目の方法では、個々のパラメーターも渡すことができます。
Syntax | get_cookie($index[, $xss_clean = NULL]]) |
Parameters |
|
Return | The cookie value or NULL if not found |
Return Type | mixed |
- get_cookie()*関数は、set_cookie()関数を使用して設定されたCookieを取得するために使用されます。
Syntax | delete_cookie($name[, $domain = ''[, $path = '/[, $prefix = ']]]]) |
Parameters |
|
Return Type | void |
- delete_cookie()*関数は、cookie()を削除するために使用されます。
例
*Cookie_controller.php* というコントローラーを作成し、 *application/controller/Cookie_controller.php* に保存します
<?php
class Cookie_controller extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->helper(array('cookie', 'url'));
}
public function index() {
set_cookie('cookie_name','cookie_value','3600');
$this->load->view('Cookie_view');
}
public function display_cookie() {
echo get_cookie('cookie_name');
$this->load->view('Cookie_view');
}
public function deletecookie() {
delete_cookie('cookie_name');
redirect('cookie/display');
}
}
?>
*Cookie_view.php* という名前のビューファイルを作成し、 *application/views/Cookie_view.php* に保存します。
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>CodeIgniter View Example</title>
</head>
<body>
<a href = 'display'>Click Here</a> to view the cookie.<br>
<a href = 'delete'>Click Here</a> to delete the cookie.
</body>
</html>
application/config/routes.phpのroutes.phpファイルを変更して、上記のコントローラーのルートを追加し、ファイルの最後に次の行を追加します。
$route['cookie'] = "Cookie_controller";
$route['cookie/display'] = "Cookie_controller/display_cookie";
$route['cookie/delete'] = "Cookie_controller/deletecookie";
その後、ブラウザで次のURLを実行して例を実行できます。
http://yoursite.com/index.php/cookie
次のスクリーンショットに示すような出力が生成されます。
CodeIgniter-共通機能
CodeIgniterライブラリ関数とヘルパー関数は、使用する前に初期化する必要がありますが、初期化する必要のない一般的な関数がいくつかあります。
これらの一般的な機能とその説明を以下に示します。
Syntax | is_php($version) |
Parameters | $version (string) − Version number |
Return | TRUE if the running PHP version is at least the one specified or FALSE if not |
Return Type | void |
Description | Determines if the PHP version being used is greater than the supplied version number. |
Syntax | is_really_writable($file) |
Parameters | $file (string) − File path |
Return | TRUE if the path is writable, FALSE if not |
Return Type | bool |
Description | checks to see if file is writable or not. |
Syntax | config_item($key) |
Parameters | *$key *(string) − Config item key |
Return | Configuration key value or NULL if not found |
Return Type | mixed |
Description | This function is used to get the configuration item |
Syntax | set_status_header($code[, $text = '']) |
Parameters |
|
Return | |
Return Type | void |
Description | This function permits you to manually set a server status header. |
Syntax | remove_invisible_characters($str[, $url_encoded = TRUE]) |
Parameters |
$str (string) − Input string
|
Return | Sanitized string |
Return Type | string |
Description | This function prevents inserting NULL characters between ASCII characters |
Syntax | html_escape($var) |
Parameters | $var (mixed) − Variable to escape (string or array) |
Return | HTML escaped string(s) |
Return Type | mixed |
Description | This function acts as a native PHP htmlspecialchars() function. |
Syntax | get_mimes() |
Return | An associative array of file types |
Return Type | array |
Description | This function returns a reference to the MIMEs array from application/config/mimes.php. |
Syntax | is_https() |
Return | TRUE if currently using HTTP-over-SSL, FALSE if not |
Return Type | bool |
Description | Returns TRUE if a secure (HTTPS) connection is used and FALSE in any other case (including non-HTTP requests). |
Syntax | is_cli() |
Return | TRUE if currently running under CLI, FALSE otherwise |
Return Type | bool |
Description | Returns TRUE if the application is run through the command line and FALSE if not. |
Syntax | function_usable($function_name) |
Parameters | $function_name (string) − Function name |
Return Type | bool |
Description | Returns TRUE if a function exists and is usable, FALSE otherwise. |
以下は、上記のすべての機能を示す例です。
例
ここでは、上記の機能を使用するコントローラーを1つだけ作成しました。 以下のコードをコピーして、 application/controller/CommonFun_Controller.php に保存します。
<?php
class CommonFun_Controller extends CI_Controller {
public function index() {
set_status_header(200);
echo is_php('5.3')."<br>";
var_dump(is_really_writable('./Form.php'));
echo config_item('language')."<br>";
echo remove_invisible_characters('This is a test','UTF8')."<br>";
$str = '< This > is \' a " test & string';
echo html_escape($str)."<br>";
echo "is_https():".var_dump(is_https())."<br>";
echo "is_cli():".var_dump(is_cli())."<br>";
var_dump(function_usable('test'))."<br>";
echo "get_mimes():".print_r(get_mimes())."<br>";
}
public function test() {
echo "Test function";
}
}
?>
application/config/routes.phpの routes.php ファイルを変更して、上記のコントローラーのルートを追加し、ファイルの最後に次の行を追加します。
$route['commonfunctions'] = 'CommonFun_Controller';
ブラウザーのアドレスバーに次のURLを入力して、例を実行します。
http://yoursite.com/index.php/commonfunctions
CodeIgniter-ページキャッシング
ページをキャッシュすると、ページの読み込み速度が向上します。 ページがキャッシュされている場合、完全にレンダリングされた状態で保存されます。 次回、サーバーがキャッシュされたページのリクエストを取得すると、リクエストされたブラウザに直接送信されます。
キャッシュされたファイルは application/cache フォルダーに保存されます。 キャッシュはページごとに有効にできます。 キャッシュを有効にしながら、キャッシュされたフォルダーに保持する必要があるまでの時間を設定する必要があり、それ以降は自動的に削除されます。
キャッシュを有効にする
コントローラのいずれかの方法で次の行を実行すると、キャッシュを有効にできます。
$this->output->cache($n);
ここで、 $ n は*分*の数であり、ページをリフレッシュ間でキャッシュしたままにしておきます。
キャッシングを無効にする
キャッシュファイルは有効期限が切れると削除されますが、手動で削除する場合は無効にする必要があります。 次の行を実行すると、キャッシュを無効にできます。
//Deletes cache for the currently requested URI
$this->output->delete_cache();
//Deletes cache for/foo/bar
$this->output->delete_cache('/foo/bar');
例
*Cache_controller.php* というコントローラーを作成し、 *application/controller/Cache_controller.php* に保存します
<?php
class Cache_controller extends CI_Controller {
public function index() {
$this->output->cache(1);
$this->load->view('test');
}
public function delete_file_cache() {
$this->output->delete_cache('cachecontroller');
}
}
?>
*test.php* という名前のビューファイルを作成し、 *application/views/test.php* に保存します。
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>CodeIgniter View Example</title>
</head>
<body>
CodeIgniter View Example
</body>
</html>
*application/config/routes.php* の *routes.php* ファイルを変更して、上記のコントローラーのルートを追加し、ファイルの最後に次の行を追加します。
$route['cachecontroller'] = 'Cache_controller';
$route['cachecontroller/delete'] = 'Cache_controller/delete_file_cache';
ブラウザーに次のURLを入力して例を実行します。
http://yoursite.com/index.php/cachecontroller
上記のURLにアクセスすると、このためのキャッシュファイルが application/cache フォルダーに作成されることがわかります。 ファイルを削除するには、次のURLにアクセスしてください。
http://yoursite.com/index.php/cachecontroller/delete
CodeIgniter-ページのリダイレクト
Webアプリケーションの構築中に、ユーザーをあるページから別のページにリダイレクトする必要がよくあります。 CodeIgniterを使用すると、この作業が簡単になります。 この目的には* redirect()*関数が使用されます。
Syntax | redirect($uri = , $method = 'auto', $code = NULL) |
Parameters |
|
Return type | void |
最初の引数には、2種類のURIを指定できます。 完全なサイトURLまたはURIセグメントを、指示するコントローラーに渡すことができます。
2番目のオプションパラメータには、auto、location、またはrefreshの3つの値のいずれかを指定できます。 デフォルトは自動です。
3番目のオプションパラメータは、場所のリダイレクトでのみ使用でき、特定のHTTP応答コードを送信できます。
例
*Redirect_controller.php* というコントローラーを作成し、 *application/controller/Redirect_controller.php* に保存します
<?php
class Redirect_controller extends CI_Controller {
public function index() {
/*Load the URL helper*/
$this->load->helper('url');
/*Redirect the user to some site*/
redirect('http://www.finddevguides.com');
}
public function computer_graphics() {
/*Load the URL helper*/
$this->load->helper('url');
redirect('http://www.finddevguides.com/computer_graphics/index');
}
public function version2() {
/*Load the URL helper*/
$this->load->helper('url');
/*Redirect the user to some internal controller’s method*/
redirect('redirect/computer_graphics');
}
}
?>
*application/config/routes.php* の *routes.php* ファイルを変更して、上記のコントローラーのルートを追加し、ファイルの最後に次の行を追加します。
$route['redirect'] = 'Redirect_controller';
$route['redirect/version2'] = 'Redirect_controller/version2';
$route['redirect/computer_graphics'] = 'Redirect_controller/computer_graphics';
ブラウザーに次のURLを入力して、例を実行します。
http://yoursite.com/index.php/redirect
上記のURLは、finddevguides.com Webサイトにリダイレクトします。次のURLにアクセスすると、finddevguides.comのコンピュータグラフィックチュートリアルにリダイレクトされます。
http://yoursite.com/index.php/redirect/computer_graphics
CodeIgniter-アプリケーションプロファイリング
Webアプリケーションを構築するとき、コントローラーの実行にかかる時間と使用されるメモリの量の観点から、Webサイトのパフォーマンスを非常に懸念しています。 パフォーマンスだけでなく、POSTデータ、データベースクエリのデータ、セッションデータなどのデータの洞察も確認する必要があります。 一部のアプリケーションの開発中にデバッグ目的で使用します。 CodeIgniterは、アプリケーションをプロファイリングすることにより、この作業を簡単にしました。
プロファイリングを有効にする
アプリケーションのプロファイリングを有効にするには、コントローラーのいずれかのメソッドで次のコマンドを実行するだけです。
$this->output->enable_profiler(TRUE);
プロファイリングのレポートは、有効にするとページの下部に表示されます。
プロファイリングを無効にする
アプリケーションのプロファイリングを無効にするには、コントローラーのいずれかのメソッドで次のコマンドを実行します。
$this->output->enable_profiler(FALSE);
プロファイラーセクションの有効化/無効化
プロファイリングはセクション単位で実行できます。 ブール値TRUEまたはFALSEを設定することにより、セクションのプロファイリングを有効または無効にできます。 アプリケーションでプロファイリングを設定する場合は、 application/config/profiler.php にあるファイルで実行できます
たとえば、次のコマンドは、アプリケーション全体のプロファイリングクエリを有効にします。
$config['queries'] = TRUE;
次の表のキーはパラメーターであり、特定のプロファイルを有効または無効にするために構成配列で設定できます。
Key | Description | Default |
---|---|---|
benchmarks | Elapsed time of Benchmark points and total execution time | TRUE |
config | CodeIgniterConfig variables | TRUE |
controller_info | The Controller class and method requested | TRUE |
get | Any GET data passed in the request | TRUE |
http_headers | The HTTP headers for the current request | TRUE |
memory_usage | Amount of memory consumed by the current request, in bytes | TRUE |
post | Any POST data passed in the request | TRUE |
queries | Listing of all database queries executed, including execution time | TRUE |
uri_string | The URI of the current request | TRUE |
session_data | Data stored in the current session | TRUE |
query_toggle_count | The number of queries after which the query block will default to hidden. | 25 |
*application/config/profiler.php* のファイルに設定されているプロファイラーは、以下に示すようにコントローラーで* set_profiler_sections()*関数を使用することでオーバーライドできます。
$sections = array(
'config' => TRUE,
'queries' => TRUE
);
$this->output->set_profiler_sections($sections);
CodeIgniter-ベンチマーク
ベンチマークポイントの設定
一連の行またはメモリ使用量の実行にかかる時間を測定する場合は、CodeIgniterのベンチマークポイントを使用して計算できます。 CodeIgniterには、この目的のための別の「 Benchmarking 」クラスがあります。
このクラスは自動的にロードされます。ロードする必要はありません。 コントローラ、ビュー、モデルクラスのどこでも使用できます。 必要なのは、開始点と終了点をマークし、これらのマークされた2つの点の間で* elapsed_time()*関数を実行することです。以下に示すように、そのコードの実行にかかった時間を取得できます。
<?php
$this->benchmark->mark('code_start');
//Some code happens here
$this->benchmark->mark('code_end');
echo $this->benchmark->elapsed_time('code_start', 'code_end');
?>
メモリ使用量を表示するには、次のコードに示すように、関数* memory_usage()*を使用します。
<?php
echo $this->benchmark->memory_usage();
?>
例
*Profiler_controller.php* というコントローラーを作成し、 *application/controller/Profiler_controller.php* に保存します
<?php
class Profiler_controller extends CI_Controller {
public function index() {
//enable profiler
$this->output->enable_profiler(TRUE);
$this->load->view('test');
}
public function disable() {
//disable profiler
$this->output->enable_profiler(FALSE);
$this->load->view('test');
}
}
?>
*test.php* という名前のビューファイルを作成し、 *application/views/test.php* に保存します。
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>CodeIgniter View Example</title>
</head>
<body>
CodeIgniter View Example
</body>
</html>
*application/config/routes.php* のroutes.phpファイルを変更して、上記のコントローラーのルートを追加し、ファイルの最後に次の行を追加します。
$route['profiler'] = "Profiler_controller";
$route['profiler/disable'] = "Profiler_controller/disable"
その後、ブラウザのアドレスバーに次のURLを入力して例を実行できます。
http://yoursite.com/index.php/profiler
上記のURLはプロファイラーを有効にし、次のスクリーンショットに示すように出力を生成します。
プロファイリングを無効にするには、次のURLを実行します。
http://yoursite.com/index.php/profiler/disable
CodeIgniter-JSとCSSの追加
CodeIgniterでのJavaScriptおよびCSS(カスケードスタイルシート)ファイルの追加は非常に簡単です。 図に示すように、ルートディレクトリにJSおよびCSSフォルダーを作成し、JSフォルダーにあるすべての.jsファイルとCSSフォルダーにある.cssファイルをコピーする必要があります。
たとえば、1つのJavaScriptファイル sample.js と1つのCSSファイル style.css を作成したと仮定します。 次に、これらのファイルをビューに追加するには、以下に示すようにコントローラーにURLヘルパーをロードします。
$this->load->helper('url');
コントローラにURLヘルパーをロードした後、以下に示すように、ビューファイルに以下の行を追加して、ビューにsample.jsおよびstyle.cssファイルをロードします。
<link rel = "stylesheet" type = "text/css"
href = "<?php echo base_url(); ?>css/style.css">
<script type = 'text/javascript' src = "<?php echo base_url();
?>js/sample.js"></script>
例
*Test.php* というコントローラーを作成し、 *application/controller/Test.php* に保存します
<?php
class Test extends CI_Controller {
public function index() {
$this->load->helper('url');
$this->load->view('test');
}
}
?>
*test.php* という名前のビューファイルを作成し、 *application/views/test.php* に保存します。
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>CodeIgniter View Example</title>
<link rel = "stylesheet" type = "text/css"
href = "<?php echo base_url(); ?>css/style.css">
<script type = 'text/javascript' src = "<?php echo base_url();
?>js/sample.js"></script>
</head>
<body>
<a href = 'javascript:test()'>Click Here</a> to execute the javascript function.
</body>
</html>
*style.css* というCSSファイルを作成し、 *css/style.css* に保存します
body {
background:#000;
color:#FFF;
}
*sample.js* というJSファイルを作成し、 *js/sample.js* に保存します
function test() {
alert('test');
}
*application/config/routes.php* の *routes.php* ファイルを変更して、上記のコントローラーのルートを追加し、ファイルの最後に次の行を追加します。
$route['profiler'] = "Profiler_controller";
$route['profiler/disable'] = "Profiler_controller/disable"
ブラウザで次のURLを使用して、上記の例を実行します。
http://yoursite.com/index.php/test
CodeIgniter-国際化
CodeIgniterの言語クラスは、国際化のために複数の言語をサポートする簡単な方法を提供します。 ある程度まで、異なる言語ファイルを使用して、多くの異なる言語でテキストを表示できます。
アプリケーション/言語ディレクトリに異なる言語ファイルを配置できます。 システム言語ファイルはsystem/languageディレクトリにありますが、アプリケーションに独自の言語を追加するには、application/languageディレクトリに言語ごとに個別のフォルダーを作成する必要があります。
ファイルの作成言語
言語ファイルを作成するには、 _ lang.php で終了する必要があります。 たとえば、フランス語の言語ファイルを作成する場合、 french_lang.php で保存する必要があります。 このファイル内では、以下に示すように、すべての言語テキストをキーと値の組み合わせで $ lang 配列に保存できます。
$lang[‘key’] = ‘val’;
言語ファイルを読み込んでいます
アプリケーションで言語を使用するには、まずその特定の言語のファイルをロードして、そのファイルに保存されているさまざまなテキストを取得する必要があります。 次のコードを使用して、言語ファイルをロードできます。
$this->lang->load('filename', 'language');
- ファイル名-ロードするファイルの名前です。 ここではファイルの拡張子を使用せず、ファイル名のみを使用します。
- 言語-それを含む言語セットです。
言語テキストの取得
言語ファイルから行を取得するには、次のコードを実行するだけです。
$this->lang->line('language_key');
ここで、 language_key は、ロードされた言語ファイルのキーの値を取得するために使用されるキーパラメーターです。
言語の自動ロード
グローバルに何らかの言語が必要な場合は、以下に示すように application/config/autoload.php ファイルに自動ロードできます。
| -----------------------------------------------------------------------
| Auto-load Language files
| -----------------------------------------------------------------------
| Prototype:
| $autoload['language'] = array('lang1', 'lang2');
|
| NOTE: Do not include the "_lang" part of your file. For example
| "codeigniter_lang.php" would be referenced as array('codeigniter');
|
*/
$autoload['language'] = array();
単純に、CodeIgniterによってオートロードされるさまざまな言語を渡します。
例
*Lang_controller.php* というコントローラーを作成し、 *application/controller/Lang_controller.php* に保存します
<?php
class Lang_controller extends CI_Controller {
public function index(){
//Load form helper
$this->load->helper('form');
//Get the selected language
$language = $this->input->post('language');
//Choose language file according to selected lanaguage
if($language == "french")
$this->lang->load('french_lang','french');
else if($language == "german")
$this->lang->load('german_lang','german');
else
$this->lang->load('english_lang','english');
//Fetch the message from language file.
$data['msg'] = $this->lang->line('msg');
$data['language'] = $language;
//Load the view file
$this->load->view('lang_view',$data);
}
}
?>
*lang_view.php* というビューファイルを作成し、 *application/views/lang_view.php* に保存します。
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>CodeIgniter Internationalization Example</title>
</head>
<body>
<?php
echo form_open('/lang');
?>
<select name = "language" onchange = "javascript:this.form.submit();">
<?php
$lang = array('english'=>"English",'french'=>"French",'german'=>"German");
foreach($lang as $key=>$val) {
if($key == $language)
echo "<option value = '".$key."' selected>".$val."</option>";
else
echo "<option value = '".$key."'>".$val."</option>";
}
?>
</select>
<br>
<?php
form_close();
echo $msg;
?>
</body>
</html>
次の図に示すように、 application/language に英語、フランス語、ドイツ語という3つのフォルダーを作成します。
以下のコードをコピーして、 application/language/english フォルダーの english_lang.php ファイルに保存します。
<?php
$lang['msg'] = "CodeIgniter Internationalization example.";
?>
以下のコードをコピーして、 application/language/French フォルダーの french_lang.php ファイルに保存します。
<?php
$lang['msg'] = "Exemple CodeIgniter internationalisation.";
?>
以下のコードをコピーして、 application/language/german フォルダーの german_lang.php ファイルに保存します。
<?php
$lang['msg'] = "CodeIgniter Internationalisierung Beispiel.";
?>
*application/config/routes.php* の *routes.php* ファイルを変更して、上記のコントローラーのルートを追加し、ファイルの最後に次の行を追加します。
$route['lang'] = "Lang_controller";
ブラウザで次のURLを実行して、上記の例を実行します。
http://yoursite.com/index.php/lang
次のスクリーンショットに示すような出力が生成されます。 ドロップダウンリストで言語を変更すると、ドロップダウンの下に書かれた文の言語もそれに応じて変更されます。
CodeIgniter-セキュリティ
XSS防止
XSSはクロスサイトスクリプティングを意味します。 CodeIgniterにはXSSフィルタリングセキュリティが付属しています。 このフィルターは、悪意のあるJavaScriptコードや、Cookieをハイジャックして悪意のあるアクティビティを実行しようとするその他のコードを防ぎます。 XSSフィルターでデータをフィルターするには、以下に示すように* xss_clean()*メソッドを使用します。
$data = $this->security->xss_clean($data);
この関数は、データを送信する場合にのみ使用してください。 オプションの2番目のブールパラメータを使用して、XSS攻撃のイメージファイルを確認することもできます。 これは、ファイルのアップロード機能に役立ちます。 値がtrueの場合、画像は安全であり、そうでないことを意味します。
SQLインジェクション防止
SQLインジェクションは、データベースクエリに対して行われる攻撃です。 PHPでは、* mysql_real_escape_string()*関数を使用してこれを他の手法と一緒に防ぎますが、CodeIgniterはこれを防ぐための組み込み関数とライブラリを提供します。
次の3つの方法でCodeIgniterでSQLインジェクションを防ぐことができます-
- クエリのエスケープ
- クエリバイディング *アクティブレコードクラス
クエリのエスケープ
<?php
$username = $this->input->post('username');
$query = 'SELECT* FROM subscribers_tbl WHERE user_name = '.
$this->db->escape($email);
$this->db->query($query);
?>
- $ this→ db→ escape()*関数は、文字列データのみをエスケープできるように、データを単一引用符で自動的に囲み、データ型を決定します。
クエリバイディング
<?php
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
?>
上記の例では、疑問符(?)はquery()関数の2番目のパラメーターの配列に置き換えられます。 この方法でクエリを構築する主な利点は、安全なクエリを生成する値が自動的にエスケープされることです。 CodeIgniterエンジンは自動的にそれを行いますので、覚えておく必要はありません。
アクティブレコードクラス
<?php
$this->db->get_where('subscribers_tbl',array
('status'=> active','email' => '[email protected]'));
?>
アクティブレコードを使用して、各データベースアダプタによってクエリ構文が生成されます。 また、値が自動的にエスケープされるため、より安全なクエリが可能になります。
PHPエラーの非表示
実稼働環境では、多くの場合、ユーザーにエラーメッセージを表示したくない場合があります。 デバッグ目的で開発環境で有効にするとよいでしょう。 これらのエラーメッセージには、セキュリティ上の理由からサイトユーザーに表示すべきではない情報が含まれている場合があります。
エラーに関連する3つのCodeIgniterファイルがあります。
PHPエラー報告レベル
さまざまな環境では、さまざまなレベルのエラー報告が必要です。 デフォルトでは、開発ではエラーが表示されますが、テストおよびライブではエラーが非表示になります。 CodeIgniterのルートディレクトリに index.php というファイルがあり、この目的で使用されます。 * error_reporting()*関数の引数としてゼロを渡すと、すべてのエラーが隠されます。
データベースエラー
PHPエラーをオフにした場合でも、MySQLエラーは開いたままです。 application/config/database.php でこれをオフにすることができます。 以下に示すように、 $ db 配列の db_debug オプションを FALSE に設定します。
$db['default']['db_debug'] = FALSE;
エラーログ
別の方法は、エラーをログファイルに転送することです。 そのため、サイトのユーザーには表示されません。 以下に示すように、 application/cofig/config.php ファイルで $ config 配列の log_threshold 値を1に設定するだけです。
$config['log_threshold'] = 1;
CSRF防止
CSRFは、クロスサイトリクエストフォージェリの略です。 以下に示すように、 application/config/config.php ファイルで有効にすることで、この攻撃を防ぐことができます。
$config['csrf_protection'] = TRUE;
- form_open()関数を使用してフォームを作成すると、CSRFが非表示フィールドとして自動的に挿入されます。 * get_csrf_token_name()*および get_csrf_hash()関数を使用して、CSRFを手動で追加することもできます。 * get_csrf_token_name()*関数はCSRFの名前を返し、 get_csrf_hash()*はCSRFのハッシュ値を返します。
CSRFトークンは、サブミットするたびに再生成できます。また、CSRF Cookieの有効期間全体を通して同じ状態に保つこともできます。 値 TRUE を設定することにより、キー ‘csrf_regenerate’ を持つ構成配列で、以下に示すようにトークンを再生成します。
$config['csrf_regenerate'] = TRUE;
以下に示すように、キー ‘csrf_exclude_uris’ を使用してconfig配列に設定することにより、CSRF保護からURLをホワイトリストに登録することもできます。 正規表現を使用することもできます。
$config['csrf_exclude_uris'] = array('api/person/add');
パスワード処理
多くの開発者は、Webアプリケーションでパスワードを処理する方法を知らないため、多くのハッカーがシステムへの侵入が非常に簡単であると考えています。 パスワードを処理する際には、次の点に留意する必要があります-
- パスワードをプレーンテキスト形式で保存しないでください。
- 常にパスワードをハッシュします。
- パスワードの保存にBase64などのエンコードを使用しないでください。
- MD5やSHA1などの弱いまたは壊れたハッシュアルゴリズムを使用しないでください。 PHPのパスワードハッシュ関数で使用されるBCryptなどの強力なパスワードハッシュアルゴリズムのみを使用してください。
- パスワードをプレーンテキスト形式で表示したり送信したりしないでください。
- ユーザーのパスワードに不必要な制限をかけないでください。