Install PHP-FPM 7.1 + OCI8 + Oracle


yum remove php-common
yum install php71w-fpm

Install some prerequisite

yum install php71w-pear
yum install php71w-devel
yum install php71w-pdo
yum install php71w-mbstring


Install oracle instance RPM packages
rpm -Uvh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
rpm -Uvh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm

Download the OCI8 extension
tar -xvzf oci8-2.1.8.tgz
cd oci8-2.1.8/
./configure --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client64/lib/
make
make install

Edit php.ini file:
vi /etc/php.ini
extension=oci8.so

Config user php-fpm & nginx is "nginx"
chown -R userapp:nginx /path/to/web/
chmod -R 777 /var/log/nginx
chmod -R 777 /var/log/php-fpm

Start: 
service nginx start
service php-fpm start 

Yii2 - Oracle connection - set date format





        'db' => [
            'class' => 'apaoww\oci8\Oci8DbConnection',
            'dsn' => 'oci8:dbname=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SID=XXX)));charset=UTF8;', // Oracle
            'username' => 'xx',
            'password' => 'xxx#',
            'attributes' => [
                PDO::ATTR_STRINGIFY_FETCHES => true,
            ],
            'enableSchemaCache' => true,
            // Duration of schema cache.
            'schemaCacheDuration' => 3600,
            // Name of the cache component used to store schema information
            'schemaCache' => 'cache',
            'on afterOpen' => function ($event) {
                $event->sender->createCommand("ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'")->execute();
            }
        ],

yii2 session timeout not working

set property authTimeout in user component

and set propety enableAutoLogin to false
'user' => [
        'identityClass'   => 'common\models\User',
        'enableAutoLogin' => false,
        'authTimeout'     => 20
],

java - mysql binlog reader from remote server

1. Configure your server to enable binlog in my.cnf file. The bold configurations are required.

## enable binlog
server_id=1
log_bin = /path/to/your/binlogfile.log
expire_logs_days = 10
max_binlog_size = 100M
binlog-format = row

2. Grant REPLICATION SLAVE, REPLICATION CLIENT privileges to user to read binlog from remote server
Login mysql with root user, then run command below:

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'binloguser'@'%' IDENTIFIED BY '123456a@';

3. Test binlog reading from a remote server 

mysqlbinlog -R -h192.168.146.252 --port=3307 -ubinloguser -p mysql-bin.000001

Note: 
-R option instructs mysqlbinlog command to read the log file from the remote server
-h specify the ip-address of the remote server
-p This will prompt you for the password. 
mysqld-bin.000001 This is the name of the binary log file from the remote server that we are reading here

4. Read binlog with Java 
https://github.com/shyiko/mysql-binlog-connector-java

Yii2 - Gii generators - how to custom crud templates


1. Create your template folders in your application
yii2 - custom gii crud templates - folder structure








- The name of my template is "ndt"











Yii2 - using kartik Select2 as filter input of GridView



'filter' => Select2::widget([
    'name' => 'CampaignSearch[partner_id]',
    'model' => $searchModel,
    'value' => $searchModel->partner_id,
    'data' => ArrayHelper::map(
        Partner::getAll(), 'id', 'name'
    ),
    'size' => Select2::MEDIUM,
    'options' => [
        'placeholder' => '-- Tất cả --',
        'style' => 'width: 300px;'
    ],
    'pluginOptions' => [
        'allowClear' => true
    ],
    'addon' => [
        'prepend' => [
            'content' => '<i class="glyphicon glyphicon-folder-open"></i>'
        ]
    ],
]),

Yii2 session timeout settings


Edit @yourApp/config/main.php


'components' => [
    'user' => [
        'identityClass' => 'backend\models\User',
        'enableAutoLogin' => true,
        'identityCookie' => [
            'name' => '_cmsIdentity',
            'httpOnly' => true,
            'expire' => 1800,
        ],
        'authTimeout'=> 1800, // seconds
    ],
....
],