update.PHPでは独自のセッションハンドラをプログラマが実装することができます。具体的には、session_set_save_handler関数を使うことで、標準のセッションハンドラが対応していないようなストレージにセッション情報を保存することができます。ところで、PHP5まではカスタムセッションハンドラの返り値の扱いが間違っていました。マニュアルではtrueかfalseを返すことになっているのですが、実際には失敗なら-1を、成功ならそれ以外を返すというインターフェースになっていました。これが、PHP7ではマニュアル通りになるよう修正されます。以下、PHP5でのセッションハンドラの利用例です。});session_id('baaz');session_start();session_regenerate_id(TRUE);session_write_close();このように、セッションハンドラ内でエラーが起きたときは-1を返す必要がありました。驚くべきことに、マニュアル通りにtrueを返そうがfalseを返そうが成功として扱われていたのです(trueとfalseを整数にキャストしても1と0なので、失敗ではない=成功として扱われる)。PHP7では次のように記述できます。});session_id('baaz');session_start();session_regenerate_id(TRUE);session_write_close();成功ならtrueを、失敗ならfalseを返すというわけです。してこうなったPHP内部のCの関数は次のような返り値で成功失敗を受け渡しています。ZEND_RESULT_CODE;今回のセッションハンドラはbooleanを返すPHP関数ですが、この返り値をそのままC関数の返り値に利用していたために意味が変わっていたというわけです。Cでありがちなうっかりミスと言えなくもないですが、今まで誰も気がつかなかったのがビックリですね。requestStockLike10@hnw境界値バグが大好物。自分の日記で書くには小ネタすぎるネタをQiitaに書いています。upLoginユーザーは見つかりませんでした。