Codeigniter 4 をインストール


Vagrant上に Codeigniter 4 をインストール

Windowsに以下のソフトウェアがインストールされていることが前提

- https://www.virtualbox.org/
- https://www.vagrantup.com/
- https://git-scm.com/downloads

Windowsでの作業

$ cd /c/iWork/01_vagrants/
$ mkdir ci4_test
$ cd ci4_test/
$ vagrant init centos/7
$ vi Vagrantfile
----------------------------
-# config.vm.network "private_network", ip: "192.168.33.10"
+config.vm.network "private_network", ip: "192.168.56.30" # 各自のPC環境による
----------------------------
$ vagrant up
$ vagrant ssh

VMにログインしての作業
$ sudo vi /etc/selinux/config
----------------------------
-SELINUX=enforcing
+SELINUX=disabled
----------------------------

Windowsでの作業
$ vagrant reload
$ vagrant ssh

VMにログインしての作業

PHP 7 のインストール
$ sudo yum install epel-release
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
$ sudo yum install --enablerepo=remi,remi-php74 php php-mbstring php-intl php-xml php-pdo php-mysqlnd php-fpm
$ php -v

Composer インストール
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"
$ sudo mv composer.phar /usr/local/bin/composer
$ composer -V
$ sudo yum install unzip
$ composer self-update && composer create-project codeigniter4/appstarter project-example

tokenが聞かれた時の対処法

tokenが聞かれた時の対処法


トークンの発行
https://github.com/settings/tokens

Nginx インストール
$ sudo yum install nginx
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
$ sudo vi /etc/nginx/conf.d/project-example.conf
---------------------------------------------
server {
listen 80;
server_name 192.168.56.30;
root /usr/share/nginx/html/project-example/public;
index index.php;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

location / {
try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_intercept_errors on;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param CI_ENVIRONMENT development; # CI4でエラーログを表示するため
}
}
---------------------------------------------

php-fpm 設定変更
$ sudo vi /etc/php-fpm.d/www.conf
---------------------------------------------
-user = apache
-group = apache
+user = nginx
+group = nginx

-;listen = 127.0.0.1:9000
+listen = /var/run/php-fpm/php-fpm.sock

-;listen.owner = nginx
-;listen.group = nginx
-;listen.mode = 0660
+listen.owner = nginx
+listen.group = nginx
+listen.mode = 0660
---------------------------------------------

$ sudo systemctl start php-fpm
$ sudo systemctl enable php-fpm
$ sudo systemctl restart php-fpm && sudo systemctl restart nginx

$ sudo mv project-example /usr/share/nginx/html/
$ sudo vi /usr/share/nginx/html/project-example/app/Config/App.php
---------------------------------------------
-public $baseURL = 'http://localhost:8080/';
+public $baseURL = 'http://192.168.56.30/';
---------------------------------------------

ログディレクトリ等のパーミッション変更
$ sudo chmod -R 777 /usr/share/nginx/html/project-example/writable/

ブラウザで以下のURLにアクセス
http://192.168.56.30/
⇒OK

CodeIgniter3でバッチを動かしてみる

まずコントローラを用意します。

$ vi application/controllers/Batchtest.php

次にコントローラをコマンドラインから実行します。

$ cd /var/www/myapp
$ php index.php batchtest index
Hello

引数を渡す場合


コントローラをコマンドラインから実行します

$ cd /var/www/myapp
$ php index.php batchtest indx [引数1] [引数2]
[引数1] [引数2]

ウェブサーバからのアクセスを禁止するには以下を追記します

if (!is_cli()) {
    set_status_header(403);
    echo "403 Forbidden";
    return;
}

参考
http://blog.ko31.com/201512/codeigniter-cli/
多謝

Codeigniter4(dev) を試してみる

インストール手順

適当な場所にて
# cd ~/work
git からクローンして
# git clone https://github.com/bcit-ci/CodeIgniter4.git
CodeIgniterのディレクトリが展開されるので適当な場所に配置して
# mv CodeIgniter4 <任意の配置したい場所>/

ウェブサーバの設定で、<任意の配置した場所>/CodeIgniter4/public をドキュメントルートに指定して

# vi /etc/nginx/conf.d/myapp.conf
root <任意の配置したい場所>/CodeIgniter4/public;

ウェブサーバを再起動

# systemctl restart nginx

