【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] がなくなっているといった事態になるでしょう。
コメント