PHPプログラムに関する各種メモ書き:タグ「CodeIgniter」での検索

PHPでテストデータを作成する Faker

● Faker

https://github.com/fzaninotto/Faker

● Faker使い方(基本)

http://www.tam-tam.co.jp/tipsnote/program/post10791.html

● Fakerで生成できる日本語データの種類

https://github.com/fzaninotto/Faker/tree/master/src/Faker/Provider/ja_JP

● 主要PHPフレームワークでのインテグレーション

Laravel5 https://laravel.com/docs/5.4/seeding

CodeIgniter4 https://bcit-ci.github.io/CodeIgniter4/database/seeds.html

No.1133
04/22 17:13

edit

CodeIgniter
Laravel

codeigniterのインストールからhello world までの手順

● 1. CodeIgniterをダウンロードしディレクトリを丸ごとアップロードする

https://www.codeigniter.com/download

● 2. index.php を移動させる

アップロードしたディレクトリ内にあるindex.php を好きな位置に移動させる

● 3. .htaccessをアップロードする

ファイル名を **.htaccess** として index.php と同じディレクトリにアップロード
```
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^/system.*
RewriteRule ^(.*)$ index.php?/$1 [L]

RewriteCond %{REQUEST_URI} ^/application.*
RewriteRule ^(.*)$ index.php?/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
```


#● 4. index.php 内のパスを書き換える
index.phpの下記を index.php から見た system/ディレクトリ application/ ディレクトリに書き換える
```
// 100行目あたり
	$system_path = 'system';

// 117行目あたり
	$application_folder = 'application';
```


#● 5. config/config.php を設定する
```
// URL を指定する
$config['base_url'] = 'http://aaa.bbb.ccc.com/dddd/';

// index.php を削除する
$config['index_page'] = '';
```
No.1102
03/09 22:40

edit

CodeIgniter

codeigniterでCSRF対策(CSRFプロテクション)機能を使う

● codeigniterでCSRFプロテクション機能を使う

codeigniterでCSRFプロテクション機能の概要は以下の通りです

  • コンフィグファイルのcsrf_protection を TRUE にするだけでアプリケーション全体で有効
  • コントローラ/メソッド ごとの on/off は出来ない(システムのソースを書き換えると可能)

● codeigniterでCSRFプロテクション機能を有効にする

codeigniter/application/config/config.php の以下の行を変更する

$config['csrf_protection'] = TRUE;

● codeigniterでCSRFプロテクション機能を使ってみる

コントローラ `test/indextest/confirm` 画面遷移でCSRFprotectionが有効なことを確認します
codeigniter/application/cotrollers/Test.php に以下のメソッドを追加します

public function index() {
    $data = array();
    $data['csrf_token_name'] = $this->security->get_csrf_token_name();
    $data['csrf_token_hash'] = $this->security->get_csrf_hash();
    $html = $this->twig->render('form.html', $data);
    echo $html;
}

public function confirm(){
    echo 'ok';
}

twig テンプレートファイル `form.html` は以下のように作成しておきます

<html>
<body>
<form action="/test/confirm" method="post">
<input type="hidden" name="{{csrf_token_name}}" value="{{csrf_token_hash}}">
<input type="submit">
</form>
</body>
</html>

この状態でコントローラー test/index にアクセスすると formの hidden

<input type="hidden" name="csrf_test_name" value="7c195574347b1a4888d7f3bf4bd6331d">

がセットされているはずです。これがCSRF対策のトークとなります。
ここの値をchromeなどで書き換えて送信するとエラーとなることが確認できます。

No.1088
02/07 14:51

edit

CodeIgniter

codeigniterでTwitterログインを実現する

● codeigniterでTwitter,Facebookログインを実現する

● Twitter,Facebook APIキーを発行する

こちらからAPIキーを発行します(追加方法は割愛します。) https://apps.twitter.com/

● Twiter Oauthモジュールのインストール

composerからインストールします。
ターミナルから以下を実行

composer require abraham/twitteroauth

PHPから以下のように読み込みます

require "vendor/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;

または codeigniter の codeigniter/application/config/config.php の下記項目を TRUE にします。

$config['composer_autoload'] = TRUE;

● codeigniterのコントローラの作成

