ITエンジニアSAIの技術関連備忘録

技術的な内容を忘れないようにメモ....

Fuelphpでメール送信機能を実装する方法

1.環境

  Vagrant1.9.3(CentOS 7.1)
   PHP5.4
   Fuelphp1.7.3
 
 
2.導入方法

app/config/config.phpの下記箇所に `'email',` を追加する必要がある。
  /**************************************************************************/
  /* Always Load */
  /**************************************************************************/
  'always_load' => array(
       'packages' => array(
            ・・・省略
            'email',
       ),
  ),
 
 
3.おまけ

メール送信の処理
※参考程度に以下は自作関数で処理をまとめている
/**
* メール送信
* @param 宛先
* @param 送信者アドレス
* @param 件名
* @param 本文
* @return 送信結果 boolean
*/
  public static function sendMail($to, $from, $title, $body) {
 
       $email = Email::forge();
 
       // アドレスを指定
       $email->from($from);
       $email->to($to);
 
       // 表題を指定
       $email->subject($title);
 
       // 本文を指定
       $email->body($body);
 
       $result = $email->send();
 
       return $result;
  }
 

リモートリポジトリから特定のブランチを指定してcloneする方法

最近仕事の関係で、だいぶ更新が滞ってしまいました。
 
今回はメモ程度ですが、、、
gitにてクローンする際にブランチを指定しないとmasterブランチがクローンされてしまうので、
指定したブランチからクローンするやり方を調べました。
 
コマンドは至って簡単
 
gitコマンドのcloneに「-b」オプションを入れて {ブランチ名} を指定してあげればよいのですね。
 
git clone -b { ブランチ名 } { リポジトリのアドレス }
 
 
また、補足として
cloneする際にフォルダを指定したい場合は、
 
git clone -b { ブランチ名 } { リポジトリのアドレス } {フォルダ名}
 
とすればできます。
 
たとえば、
 
git clone -b { ブランチ名 } { リポジトリのアドレス } sample
 
ならば、sampleフォルダが作成されてその中にcloneされます。

Linuxのviコマンドで便利だなと思った瞬間 ~ ディレクトリ移動編

OS : CentOS 7
 
 
おそらくLinux使いな人からしたら当たり前なのだけど、、、
個人的にメモしておく。
 
目的編集ファイルへのディレクトリ移動
 
基本知識程度しか身に着けていないエンジニアからしたら
Linuxで目的編集ファイルまでのディレクトリ移動であれば以下のコマンドで行うと思う。
 
$ cd [ディレクトリ名]
 
目的のディレクトリに到達したら、
 
$ vi [ファイル名]
 
しかし、これだと毎回毎回lsコマンドでディレクトリを確認しなければ、どんなフォルダやファイルがあるかわからない。(把握していたら別だと思うけど)
 
そして、今回上記の手間を省いてくれる機能をviコマンドが持っていた。
 
それが、以下である。
 
$ vi [ディレクトリ名]
 
 
上記のコマンド実行後、以下のように今いるディレクトリ階層のフォルダをすべて表示して、矢印キーとエンターキーでディレクトリ移動を行えるようになる。
" ============================================================================
" Netrw Directory Listing                                        (netrw v153)
"   /Users/saiki-y/Documents/dev/php/vagrant/centos71/project/fuelphp/fuelphp-1.7.3/fuel/app
"   Sorted by      name
"   Sort sequence: [\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$
"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:special
" ==============================================================================
../
./
cache/
classes/
config/
lang/
logs/
migrations/
modules/
tasks/
tests/
themes/
tmp/
vendor/
views/
bootstrap.php
 
 
最近プライベートでのエディタはviであるため、少しづつ使っていき自分のものにしたいと思う。

OpenSSLでJavaで扱える鍵を生成をしてみる

 
1.インストー

OpenSSLインストー
「Win32 OpenSSL v1.1.0d Light」をダウンロード
 
 
2.今回生成する鍵のアルゴリズム簡易説明

