CakePHP

ガベージコレクション(GC)をCakePHPで試してみる

目的

忘れやすいし、メモ。

使ってるのはCakePHP2.5.1

そのそもガベージコレクションとは??

こちらの方の説明が一番完結でわかりやすかったです。

PHPセッションのGC – まつぼ x Web

Sessionファイルがバカにみたいに多くなってしまうと、重くなるので消しましょうってことです。

上記リンクサイトさんではphp.iniで設定を変更し、cronで処理してましたが、今回こちらではCakePHPで設定していきたいと思います。

core.phpで色々設定

先に今回設定してみたcore.phpの設定です。とりあえずやりたいこととしては、ガベージコレクション以外にはCakePHP使ってますよというのを隠したい。ブラウザを閉じたらセッションを切りたい。あとはガベージコレクションを使って無駄なセッションファイルは排除していきたい。まとめると、

  • cookieの名前を変更
  • ガベージコレクションを使っていらないセッションのファイルを削除

という感じです。

今回設定したのはこんな感じです。

設定項目を説明

指定できるものは、’php”, cake’, ‘cache’です。
‘php’はサーバーにあるPHPの設定通り動きます。phpinfo()などで確認できますが、おそらく/var/lib/php/session/以下にsess_で始まるファイルが格納されてるハズです。
‘cake’の場合は、/app/tmp/sessions/以下に同様のファイルが格納されます。
‘cache’の場合は、キャッシュ内のセッションをAPC、memcacheのように格納することができるようになります。

これはそのまま、セッションが切れる時間を指定できます。注意するのはtimeoutは分単位になることです。

これはクッキー名を変更できます。デフォルトはCAKEPHPなので、あからさまにcakephpですよとアピールしてることになっちゃいますね。まあ、これだけで隠蔽できるわけじゃないですけど、必要とあれば変えられます。

iniで設定できるのはphp.iniの設定を上書きできます。

session.cookie_lifetime => 0はブラウザを閉じた時にクッキーが消えるようにクッキーの持続時間を0秒に設定しています。

session.gc_maxlifetime => 21600はガベージコレクションがどれくらいは発動するかをしていしている。この場合、timeoutで指定した時間よりも短い場合は、正常に動かないことがある。正常というか、現在のセッションを消しちゃう可能性があるってことなのかな?

session.gc_probability => 1 はガベージコレクションが起動する確立の分子。

session.gc_divisor => 100 はガベージコレクションが起動する確立の分母。

以上で、360分毎に100分の1の確立でガベージコレクションが発動してsess_で始まるファイルが消えます。

注意点

PHPの場合は、サーバー内のアプリケーションは1つのPHPを共有しますので、/var/lib/php/session以下のsessionが消えるとサーバー内のPHPアプリケーションのセッションが同じ様に処理されちゃうみたいです。(未検証です。)

なので、そこが問題だという場合は何か対策が必要かもしれません。

CakePHPでグラフを簡単につくれるHighChartsプラグインを使ってみた

HighChartsプラグインとは

CakePHPのプラグインで、ほとんどCake側の設定のみで様々なタイプのグラフが作成できます。

デモページも公開されています。
http://destinydrivenlive.com/highcharts/highcharts/highcharts_demo

Gitリポジトリから取得

gitレポジトリはこちら。
https://github.com/destinydriven/cakephp-highcharts-plugin

cloneしてくる

git clone https://github.com/destinydriven/cakephp-highcharts-plugin.git /app/Plugin/HighChart

1
2
git clone https://github.com/destinydriven/cakephp-highcharts-plugin.git /app/Plugin/HighChart
 

製作者が推奨されている方法

git init
git submodule add git://github.com/destinydriven/cakephp-high-charts-plugin.git Plugin/HighCharts
git submodule init
git submodule update

1
2
3
4
5
git init
git submodule add git://github.com/destinydriven/cakephp-high-charts-plugin.git Plugin/HighCharts
git submodule init
git submodule update
 

別にcloneして来ても特に変わらず。

Controllerに記述

ComponentとHelperを追記する

public $helpers = array(‘HighCharts.HighCharts’);
public $component = array(‘HighCharts.HighCharts’);

1
2
3
public $helpers = array(‘HighCharts.HighCharts’);
public $component = array(‘HighCharts.HighCharts’);
 

使い使いたいメソッドに下記を追加

public function pie() {
// ここでグラフの中身を整形します。オプションを渡して装飾できるようです。
$chartData = array(
array(
さくらVPSで借りたCentOSでLAMP環境のセッティング ‘name’ => ‘Chrome’,
‘y’ => 45.0,
すごく基本的なiptablesの設定 ‘sliced’ => true,
‘selected’ wholesale nfl jerseys => true
cheap mlb jerseys ),
array(‘IE’, 26.8),
array(‘Firefox’, 12.8),
array(‘Safari’, 8.5),
array(‘Opera’, 6.2),
wholesale jerseys array(‘Others’, 0.7)
7 );
$chartName = ‘PieChart’; //コイツをViewで呼び出します。なんか気持ち悪い。
$pieChart = $this->HighCharts->create( $chartName, ‘pie’ );
$this->HighCharts->setChartParams(
$chartName,
Role array(
‘renderTo’ => ‘piewrapper’, // 表示先のID。このidを取得してグラフを追加します。
‘chartWidth’ => 500,
‘chartHeight’ => 450,
‘chartTheme’ => ”,
‘title’ => ‘ブラウザ戦争’,
‘plotOptionsShowInLegend’ => TRUE,
‘creditsEnabled’ => FALSE
Junior )
);
$series = $this->HighCharts->addChartSeries();
$series->addName(‘ブラウザ戦争’)->addData($chartData);
$pieChart->addSeries($series);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public function pie() {
    // ここでグラフの中身を整形します。オプションを渡して装飾できるようです。
    $chartData = array(
        array(
           ‘name’ => ‘Chrome’,
           ‘y’ => 45.0,
           ‘sliced’ => true,
           ‘selected’ => true
            ),
       array(‘IE’, 26.8),
       array(‘Firefox’, 12.8),
       array(‘Safari’, 8.5),
       array(‘Opera’, 6.2),
       array(‘Others’, 0.7)
   );
   $chartName = ‘PieChart’; //コイツをViewで呼び出します。なんか気持ち悪い。
    $pieChart = $this>HighCharts>create( $chartName, ‘pie’ );
   $this>HighCharts>setChartParams(
        $chartName,
       array(
        ‘renderTo’     => ‘piewrapper’,  // 表示先のID。このidを取得してグラフを追加します。
            ‘chartWidth’   => 500,
            ‘chartHeight’  => 450,
            ‘chartTheme’   => ,
            ‘title’        => ‘ブラウザ戦争’,
            ‘plotOptionsShowInLegend’ => TRUE,
            ‘creditsEnabled’  => FALSE
            )
        );
    $series = $this>HighCharts>addChartSeries();
    $series>addName(‘ブラウザ戦争’)>addData($chartData);
    $pieChart>addSeries($series);
}
 

##Viewに記述

<div id=”piewrapper”></div>
<?php echo $this->HighCharts->render(‘PieChart’); ?>

1
2
3
<div id=“piewrapper”></div>
<?php echo $this>HighCharts>render(‘PieChart’); ?>
 

以上でこんな感じのグラフが作成されます。

表示確認

HighChartsDemoグラフ

デモページが見れちゃう

/my_project//high_charts/high_charts_demo

これでデモページを確認できてしまいます。他にも色々と確認できます。

なので、削除してしまうか、アクセスできないようにしておきましょう。