codeigniterの controllers に Oauth.php を以下のように作成します

public function twitter() {
    define('CONSUMER_KEY', 'XXXXXXXX');
    define('CONSUMER_SECRET', 'YYYYYYYY');
    define('OAUTH_CALLBACK', 'http://zzz.zzz.zzz/oauth/twitter_callback/');
    $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
    $request_token = $connection->oauth('oauth/request_token', array('oauth_callback' => OAUTH_CALLBACK));
    $this->session->set_userdata('oauth_token', $request_token['oauth_token']);
    $this->session->set_userdata('oauth_token_secret', $request_token['oauth_token_secret']);
    $url = $connection->url('oauth/authenticate', array('oauth_token' => $request_token['oauth_token']));
    redirect($url);
}


public function twitter_callback() {
	$session = $this->session->userdata();
	$q = $this->input->get(null, true);
	$request_token = array();
	$request_token['oauth_token'] = $session['oauth_token'];
	$request_token['oauth_token_secret'] = $session['oauth_token_secret'];
	if (isset($_REQUEST['oauth_token']) && $request_token['oauth_token'] !== $_REQUEST['oauth_token']) {
		die('Error!');
	}
	$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $request_token['oauth_token'], $request_token['oauth_token_secret']);
	$access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $q['oauth_verifier']));
	$this->session->set_userdata('access_token', $access_token);
	session_regenerate_id();
	redirect('oauth/mypage');
}

● ログインの実行

http://zzz.zzz.zzz/oauth/twitter/ へアクセスします

No.1087
02/07 13:50

edit

CodeIgniter
Twitter

CodeIgniter の DB操作

● SQL直接実行

$sql = 'DROP TABLE IF EXISTS my_table';
$query = $this->db->query($sql);
echo $query->result_array();

● DBへの操作実行後に実行したSQL文を取得する

$last_sql = $this->db->last_query();
echo $last_sql;

● LIKE文

$like = array( 'title_name' => 'mail' );
$this->db->like($like);

$like = array( 'content_name' => 'mail' );
$this->db->or_like($like);

生成されるSQL

WHERE "title_name" LIKE '%mail%' ESCAPE '!'
OR  "content_name" LIKE '%mail%' ESCAPE '!'

● LIKE文(SQL文を記述)

$v = '%%%';
$v = $this->db->escape_like_str($v);
$where = "(title_name like '%{$v}%' OR content_name like '%{$v}%' )";
$this->db->where($where);

生成されるSQL

WHERE ("title_name" like '%!%!%!%%' OR "content_name" like '%!%!%!%%' )

● ORDER BY

$this->db->order_by('title DESC, name ASC');

● データベースの設定情報にアクセスする

$this->db->hostname
$this->db->username
$this->db->password
$this->db->database

● いま接続しているデータベースのテーブル数を取得する( MySQL )

$sql = "select count(*) AS COUNT from `information_schema`.`tables` where `table_schema` = '" . $this->db->database . "'";
$query = $this->db->query($sql);
$hash = $query->result_array()[0];
No.1077
03/14 11:26

edit

CodeIgniter

CodeIgniterの Auth パッケージ ion auth を使用する

● benedmunds/CodeIgniter-Ion-Auth

https://github.com/benedmunds/CodeIgniter-Ion-Auth

codeigniter用シンプルな認証ライブラリーです。
viewファイルもついてくるのでインストールするだけですぐ使えます。
シンプルな作りになっているので sqlite でも使用することができます

● 1. インストール

ターミナルから以下のようにしてインストールします

cd codeigniter/application/third_party
mkdir benedmunds
cd benedmunds
git clone https://github.com/benedmunds/CodeIgniter-Ion-Auth.git

● 2. autoload.phpの設定

apprication/config/autoload.php を以下のように変更する。

$autoload['packages'] = array(APPPATH.'third_party/benedmunds/CodeIgniter-Ion-Auth');

● 3. Auth用テーブルを作成する

codeigniter/application/third_party/benedmunds/CodeIgniter-Ion-Auth/sql/ の中にデータベース作成SQLがあるので 実行してテーブルを作成する
SQLite3用にSQL文を変換するには
http://flatsystems.net/js_mysql_to_sqlite.html
を利用する。

