PHPでハマったことをPHPの落とし穴と題して逐次書いていきたいと思います。
問題
ログインができない!動いている環境とPHPのバージョンも合わせたのになぜ!?
$_REQUESTに$_COOKIEの値が入ってないぞ。
原因
$_REQUESTの中身はphp.iniのrequest_orderディレクティブの値に依存する。デフォルトではCookieのCが含まれてない。
PHP: コア php.ini ディレクティブに関する説明 - Manual
解決策
php.iniのrequest-orderディレクティブにCを追加する?
そうではなくCookieを使いたい場合はこういった環境依存のある$_REQUESTではなく$_COOKIEを使うべき。コードの意図も伝わりやすい。
しかし、一度大量に混入したcookie用途の$_REQUEST利用を全て修正するのは難しそうだ。単純にreplaceはできないので$_REQUESTでgrepして、文脈から判断するしかなさそうだ。
明確な理由がない限り$_REQUESTはおすすめできない。$_GET, $_POST, $_COOKIEを使うべきだ。
PHPのスーパーグローバル変数($_から始まるやつ)の扱いは名前が表す通り注意が必要だと思いました。
