月別アーカイブ: 7月 2011

PHPの謎バグ

PHPでオブジェクトを配列にキャストする場合、Object $objを$array = (array)$objみたいにキャストすると、$obj->propが$array[‘prop’]になるわけだけど、JSONで渡ってきた値をphpのjson_decodeでデコードしたオブジェクトをこのキャストした場合・・・

配列をvar_dumpしたときに

‘1’=>’北海道’
‘2’=>’青森’

みたいになるんで、$array[‘1’]にアクセスすると当然’北海道’が戻ってくるべきなんだけど、$array[‘1’]でも$array[1]でもnullが戻ってきてアクセス不能になるという謎現象に陥った。

$temporary = array();
foreach($array as $key=>$val){
$temporary[$key] = $val;
}

みたいな無駄な処理を通すと、$temporary[1]にアクセスすると’北海道’ が得られるようになった。

どうも、PHPの内部処理で型キャストで配列を作る場合に内部構造がおかしくなって、連想配列と数値インデックスの単純配列の動きがおかしくなってしまうようだ。

(9)


カテゴリー: PHP | コメントをどうぞ

支那方面からの攻撃 – port 3306 MySQL

何となくnetstat -anとか打ってみたら、124.243.125.33とかのIPからport3306に腐るほど接続が来ていた。

3306はMySQLのウェルノウンポート。
mysqlのユーザ管理はしてあるけど気持ち悪いので、/etc/my.cnfにskip-networkingオプションを設定した。

ローカルのサーバならルータのフィルタで3306を塞ぐとこだけど、VPSじゃMySQLへのネットワーク接続は不要(ローカルホストならソケット通信できる) なのでネットワーク機能をまとめて落とした(ネットワーク接続が必要なら、iptablesででも制限してやれば良いだろう)

(34)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