SOFTELメモ

</> 技術者募集

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

関連するメモ

コメント