セッション変数にデータを保存しています。$_SESSION['hero'] にオブジェクトの配列を保持させたい。以下で使用している構文は、ローカル環境とホスティング アカウントの 1 つで正常に動作します。ただし、テスト中の別のホスティング アカウントでは機能しません。新しいホスティング環境でのこのスクリプトへの 2 回目の要求では、オブジェクトの配列は単なるオブジェクトになります。
使用している PHP のバージョンに問題があるのではないかと考えました。調べてみると、PHP 5.4.7 をローカルで使用しており、両方のホストされたアカウントで 5.2.17 を使用していることがわかります。両方のホストされたアカウントが PHP 5.2.17 を使用しているため、PHP のバージョンは問題ではないようです。
1 つのホストされたアカウントでコードが機能しない可能性があることを認識していない php.ini ファイルの設定はありますか? 他のサーバー設定?私のコード/理解に問題がありますか? アドバイスをいただければ幸いです。
これは、各ホスティング アカウントでこのコードを実行したときに得られる出力の画像です。
良い出力 - http://imgur.com/Ed8MTkr,zm9WaeV#1
悪い出力 - http://imgur.com/Ed8MTkr,zm9WaeV#0
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
$_SESSION['hero'][] = new Stdclass();
$heroIndex = count($_SESSION['hero']) - 1;
echo 'Last position in array: ' . $heroIndex;
echo '<pre>';
print_r($_SESSION['hero']);
echo '</pre>';
$hero = $_SESSION['hero'][$heroIndex]; //Seems to be the trouble line
echo '<pre>';
print_r($_SESSION['hero']);
echo '</pre>';
?>
解決済みの編集
ありがとうございます。register_globals でした。
ローカル環境の php.ini ファイルで register_globals を「オフ」から「オン」に設定してテストしたところ、新しいホスティング サーバーで発生していた予期しない動作が再現されました。
次に、ホストされているサーバーの .htaccess ファイルに次の行を追加しました (サーバーは私の php.ini ファイルを使用しないようです)。
php_flag register_globals off
修正を知ってよかったです。これを調査して、なぜ機能しなかったのかをよりよく理解してください。=)