2013年1月2日水曜日

php の 変数と定数の比較

あけましておめでとうございます。

phpの書初め?がてら先日ふと気になったことがあったので検証してみました。

変数で値を持つのと定数(DEFINE)で値を持つとなにが違うのかと・・・


■ 検証1 Write
以下のコードを用いて検証

DEFINE (test1.php)

<?php
define('P_1','1');
define('P_2','2');
define('P_3','3');
define('P_4','4');
define('P_5','5');
define('P_6','6');
define('P_7','7');
define('P_8','8');
define('P_9','9');
define('P_10','10');
define('P_11','11');
・・・10万まで繰り返す・・・
define('P_100000','100000');
echo memory_get_usage();
?>

変数 (test2.php)

<?php
$P_1 = 1;
$P_2 = 2;
$P_3 = 3;
$P_4 = 4;
$P_5 = 5;
$P_6 = 6;
$P_7 = 7;
$P_8 = 8;
$P_9 = 9;
$P_10 = 10;
$P_11 = 11;
・・・10万まで繰り返す・・・
$P_100000 = 100000;
echo memory_get_usage();
?>

結果
$ time php test1.php
53942304
real    0m0.513s
user    0m0.465s
sys     0m0.047s

$ time php test2.php
38990512
real    0m11.841s
user    0m11.800s
sys     0m0.030s

Writeの部では DEFINE のほうが早いようです。ただし反面して
変数定義のほうがメモリ使用量が少ないことが判明
変数の長さとか関係あるのかな?と思い以下コードも念のため実行

DEFINE

<?php
define('P_000001','000001');
define('P_000002','000002');
define('P_000003','000003');
define('P_000004','000004');
define('P_000005','000005');
define('P_000006','000006');
define('P_000007','000007');
define('P_000008','000008');
define('P_000009','000009');
define('P_000010','000010');
define('P_000011','000011');
define('P_000012','000012');
・・・10万まで繰り返す・・・
define('P_100000','100000');
echo memory_get_usage();
?>

変数

<?php
$P_000001 = 000001;
$P_000002 = 000002;
$P_000003 = 000003;
$P_000004 = 000004;
$P_000005 = 000005;
$P_000006 = 000006;
$P_000007 = 000007;
$P_000008 = 000008;
$P_000009 = 000009;
$P_000010 = 000010;
$P_000011 = 000011;
・・・10万まで繰り返す・・・
$P_100000 = 100000;
echo memory_get_usage();
?>

結果
$ time php test3.php
53942304
real    0m0.507s
user    0m0.453s
sys     0m0.054s


$ time php test4.php
38990512
real    0m12.174s
user    0m12.133s
sys     0m0.029s
はい、変わりませんでした~

引き続き readの検証に移ります

2012年12月9日日曜日

SQUID: Your cache is running out of filedescriptors

SQUID で 以下のエラーが出た場合・・・

Your cache is running out of filedescriptors

要はファイルでスクリプタが足りませんよ~というエラー

1. 現在のSquidの状態を確認

# squidclient -p 8080 mgr:info | grep ‘file descri’

Maximum number of file descriptors: 1024
Available number of file descriptors: 1010
Reserved number of ile descriptors: 100

大概、ここの Maximum に引っかかっている

2. 調整 squid.conf

max_filedesc 数値

を追記
保存後 Squid を restart すれば 新しい値にて設定される

3. ついでに OS側も調整

/etc/sysctl.conf



fs.file-max = 数値(大体 65536)

を追記

sysctl -p

にて 設定を適用する

2012年12月2日日曜日

kernel: Clocksource tsc unstable

CentOS 6.3 仮想のゲストOSで
/var/log/messages に大量の

kernel: Clocksource tsc unstable (delta = XXXXXXXXX ns). Enable clocksource failover by adding clocksource_failover kernel parameter.

というログが出ていた。

仮想サーバーが 時刻同期のためにCPUのクロックカウンターをベースにしている故に発生するもののようです
最近のCPUはターボブーストやらスピードステップやらとクロック変動させるため
unstabe = 不安定だよ!って出ているみたいです

解決策:
以降のメッセージにあるとおり
Enable clocksource failover
をすればいいわけであり
代替のclocksource を用意すればいいってことですね

clocksource は 以下
# cat /sys/devices/system/clocksource/clocksource0/available_clocksource
kvm-clock tsc acpi_pm

自分は acpi_pm を使うので
ゲストOS上の
/etc/grub.conf のカーネルパラメーターに clocksource_failover=acpi_pm を追加


kernel /vmlinuz-2.6.32-279.el6.x86_64 ro root=/dev/mapper/vg_web01-lv_root rd_NO_LUKS rd_LVM_LV=vg_web01/lv_root rd_NO_MD crashkernel=auto clocksource_failover=acpi_pm KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=vg_web01/lv_swap LANG=ja_JP.UTF-8 rd_NO_DM rhgb quiet

2012年10月8日月曜日

Docomo 回線で iPhone5 を使う

巷で話題のSIMフリー iPhone5 を手に入れたので Docomo SIM でやってみました

一応 Android も持っているので いきなり主回線のSIM カットは怖いので今回使用したのはB-MOBILEさんのSIM




失敗してもいいように2枚セットのやつ(本来の用途と違います)

で 出来上がったものが

Docomoだとアンテナ立たないんですよねー・・・でも通信できてます

2012年9月14日金曜日

Yii をインストール

Yii を 使ってみたくなったので使ってみた

  1. Yii をダウンロード
    http://www.yiiframework.com/ から [ Download Yii ] を選択してダウンロード
  2. Yii を配置する

    ダウンロードした Yii を 解凍
    # tar -zxvf yii-1.1.12.b600af.tar.gz

    Apacheのアクセス可能な領域にコピー
    # cp -r yii-1.1.12.b600af /var/www/yii
    ※ Redhat人間なので /var/www 配下です
  3. プロジェクトの作成
    コマンドラインで スケルトンが作成されます
    移動して
    # cd /var/www/yii

    コマンド
    # ./framework/yiic webapp /var/www/hogehoge

    yiic webapp スケルトン作成先  でOKです
  4. ドキュメントルートを /var/www/hogehoge へ設定すれば
    して URL叩けば まずは完成です