● 4. configの設定を確認する

次の3項目の値を確認する。

$config['base_url'] = 'http://xxx.yyy.zzz/aaaa/';
$config['sess_save_path'] = APPPATH.'session/';
$config['language']	= 'japanese';

また、もし可能なら `application/session` ディレクトリの権限を「0700」に設定しておく

● 5. codeigniter の日本語パッケージをインストールする

ここからインストールします
https://github.com/NEKOGET/ci_language

● 6. Authを使用してみる

codeigniter/application/third_party/benedmunds/CodeIgniter-Ion-Auth/controllers/Auth.php
を自分の controllers ディレクトリにコピーして動作させてみる
http://あなたのサーバー/auth/ 
で起動する
ログイン id ,pass はデフォルトで

Username: admin@admin.com
Password: password

となっているので、こちらを利用してログインを確認します。

● さらにユーザーごとのACL(アクセス制御リスト)を利用するには

こちらのライブラリを使用します。
https://www.phpclasses.org/package/10041-PHP-Manage-the-access-of-CodeIgniter-users-using-ACL.html

No.1075
04/05 17:22

edit

CodeIgniter

codeIgniterで404エラーページをカスタマイズする

● 1.application/config/routes.php で エラー発生時のルーティングを設定する

 - コントローラを「mycon」
 - メソッド名を「error_404」
に設定する

routes.php 内に以下を記述
```
$route['404_override'] = 'mycon/error_404';
```

#● 2.application/controllers/Mycon.php に error_404 メソッドを作成する
Mycon.php 内に以下を記述(例)
```
	function error_404() {
		$this->output->set_status_header('404');
		$html = $this->twig->render('404.html');
		echo $html;
	}
```

No.1074
01/05 14:22

edit

CodeIgniter
エラー対処

PHPでXpathでスクレイピングできるモジュール

● PHPでXpathでスクレイピングできるモジュール

● querypath をインストールしWEBサイトのタイトルとdescriptionを取得する

・1. querypath をインストール

インストールするディレクトリ(CodeIgniterの場合は /codeigniter/application/)に移動しターミナルから

composer require querypath/querypath

でインストール。

・2. querypath を読み込み

CodeIgniterを使用している場合は `config/config.php`

$config['composer_autoload'] = TRUE;

で自動的に読み込まれます。
フレームワークを使用していない場合は

require_once "vendor/autoload.php";

・3. querypath でWEBページの情報を取得する(例:YahooトップページのタイトルとDescriptionを表示します)

require_once "vendor/autoload.php";
$url = 'http://yahoo.co.jp/';
$html = file_get_contents($url);
$qp = html5qp($html);
print qp($html, 'title')->text();
print qp($html, 'meta[name=description]')->attr("content");
No.1055
01/28 22:39

edit

Xpath
CodeIgniter

CodeIgniterで DB(MySQL)に 現在時刻 を insertする

CodeIgniterで INSERT, UPDATE時に 現在時刻を指定するやり方

カラム「my_date」に現在時刻をセットする

●方法その1. set() に FALSE を指定してエスケープを解除する

$this->db->set('my_date', 'NOW()', FALSE); 
$this->db->update('my_table');

●方法その2. 日付けヘルパーを読み込んで現在時刻をセットする

$this->load->helper('date');
$update_data = array();
$update_data['my_date'] = unix_to_human( now(), TRUE, 'eu' );
$this->db->update('my_table', $update_data);
No.1049
08/08 13:54

edit

CodeIgniter
日付

フレームワークCodeIgniterで出力画面のファイルキャッシュを使用する

PHPのフレームワークCodeIgniterで出力画面(ウェブページ)キャッシュを使用する方法とTips。

● ウェブページキャッシュを使用する

$this->output->cache( 60*24 ); // 60 * 24 = 1日

標準のビューを使用している場合はこれだけで出力画面のキャッシュが生成されます。 キャッシュの生存時間を過ぎると自動的に消去されます。

テンプレートエンジンを使用している場合は、テンプレートの出力を $html に保存しておき、

$this->output->set_output($html);
$this->output->cache(60*24*3);

でOKです。

● ウェブページキャッシュの設定をする

config.phpの以下の項目を設定します (設定例)

