「技術」カテゴリーアーカイブ

CentOS5.5上のPHP 5.1.6 + APC 3.0.19で関数の二重定義が出来ちゃう?

動いてるプログラムを別環境に持って行ったら「Cannot redeclare」が出た。元環境の方では特にエラーは出てなかったんだけど、元環境の方もAPCを外してみたら同じエラーが出るようになった。

現象としては func.php に hoge() の定義があったとして、index.php から func.php を複数回 include() してもエラーにならない。

とりあえず function_exists() で二重定義しないようにしたけどさ。。

PHPで乱数を生成するrand()を調べた

http://www.php.net/manual/ja/function.srand.php を見ると、

注意: PHP 4.2.0 以降、 srand() または mt_srand() によりランダム数生成器にシードを与える必要はありません。 これは、この処理が自動的に行われるためです。

と、あったので、どんなもんかと検索してみたところ http://d.hatena.ne.jp/yoya/20080807 に行き着いた。

で、実際どうなってるんだ?と思いソースを調べてみた。

/ext/standard/rand.c の65行目に

php_srand(GENERATE_SEED() TSRMLS_CC);

があって、これが /ext/standard/php_rand.h の 52行目の

#define GENERATE_SEED() ((long) (time(0) * getpid() * 1000000 * php_combined_lcg(TSRMLS_C)))

で、php_combined_lcgは /ext/standard/lcg.c にあって、そこからlcg_seed()に行き着いたんだけど、

if (gettimeofday(&tv, NULL) == 0) {
LCG(s1) = tv.tv_sec ^ (~tv.tv_usec);
} else {
LCG(s1) = 1;
}

以下の部分でなぜランダムになるのか良くわからず。。

WordPressのiPhoneアプリでエラーが出るとき

URLに最後の”/”まで含むかたちで設定すると、きちんと設定できたように見えるんだけど、いざ編集しようとしてみると「Communication Error」でまともに使えないみたい。

結構悩んだあげく、URLの最後の”/”を消してみたら(このブログだと http://labo.samuraistyle.org/blog )なぜか解決。
(もしかしたらこの現象はサブディレクトリで運用している場合のみかも)

WordPressにobject-cache.phpを入れてみた

ページキャッシュだとSuper Cacheってプラグインが有名っぽいんだけど、行けるところまでダイナミックに行きたいと思ってオブジェクトキャッシュの方に挑戦。

オブジェクトキャッシュだと次のストレージを使うドライバが見つかった

  1. ファイル
  2. APC
  3. memcached
  4. Tokyo Cabinet

memcachedとTokyo Cabinetはインストールが面倒だったので今回はパスw ファイルの方は古いバージョンでの事例しか見つからなかったのでパス。ということで今回はAPCにしてみた。

参考: http://se-suganuma.blogspot.com/2010/07/wordpressapcobject-cache.html

続きを読む WordPressにobject-cache.phpを入れてみた

Amazon EC2のMicro InstanceにAmazon Linuxをインストールしてからやったこと

まずは全体的なところから

  • root宛てのメールを自分に転送
    vi /etc/aliases で root: {$メールアドレス} にしてから newaliases
  • タイムゾーンを日本標準時にする
    cp /usr/share/zoneinfo/Japan /etc/localtime で、一回ログオフしてつなぎなおせばOK。
    (あと crond の再起動が必要)
  • システム文字コードの変更
    vi /etc/sysconfig/i18n で、LANG=”ja_JP.UTF-8″ にすればOK。
  • iptablesの設定

続きを読む Amazon EC2のMicro InstanceにAmazon Linuxをインストールしてからやったこと