ブラウザでアクセスすると表示された。
ci4-dev_installed

シンプル

CodeIgniter4 github

Codeigniter3 でDBからデータ取得して表示まで

準備として testdbを作り、サンプルデータを投入しておきます。

$ mysql -u root -p
MariaDB [(none)]> CREATE DATABASE testdb DEFAULT CHARACTER SET utf8;

MariaDB [(none)]> USE testdb;
Database changed

MariaDB [testdb]> CREATE TABLE IF NOT EXISTS `tbl_users` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',
  `name` VARCHAR(255) NOT NULL DEFAULT 'hoge' UNIQUE COMMENT '名前'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'ユーザー';

MariaDB [testdb]> INSERT INTO tbl_users (id, name) VALUES ('0','hoge');
Query OK, 1 row affected (0.00 sec)

MariaDB [testdb]> SELECT * FROM tbl_users;
+----+------+
| id | name |
+----+------+
|  1 | hoge |
+----+------+
1 row in set (0.00 sec)

データベース接続設定を適宜編集しておきます。

$ vi application/config/database.php
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'testdb',

モデルファイルを用意しておきます。
※cakephpのように、モデルファイル名とモデルクラス名とテーブル名は一緒じゃなくてOK。フリーダム

$ vi application/models/Users_model.php
db->get('tbl_users', 1);
                return $query->result();
        }
}

コントローラにモデルの使用を追記します。

$ vi application/controllers/Api.php
load->model('Users_model', '', TRUE);
                // DBアクセス
                $result = $this->Users_model->get();
                $resp = [];
                foreach ($result as $k => $v) {
                    $resp[] = $v->name; // hoge
                }
                // JSON出力する場合
                $this->output
                    ->set_content_type('application/json')
                    ->set_output(json_encode($resp));

                // テンプレートへ出力する場合
                $data['title'] = 'タイトルタイトル';
                $data['body'] = '本文本文';
                $this->load->view('xxx_tpl', $data);

        }
}

テンプレートへ出力する場合

$ application/view/xxx_tpl.php


        <?php echo $title; ?> // ←$dataではなく$titleをechoしている


        

ブラウザでアクセスします。

{"hoge"}

デバッグにはプロファイラが便利です。

$this->output->enable_profiler(true);

実行されたクエリだけを確認したい時はこんな感じでも。

foreach ($this->db->queries as $k => $v) {
        echo str_replace("\n", "", $v) . "\n";
}

参考
http://pneskin2.nekoget.com/codeigniter/3/user_guide/general/models.html

Codeigniter3 で JSON を返してみる

$ vi controllers/Api.php 
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Api extends CI_Controller {

        public function index()
        {
                $resp = [];
                $resp['a'] = 1;
                $this->output->set_content_type('application/json')->set_output(json_encode($resp));
        }
}

ブラウザでアクセスしてみる

{"a":1}

CodeIgniter 3 で Hello World

前回からの続き

コントローラ編集

$ vi application/controllers/Hoge.php
<?php
class Hoge extends CI_Controller {

        public function index()
        {
                echo 'Hello World!';
        }

        public function fuga()
        {
                echo 'fuga fuga';
        }
}

動作確認
http://192.168.33.10/hoge/index
http://192.168.33.10/hoge/fuga

参考
https://www.codeigniter.com/userguide3/general/controllers.html

nginx1.10 + Codeigniter3 を試してみる

前回からの続き

インストール

$ cd /tmp
$ wget https://github.com/bcit-ci/CodeIgniter/archive/3.0.6.zip
$ unzip 3.0.6.zip
$ mv CodeIgniter-3.0.6 ci3
$ sudo mv ci3 /var/www

設定ファイル編集

$ sudo vi /etc/nginx/conf.d/ci3.conf
server {
    root /var/www/ci3;
    server_name 192.168.33.10; # example.comとか

    # Basic auth 全体にかける場合
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location / {
        try_files $uri $uri/ /index.php?/$request_uri;
    }

    if ($request_uri !~ ^/(index\.php|assets|files|robots\.txt)) {
        rewrite ^/(.*)$ /index.php/$1 last;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
        #fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; // 直下とか
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        include fastcgi_params;
    }
}
$ sudo systemctl restart nginx

参考
http://symfoware.blog68.fc2.com/blog-entry-1591.html
多謝