以下の方法で直る
pear upgrade --force Archive_Tar
pear upgrade --force Console_Getopt
pear upgrade PEAR
アリかどうかは悩ましいところ。
以下の方法で直る
pear upgrade --force Archive_Tar
pear upgrade --force Console_Getopt
pear upgrade PEAR
アリかどうかは悩ましいところ。
バッチ処理的なものを書いてたらぶち当たったのでメモ。
32bit環境だったらわかるんだけど、64bit環境でも部分的に32bitな部分が残ってるんだかなんだか、メモリーが約1.7GBしか確保できなくてエラーが出た。
大量にメモリーを使わないように書きなおして回避できたけど、なんだかちょっと納得行かない感じ。まぁそもそもそんなにメモリー使う実装はどうなのよ?というのもあるけど。。
動いてるプログラムを別環境に持って行ったら「Cannot redeclare」が出た。元環境の方では特にエラーは出てなかったんだけど、元環境の方もAPCを外してみたら同じエラーが出るようになった。
現象としては func.php に hoge() の定義があったとして、index.php から func.php を複数回 include() してもエラーにならない。
とりあえず function_exists() で二重定義しないようにしたけどさ。。
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;
}
以下の部分でなぜランダムになるのか良くわからず。。
まずは全体的なところから
続きを読む Amazon EC2のMicro InstanceにAmazon Linuxをインストールしてからやったこと
原因はSELinux。。止めちゃいたいところだけど、そうもいかなかったので
ls -lZ
で確認後
chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t {$module_name}.so
でOK。
ってやると失敗するので http://dqn.sakusakutto.jp/2010/08/phpimagick.html を参考に /usr/bin/php-config を以下のように直す
・zlibのインストール
yum install zlib-devel
・pecl zip のインストール(最新はエラーが出てだめなので少し古いもの)
pecl install zip-1.8.10
・メモリーが足りなさそうなエラーが出たら
/usr/share/pear/pearcmd.php に @ini_set(‘memory_limit’, ’16M’); を入れる
php.ini の expose_php を off にする