QA@IT

【PHP】決済代行への売上要求時に curl_exec() で Segmentation fault が発生してしまう

2381 PV

ウェブサーバーの移管を行ったところ、
不可解な現象が発生しており、お手上げ状態です。

サーバーの保守会社にも連絡は入れているのですが、
まだ原因は判明しておりません。

解決策もしくは疑うべき場所があれば、
ご教授頂けないでしょうか。

【環境】

サーバー:ニフティクラウド
OS:CentOS 6.5
言語:PHP 5.3.3(CodeIgniter)
DB:MySQL 5.1.71
決済代行:ペイジェント

本番サーバー:IPが3つ
試験サーバー:IPが1つ

【概要】

ウェブサーバーの移管後、
決済代行会社に売上課金要求を行う際に、
途中で処理が止まる様になってしまいました。

決済代行会社からは、
自社分も含め計5社分のアカウントを発行してもらっており、
1つのコントローラーの中で、各社毎にループで要求を投げております。
全部で5ループで、接続情報・証明書などは都度切り替えています。

不可解なのは、処理が中断する場合としない場合があることです。

1ループ目の処理に関しては、必ず成功いたします。
逆に2ループ目で、100%処理が止まってしまいます。

原因が分からず、現在は1社分ずつ手動で要求を行っております。

なお、テスト環境(本番と同等)ではエラーは発生しません。
もちろんサーバー移管前も発生しておりません。

【エラー詳細】

ペイジェントより提供されているモジュール
「HttpsRequestSender.php」の423行目、

$str = curl_exec($this->ch);

という箇所で、Segmentation fault (core dumped) が発生し、
処理が中断してしまいます。

エラーが返されて処理が続行される... ということもありません。

ペイジェントに問い合わせたところ、
接続元のIPが登録されていないものであった場合でも、
エラーは返してくれるとの事です。

今回の場合は、2ループ目は通信自体が到着していないと言われました。

【試したこと】

・アクセス許可されているIPの再確認
・ペイジェントモジュールが5.3対応のものであることの再確認
・ループの頭で5秒間処理を停止
・ループの頭でペイジェントモジュールを再インスタンス化

  • PHP-users 5270 とか -
  • libcurlの参照するSSLのライブラリをNSSからOpenSSLへ変更する事で解決致しました。alice-asahina さん、ありがとうございました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。