【php】Notice: Unknown: Skipping numeric key 0. in Unknown on line 0
問題
こんなエラーが出ました。
Notice: Unknown: Skipping numeric key 0. in Unknown on line 0
何ですかこれ。
答え
phpのセッションが、第一階層で数字をキーとして利用することができないため発生するエラーです。
こんなコードで再現できます。
<?php
//Noticeが表示されない環境は設定を変えて
ini_set('display_errors', 1);
error_reporting(E_ALL);
//問題のコードは以下
session_start();
$_SESSION[0];
かつて存在した、register globals関連の影響で、$_POST['0'] や $_SESSION[123] などを、$0 や $123 に展開するわけにはいかないので、チェックしているのでしょうか。
phpのソースには、「数字のキーはイヤだよ」と書かれているようです。
(ext/session/php_session.h の終わりの方で)
if (key_type == HASH_KEY_IS_LONG) {
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Skipping numeric key %ld", num_key);
continue;
}
Notice なので、表示されなくて気付かれないこともあるかもしれません。そのときは $_SESSION[123] = 'hoge'; などしたときに、次のページでは $_SESSION[123] がなくなっているといった事態になるでしょう。