$config['cache_path'] = FCPATH.'cache_codeigniter/'; // index.php と同じ階層の cache_codeigniter ディレクトリに保存する。
$config['cache_query_string'] = FALSE; // ? 以降のクエリー文字を無視する

● ウェブページキャッシュを削除する

ウェブページキャッシュが存在する場合はコントローラーのメソッドを通る前にキャッシュを表示して終了する、のでキャッシュを削除するには別メソッドから行うほうが使い勝手がいいと思われます。

// /foo/bar のキャッシュを削除する
$this->output->delete_cache('/foo/bar');

● ウェブページキャッシュファイル名を確認する

1. ログファイルでキャッシュファイル名を確認する。(config.php でキャッシュ生成時のログを出力するように設定し確認する)

ログの設定は config.php で以下のパラメータ指定になっています

0 = Disables logging, Error logging TURNED OFF
1 = Error Messages (including PHP errors)
2 = Debug Messages
3 = Informational Messages
4 = All Messages

ここではログスレッショルドに「2」を設定します。

$config['log_threshold'] = 2;

すると、ファイルキャッシュ生成時に `codeigniter/application/logs/log-XXXXX.php` に以下のようなログが記録されます

DEBUG - 2016-05-17 20:20:46 --> Cache file written: cache_codeigniter/1821935daa9207253aa5d75940e22e16

確認が終わったらログスレッショルドを戻しておきましょう。

2. キャッシュファイル名を確認するメソッドでコントローラー内でログファイル名を確認する

● ウェブページキャッシュファイル名を取得するメソッド _get_cache_path()

// ページURI, キャッシュID(ファイル名のみ), キャッシュファイル名(フルパス)
list($uri, $cache_id, $cache_path) = $this->_get_cache_path();
private function _get_cache_path(){
  $CI =& get_instance();
  $path = $CI->config->item('cache_path');
  $cache_path = ($path === '') ? APPPATH.'cache/' : $path;
  $uri = $CI->config->item('base_url').$CI->config->item('index_page').$CI->uri->uri_string();
  if (($cache_query_string = $CI->config->item('cache_query_string')) && ! empty($_SERVER['QUERY_STRING'])){
    if (is_array($cache_query_string)){
      $uri .= '?'.http_build_query(array_intersect_key($_GET, array_flip($cache_query_string)));
    }
    else{
      $uri .= '?'.$_SERVER['QUERY_STRING'];
    }
  }
  $cache_id = md5($uri);
  $cache_path .= $cache_id;
  return array($uri, $cache_id, $cache_path);
}
No.1034
08/08 13:47

edit

CodeIgniter

CodeIgniterの(クラス/メソッド)とパス、URLの設定

● CodeIgniterで現在の(クラス/メソッド)を知る方法

http://xxx.yyy.zzz/test/ にアクセスした時

$now_class_method = $this->router->fetch_class().'/'.$this->router->fetch_method(); // test/index が入ります
$now_class_method = uri_string(); // test が入ります

http://xxx.yyy.zzz/test/mymethod にアクセスした時

$now_class_method = $this->router->fetch_class().'/'.$this->router->fetch_method(); // test/mymethod が入ります
$now_class_method = uri_string(); // test/mymethod が入ります

● CodeIgniterのパスの設定は index.php に記述されています。

● 定義されている定数は

BASEPATH APPPATH SELF FCPATH です。

● 確認するには

echo('BASEPATH : ' . BASEPATH."\n");
echo('APPPATH : ' . APPPATH."\n");
echo('SELF : ' . SELF."\n");
echo('FCPATH : ' . FCPATH."\n");

● 具体的には

BASEPATH : /home/my_project/codeigniter/system/
APPPATH : /home/my_project/codeigniter/application/
SELF : index.php
FCPATH : /home/my_project/

です。( my_project にインストールされている場合)

● URLを知る

$this->load->helper('url');
echo site_url();
echo base_url();
http://あなたのサーバ名/PATH/TO/DIR/index.hphp
http://あなたのサーバ名/PATH/TO/DIR/

base_url は config.php で設定した値が返る

No.1024
05/20 19:28

edit

CodeIgniter

CodeIgniterの簡易パスワード認証ライブラリ Minimal_auth.php

