phpで稼働しているサービスを32bitから64bitに移行してハマった事
php5.3系のサービスをRedhat系32bitから64bitへ移行した際に若干はまった
「phpのarray_sliceやarray_mergeで配列から配列を生成した際にキー値が消失する」 という内容だった。
データを覗いてみるとキー値にintegerを指定してた。
上記の関数はキー値が振られ直すので
http://php.net/manual/ja/function.array-merge.php
そもそも使い方が悪い。というのが前提なのだが 「旧環境では動いてたんじゃ!」と言われると原因を話さないとどうにもならない。
って事で調べてみた。
結論
という仕様のためだった。
http://jp.php.net/manual/ja/language.types.array.php http://d.hatena.ne.jp/hnw/20070521
要するに32bit時にはPHP_INT_MAX(2147483647)以上の値をたまたまキーとして指定してたからキーが消失しなかったんだけど、64bitのinteger上限値が9223372036854775807となってしまい、 数値として扱われるようになって関数を噛ました瞬間に添字が振り直されてしまった。
多分余り役に立たない内容だけど、 何かの足しになるかも。と思って記しとく。