0

実行しようとしているコードは次のとおりです。ローカルホストと別のサーバーの PHP バージョン 5.3.2-1ubuntu4.11 で正常に動作していましたが、共有ホスティングの PHP バージョン 5.2.17 で問題が発生します。

<?php
/* PHP version PHP Version 5.2.17   
 * Server API   CGI/FastCGI
 */
session_start();
$products = array();
if (!isset($_SESSION['products'])) {
    $products = array("somedata1", "somedata2", "somedata3");
    $_SESSION['products'] = serialize($products);
    $_SESSION['test_products'] = serialize($products);
    echo "<br/>session products<br/>";
    print_r(unserialize($_SESSION['products']));
    echo "<br/>session test_products<br/>";
    print_r(unserialize($_SESSION['test_products']));
} else {
    echo "<br/>session products<br/>";
    print_r(unserialize($_SESSION['products']));
    echo "<br/>session test_products<br/>";
    print_r(unserialize($_SESSION['test_products']));
}
?>

初回実行時の出力

session products
Array ( [0] => somedata1 [1] => somedata2 [2] => somedata3 ) 
session test_products
Array ( [0] => somedata1 [1] => somedata2 [2] => somedata3 )

しかしリロード時

session products

Warning: unserialize() expects parameter 1 to be string, array given in /home/uaustral/public_html/itoi/test.php on line 17

session test_products
Array ( [0] => somedata1 [1] => somedata2 [2] => somedata3 )

私のPHPバージョンPHPバージョン5.3.2-1ubuntu4.11でも同じコードが正常に動作します

何か不足していますか (新しい PHP バージョンでは自動的に修正されます)、それとも古いバージョンの PHP バグですか?

4

3 に答える 3

1

register_globals有効になっている場合、の配列アイテム$_SESSIONは、そのキーによって変数としても知られています。

オンの場合register_globals

<?php
session_start();
var_dump($products);

シリアル化されていない文字列が表示されます。後で$products = array();暗黙的に変更していると言うからです$_SESSION['products']。解決策:無効register_globalsにします。補足として、そのデータをシリアル化する必要はありません。セッションは多次元配列を適切に保持できます。を呼び出す前に、必要なクラス定義がロードされていることを確認するかsession_start、autoload関数を使用してください。

于 2012-05-02T10:03:31.700 に答える
0

この投稿が役立つと思います:

http://www.phphelp.com/forum/index.php?topic=11483.0

「今は動いています...自分のマシンと本番サーバーの php.ini ファイルを比較しました。本番サーバーの php.ini ファイルで 'Register Globals' をオフにしたところ、カートは完全に動作しています!ありがとう"

于 2012-05-02T09:48:16.637 に答える
-1

これが役立つかどうかを確認してください:

http://www.php.net/manual/en/function.unserialize.php#105588 .

session_decode 関数もそう言っています。

于 2012-05-02T09:45:57.917 に答える