CodeIgniterで開発中にあるクラスだけパスワード認証をかけたい、または簡易なログイン画面を付けたい場合があります。
その時は以下のライブラリ【Minimal_auth.php】を用意するといいでしょう。
CodeIgniterのセッションを利用して超簡易パスワード認証をつけることができます。
SHA-256でハッシュしていますので、Basic認証、Digest認証の代わりにどうぞ。
またロボット対策として動的にhiddenを生成して送っています。

1. application/libraries``` にファイル名Minimal_auth.php` として保存

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');

class Minimal_auth {
  private $CI;
  private $_login_flag = false;

  public function __construct(){
    $this->CI =& get_instance();
		$this->CI->config->load('minimal_auth');
    $this->CI->load->library('session');
  }

  public function view_login($flag=''){
    $sess = $this->CI->session->all_userdata();
    $err_mess = '';
    if (strcmp($flag,'error')==0){
      $err_mess = 'ログインエラーです。';
    }
    print <<< DOC_END
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/core.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/sha256.js"></script>
<script>
function make_hidden(e,n,d){var m=document.createElement("input");m.type="hidden",m.name=e,m.value=n,d?document.forms[d].appendChild(m):document.forms[0].appendChild(m)}
</script>
<style type="text/css">
*{
  font-size:12px;
  font-family: serif;
}
</style>
</head>
<body>
{$err_mess}
<form method="post" action="{$sess['login_url']}" onsubmit="return false;" >
<h1>パスワードを入力してください。</h1>
<input type="password" id="in_text" name="in_text">
<input type="button" value="送信" onclick="var v = document.getElementById('in_text').value; v = CryptoJS.SHA256(v); make_hidden('apb',v); document.getElementById('in_text').value=''; this.form.submit();">
</form>
</body>
</html>
DOC_END;
  }

  public function login_submit(){
    $password_sha256 = hash( 'sha256', $this->CI->config->item('admin_password') );
    if (strcmp($password_sha256, $this->CI->input->post('apb') )==0 && ( strcmp($this->CI->input->post('apb'),'') != 0 ) ){
      $sess = $this->CI->session->all_userdata();
      $session['_login_flag']  = true;
      $this->CI->session->set_userdata($session);
      redirect( $sess['jump_to'] );
      exit();
    }
    else{
      $this->view_login('error');
      exit();
    }
  }

  public function login( $login_url, $jump_to ){
    $sess = $this->CI->session->all_userdata();
      if ( @$sess['_login_flag']  == true ){
        return;
      }
    elseif ( preg_match('/login_submit/', uri_string() ) ){
      $this->login_submit();
    }
    else{
      $session['login_url']    = $login_url;
      $session['jump_to']      = $jump_to;
      $session['_login_flag']  = false;
      $this->CI->session->set_userdata($session);
      $this->view_login($login_url);
      exit();
    }
  }

}

2. application/config``` にファイル名minimal_auth.php` として保存

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
$config['admin_password'] = 'hogehoge';// パスワード(適宜変更すること)

3. 認証を付けたいコントローラー(例: `application/controllers/Admin.php`) に以下を追加

	public function __construct(){
		// コンストラクタに以下の2行を追加
		$this->load->library('minimal_auth');
		$this->minimal_auth->login( site_url("admin/login_submit"), (empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] );
	}

	// 以下のメソッドを追加(中身は空でいいです。 クラス名やメソッド名を変更した場合は上の「admin/login_submit」も変更すること)
	public function login_submit(){
	}

以上で /index.php/admin/ 以下の任意のメソッドにパスワード認証がつきます。
なおパスワード有効期間はセッション有効期間ですので

```
$config['sess_expiration'] = 60*60*24;	// セッションを終了させたい秒(例:24時間)。
$config['sess_save_path'] = APPPATH.'session';	// セッション保存ディレクトリ(例:application/session/)。
$config['sess_match_ip'] = TRUE;	// セッションのIPアドレス照合(例:照合する)。
$config['sess_time_to_update'] = 60*5;	// セッションID更新秒(例:5分)。
```
No.958
10/16 17:12

edit

CodeIgniter
セッション

フレームワークCodeIgniter + Twigでサイトを多言語化する

