phpスクリプトが最終行まで到達しているのにSEGVる件

f:id:saihoooooooo:20150409130821p:plain:w320

全く意味がわからず糞ハマってしまった。

phpバッチ処理を書いてたら突如「セグメンテーション違反です」と言われる。
にも関わらず処理は完了している???という謎の状況。
どうやらスクリプト自体は最終行まで到達しているようだが・・・。

Segmentation fault at end of PHP script | LogikDevelopment

色々探した結果上記のサイトに辿り着いた。
要はPHPがsoファイルを読み込むとき、mysql.soの前にcurl.soを読むと最後にSEGVる、と。

自分はRedshift使ってる時にハマったので試しにpgsql.soの後にcurl.soを読み込むようにしたところセグメンテーション違反は発生しなくなった。

単純にファイル名順に読み込んでるっぽいので下記で対応。

$ cd /etc/php.d
$ cat {mysql,pgsql,curl}.ini > zz_mysql_pgsql_curl.ini
$ mv curl.ini{,_bk}
$ mv mysql.ini{,_bk}
$ mv pgsql.ini{,_bk}

なんでこんなドバグな挙動が残っているんだろうかよくわからんけど、とりあえずよし。