①【RSASSA-PKCS1-v1_5 using SHA-256(RS256)】
  ※RS256は非対称アルゴリズムであり、公開鍵/秘密鍵のペアを使用する。
 
②【HMAC using SHA-256(HS256)】
  ※対称アルゴリズムであり、2つの当事者間で共有される1つの(秘密)鍵のみを使用する。
  ハッシュ計算対象の文字列を秘密鍵として、暗号化時と複合化時にソルトとして使用する。
 
  鍵ファイル生成などの必要はなし。
  互いに参照できる場所に秘密鍵を持たせる必要がある。
 
③【ECDSA using P-256 and SHA-256(ES256)】
 
 
 
3.鍵生成コマンド

【RSASSA-PKCS1-v1_5 using SHA-256(RS256)】
 
実行コマンド
秘密鍵と公開鍵を生成する
[秘密鍵]openssl genrsa -out rs256.key 2048
[公開鍵]openssl rsa -pubout < rs256.key > rs256.pub.key
 
上記生成した秘密鍵をpkcs8へ変換する
openssl pkcs8 -in rs256.key -out rs256.key.pkcs8 -topk8 -nocrypt
 
 
【HMAC using SHA-256(HS256)】
鍵の生成は不要のため、説明なし
 
 
【ECDSA using P-256 and SHA-256(ES256)】
 
実行コマンド
鍵ペアを生成する
openssl ecparam -genkey -name prime256v1 -noout -out es256-key-pair.key
 
鍵ペアから公開鍵と秘密鍵を生成する
[公開鍵]openssl ec -in es256-key-pair.key -outform PEM -pubout -out es256.pub.key
[秘密鍵]openssl ec -in es256-key-pair.key -outform PEM -out es256.key
 
秘密鍵をpkcs8形式に変換する
openssl pkcs8 -in es256.key -out es256.key.pkcs8 -topk8 -nocrypt
 
 

Gitにてリモートブランチのブランチ名を変更したい場合

GitLabでテスト環境へのリリース前準備にて、
リモートブランチを一旦リネームしたかった場合に手順が見つからなかったので、
Gitコマンドを叩いてリネームっぽい事を行った時のメモ
 
ローカル環境にて以下のコマンドを叩いていき、最終的にリモートブランチへプッシュを行い、
最後リモートブランチを削除すれば、リネームっぽいことが可能。
 
ローカルブランチ名を変更する
git branch -m hoge foo
 
 
リモートブランチを削除する
git push origin :hoge
 
 
変更済みのローカルブランチをリモートへプッシュする
git push origin foo
 
【学習参考書】

エンジニアのためのGITの教科書 (WEB Engineer’s Books)

独習Git

MySQLでERROR 2002 (HY000)が出たときの対処法

先日、仮想環境でmysqlの設定ファイルを弄ったあとに、再起動を行いログインしようとしたら、
 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
 
というようなエラーが発生した。
 
調べたら出てきたので、メモを残しておく。
 
どうやら、「mysql.sock」が存在しないことをが原因っぽい。
 
まずは以下に存在しているかを確認
$ ls -al /var/lib/mysql/
 
 
存在しない場合は、作成する。
$ sudo touch /var/lib/mysql/mysql.sock
 
 
ディレクトリ所有者の変更
$ sudo chown mysql:mysql /var/lib/mysql
 
 
MySQLの再起動
$ sudo systemctl restart mysqld.service
 
そして、MySQLへ再ログインすると無事ログインできる。
 

FuelphpでMySQL接続について

1.環境

 
2.テスト用のデータベースを用意する

 
mysql> CREATE DATABASE sampledb;
 
確認する
 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sampledb           |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
 
 
3.テスト用のテーブルを用意する

 
mysql> create table sampledb.person_info(id int not null primary key auto_increment, name varchar(50), age varchar(3), seibetu varchar(3), address varchar(255));
 
今回のテスト用テーブル構造は以下
 
mysql> show columns from person_info;
 
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int(11)      | NO   | PRI | NULL    | auto_increment |
| name    | varchar(50)  | YES  |     | NULL    |                |
| age     | varchar(3)   | YES  |     | NULL    |                |
| seibetu | varchar(3)   | YES  |     | NULL    |                |
| address | varchar(255) | YES  |     | NULL    |                |
+---------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
 