PHPフレームワーク【CodeIgniter3】とテンプレートエンジン【Twig】でサイトを多言語化する方法を考えてみます。

1. URL設計

日本語版と英語版を作るとして、サイトのURLは一番上のパスで「ja」「en」というふうに分ける

http://foo.bar/ja/class/method/arg1/
http://foo.bar/en/class/method/arg1/

といった構成にしてみます。

2. CodeIgniterのルーティングの設定( routes.php )

application/config/routes.php内に以下のように記述

$route['([a-z]{2,3})/(.+)/(.+)/(.+)'] = "$2/$3/$4/$1";

(正規表現が使えます。便宜上 .+ としていますが、使用するクラス,メソッド名の命名法則にそって狭めた([a-z]+ など)ほうがいいと思います。)
こうすることで

/ja/myclass/mymethod/aaa
↓
/myclass/mymethod/aaa/ja  // 【myclass】クラスの【mymethod】メソッドに引数【('aaa’, 'ja')】でアクセス

に変更されます。

3. 言語ファイル(英語・日本語)の作成

英語の言語ファイル `application/language/english/mycode_lang.php` を以下のように作成する

<?php
$lang['helo'] = "Hello ! World !!!";

日本語の言語ファイル `application/language/japanese/mycode_lang.php` を以下のように作成する

<?php
$lang['helo'] = "ようこそ! 世界 !!!";

4. 言語ファイルの読み込みと表示

コントローラーのメッソッドの第2引数に「ja」または「en」が渡ってきますのでそこで処理します。

public function mymethod($arg, $lang_flag='ja'){
	// 言語データを受け取る
	$lang = $this->_set_lang($lang_flag);
	print $data['helo'];
}
private function _set_lang($lang_flag='ja'){
	if ( strcmp($lang_flag, 'ja')==0 ){
		$lang = $this->lang->load('mycode', 'japanese', TRUE);
	}
	elseif ( strcmp($lang_flag, 'en')==0 ){
		$lang = $this->lang->load('mycode', 'english', TRUE);
	}
	else{
		die("_set_lang error : unknown language -> {$lang_flag}");
	}
	return $lang;
}

これで 「ja」のときは「ようこそ! 世界 !!!」 「en」のときは「Hello ! World !!!」 と表示されるようになります。

参考 : http://goo.gl/ly9JhY

No.956
07/06 19:46

edit

CodeIgniter

CodeIgniterでSQLite3へ現在時刻をINSERTする

CodeIgniterでActiveRecordを使ってSQLite3へ現在時刻をINSERTするには以下のようにします。

テーブル「my_table」に『user_name』『modified_date』カラムに値を入れてINSERTする。

$data = array(
	'user_name' => ’ユーザー名’ ,
);
$this->load->database();
$this->db->set('modified_date', "datetime('now', 'localtime')", FALSE);
$this->db->insert('my_table', $data);
No.953
06/23 20:09

edit

CodeIgniter
日付

PHPフレームワークCodeIgniterの導入とサンプル

CodeIgniterはPHPフレームワークの中でも比較的シンプルでフレームワーク初学者にはCakePHPよりおすすめします。 動作も高速です。

●0-A.インストール(公式サイトからダウンロードする方法)

  • http://www.codeigniter.com/download からダウンロード
  • 解凍してできたフォルダ「CodeIgniter-3.1.3」を「codeigniter」にリネームする
  • フォルダ 「codeigniter」直下の以下のファイルとフォルダは不要なので削除する
    composer.json
    contributing.md
    license.txt
    readme.rst
    user_guide(フォルダ)
    
  • フォルダ「codeigniter」をサーバの一番上(もしくは任意の場所)の階層にアップロード

●0-B.インストール(composerを使用する方法)

サーバの任意のディレクトリ(この場合では ~/php_composer/ )へcomposerをインストールします。

cd ~/php_composer/
curl -sS https://getcomposer.org/installer | php

(インストール後に composer.phar のパスが表示されます。これがcomposerコマンドの場所です。)

.bash_profileなどにパスを追加 vi などで下記の行を追加します。

PATH="$PATH":~/php_composer/

bach を再起動したら「CodeIgniter Composer Installer」を使ってCodeIgniterをインストールします。

■ CodeIgniter Composer Installer https://github.com/kenjis/codeigniter-composer-installer

