takasick のすべての投稿

CentOS 5.5(64bit) + Apache 2.2 + PHP 5.1でメモリー約1.7GBの壁

バッチ処理的なものを書いてたらぶち当たったのでメモ。

32bit環境だったらわかるんだけど、64bit環境でも部分的に32bitな部分が残ってるんだかなんだか、メモリーが約1.7GBしか確保できなくてエラーが出た。

大量にメモリーを使わないように書きなおして回避できたけど、なんだかちょっと納得行かない感じ。まぁそもそもそんなにメモリー使う実装はどうなのよ?というのもあるけど。。

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を入れてみた