テストデータのDML
insert into sampledb.person_info(name, age, seibetu, address) values ("test1", "20", "0", "tokyo shibuyaku");
insert into sampledb.person_info(name, age, seibetu, address) values ("test2", "23", "1", "tokyo chuouku");
insert into sampledb.person_info(name, age, seibetu, address) values ("test3", "26", "0", "tokyo bunkyouku");
 
 
select * from person_info;
+----+-------+------+---------+-----------------+
| id | name  | age  | seibetu | address         |
+----+-------+------+---------+-----------------+
|  1 | test1 | 20   | 0       | tokyo shibuyaku |
|  2 | test2 | 23   | 1       | tokyo chuouku   |
|  3 | test3 | 26   | 0       | tokyo bunkyouku |
+----+-------+------+---------+-----------------+
3 rows in set (0.00 sec)
 
 
補足
mysqlでの文字コード設定は忘れずにしておこう。(今更言うが...)
 
まずは文字コードの確認
 
show variables like "chara%";
 
 
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
 
mysqlの設定ファイルに以下を追加する
 
/etc/my.cnf
[mysqld] ←これは最初からあるのであったら書かなくてよい
....
character-set-server=utf8 #mysqldセクションの末尾に追加
 
[client]
default-character-set=utf8 #clientセクションを追加
 
設定後、MySQLを再起動する
 
変更されているか再度確認
show variables like "chara%";
 
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
 
 
4.FuelPHP側のDB設定ファイルに接続情報を定義する

 
以下に移動する
fuel/app/config/development
 
db.php
<?php
/**
 * The development database settings. These get merged with the global settings.
 */
 
return array(
     'default' => array(
          'connection'  => array(
               'dsn'        => 'mysql:host=localhost;dbname=sampledb', //php5.5以前の場合は、MySQLのデフォルトport番号を使用していれば、特に指定しなくても良い。
               'username'   => 'saiki-y',
               'password'   => 'test',
           ),
     ),
);
 
※ MySQLのポートの確認
mysql> show variables like 'port';
 
 
5.接続処理

 
以下のコントローラーファイル内のindex部分を修正
fuel/app/classes/controller/welcome.php
USE \DB;
・・・・
public function action_index()
{
     $query= DB::select()->from('person_info');
     $results=$query->execute();
 
     $view= 'welcome/index';
     $twig= View_Twig::forge($view);
     $presenter= Presenter::forge($view, 'view', null, $twig);
     $presenter-> set('results', $results);
 
     return Response::forge($presenter);
}
 
6.取得したデータを画面に表示する

出力画面のHTMLはこんな感じ
 
app/views/welcome/index.twig
<DOCTYPE html>
<html>
<head>
        <meta charset="utf-8">
        <title>FuelPHP Framework</title>
        {{ asset_css('bootstrap.css') }}
</head>
<body>
personal_infoテーブル内のデータ</br>
{% for result in results %}
  {{loop.index}}件目</br>
  "Id" : {{result.id}}</br>
  "名前" : {{result.name}}</br>
  "年齢" : {{result.age}}</br>
  "性別" : {{result.seibetu}}</br>
  "住所" : {{result.address}}</br>
{% endfor %}
</body>
<html>
 
 
7.もし実行時に以下のようなDBエラーが発生した場合

 
DBドライバーがインストールされていない場合は、以下のようなエラーが発生する
 
Fuel\Core\Database_Exception [ Error ]: could not find driver
 
 
ドライバーをインストールしてあげよう。
 
yum -y install php-pdo
yum -y install php-mysql
 
インストール後、apacheを再起動する
 
service httpd restart
 
再起動後、アプリケーションへアクセスを行い挙動が上記のエラーが発生しないことを確認
 
 
8.出力結果

 
アクセスすると以下の用にperson_infoテーブル内のデータをすべて取得して画面に出力できている。

f:id:y_saiki:20170514104754p:plain