CodeIgniterをインストールしたディレクトリから以下を実行

composer.phar create-project kenjis/codeigniter-composer-installer codeigniter

1. 【設定ファイルの変更】

codeigniter/application/config/routes.php を編集

$route['default_controller'] = 'welcome';

この行の 'welcome' を 'top' に変更します。

$route['default_controller'] = 'top'; // welcome → top に変更

2. 【コントローラーファイルの作成】

codeigniter/application/controllers/Welcome.php を コピーしてファイル名「Top.php」に変更する

ファイル名は「Top.php」(先頭は大文字)でなければいけません。

codeigniter/application/controllers/Top.php を編集

中身は以下のようにします。(クラス名「Top」先頭は大文字でなければいけません)

<?php
class Top extends CI_Controller {
	public function index()
	{
		$this->load->view('topview');
	}
}

とします。

3. 【ビューファイル(HTMLテンプレート)の作成】

codeigniter/application/views/welcome_message.php を コピーしてファイル名「topview.php」に変更する

codeigniter/application/views/topview.php を編集

拡張子は .php ですが 中身はHTMLファイルなので以下の様な内容にします。

<html>
<body>
<h1>test</h1>
</body>
</html>

ここで
http://localhost/codeigniter/index.php/Top
にアクセスしてテンプレートが表示されることを確認します。

4. 【データベースの作成】

今回 データベースにはsqlite3 を使用してみます。

codeigniter/application/config/database.php を編集します

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => '',
	'password' => '',
	'database' => APPPATH.'sqlite3/test.sqlite3',
	'dbdriver' => 'sqlite3',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => TRUE,
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);

フォルダcodeigniter/application/sqlite3/ を作成する。

設定ファイル/codeigniter/application/config/migration.php の編集

$config['migration_enabled'] = TRUE;  		// FALSE → TRUE に変更
$config['migration_type'] = 'sequential';	// マイグレーション管理を「日付」→「連番」に変更
$config['migration_version'] = 1;					// 現在のバージョン

フォルダcodeigniter/application/migrations/ を作成する。

フォルダ migrations の中にファイル 001_create_table.php を作成し以下の内容で保存

<?php
class Migration_Create_table extends CI_Migration {
    public function __construct(){
        parent::__construct();
    }
    public function up(){
        $this->dbforge->add_field(array(
            'data_id' => array(
                'type' => 'INT',
                'unsigned' => TRUE,
                'auto_increment' => TRUE
            ),
            'user_name' => array(
                'type' => 'VARCHAR',
            ),
            'modified_date' => array(
                'type' => 'TEXT',
            ),
        ));
        $this->dbforge->add_key('data_id', true);
        $this->dbforge->create_table('user_dt');
    }
    public function down(){
        $this->dbforge->drop_table('user_dt');
    }
}

↑このファイルはSQL文で言うところの

CREATE TABLE mandolin_chord_dt (
  data_id integer PRIMARY KEY NOT NULL,
  user_name varchar NOT NULL,
  modified_date text
);

になります。

マイグレーションを実行するコントローラ codeigniter/application/controllers/Migrate.php を作成し以下の内容で保存

<?php
class Migrate extends CI_Controller
{
	public function index(){
	        $this->load->library('migration');
	        if ($this->migration->current() === FALSE){
	                show_error($this->migration->error_string());
	        }
	}
}

http://localhost/codeigniter/index.php/migrate/ を実行してデータベースを作成。

codeigniter/application/sqlite3/test.sqlite3 が作成されていることを確認します
またテーブルも正しく作成されているかどうか確認します

5. データベースへのアクセス

codeigniterはデータベースへのアクセスクラスを持っています。 使い方は以下のとおり( test_dt から全件取得し表示する例。)

$this->load->database();
$this->db->from('test_dt');
$this->db->select('*');
$query = $this->db->get();
$data_loop = $query->result_array();
print_r($data_loop);

6. Codeigniterのバージョンの調べ方

system/core/CodeIgniter.php

にバージョン記述があります。

CodeIgniter 3.0でPHPUnitを使う post http://blog.a-way-out.net/blog/2015/05/19/ci-phpunit-test/

No.950
01/28 22:17

edit

CodeIgniter