0

私は次のようにセッションに整数値を格納しようとしています:

if(!isset($_SESSION['images'])){

   if(!isset($_SESSION['user_id'])){
         $_SESSION['images'] = array();
         array_push($_SESSION['images'], (int)$newFilename );
   }
 } else {
        if(!isset($_SESSION['user_id'])){
             array_push($_SESSION['images'], (int)$newFilename);
             file_put_contents("upload.txt", (int)$newFilename);
        }
   }

しかし、同じコードは私のローカルホスト(php 5.3.13)では機能しますが、php 5.2.17でのホスティングでは機能しません(これが私がここで見ることができる唯一の違いです)。$ _SESSIONにオブジェクトを格納することにはいくつかの問題があることを知っていますが、次のような1次元配列だけを格納しようとしています。

$newFilename = $images->getLastFileId();
//$newFilename == array['200','201', '202'...n];

$ _SESSION ['images']に1つの要素がある場合、すべて正しく機能しますが、> 1の要素がある場合、エラーが発生し、オブジェクトがあること&object(__PHP_Incomplete_Class)#1を示します(phpがオブジェクトvar_dump($_SESSION)に格納しようとしているように見えます):$newFilename$images

array(1) { ["images"]=> &object(__PHP_Incomplete_Class)#1 (9) {     ["__PHP_Incomplete_Class_Name"]=> string(15) "ImageCollection" ["imgSize"]=> 
 string(0) "" ["imgAngle"]=> string(0) "" ["imgUrl"]=> string(0) "" 
 ["imgDir"]=> string(7) "upload/" ["thumbDir"]=> string(9) 
 "upload/m/" ["imgPreviewDir"]=> string(0) "" ["avatarsWidth"]=> int(50) 
["avatarsDir"]=> string(8) "avatars/" } }

繰り返しますが、このコードはローカルホストで正しく機能します。どこに問題があるのでしょうか?

UPDATE問題を解決しましたが、何がこの問題を引き起こしているのかよくわかりません。$_SESSION['images'] phpのバグかもしれませんが、名前を変更し た後、コードが正しく機能し始めます$_SESSION['imagesNew']。そのため、$_SESSION変数の名前は変数$imagesの名前と同じではなくなりました。

4

1 に答える 1

2

TL;DR - あなたが示したコードはこの動作を示すべきではありません。したがって、別の場所で発生する必要があります。

症状の詳細については、次のクラス定義があると想像してください。

class Test
{
  private $x = 'hello';
}

それをシリアル化しましょう:

file_put_contents('serialized.txt', serialize(new Test));

ファイルの内容 (これをコピーして貼り付けようとしないでください。動作しません):

O:4:"Test":1:{s:7:"Testx";s:5:"hello";}

さて、別のスクリプトで、(クラス定義なしで) みましょうunserialize():

var_dump(unserialize(file_get_contents('serialized.txt')));

出力:

object(__PHP_Incomplete_Class)#1 (2) {
  ["__PHP_Incomplete_Class_Name"]=>
  string(4) "Test"
  ["x":"Test":private]=>
  string(5) "hello"
}

投稿されたコードはそれを示唆していないようですが、表示された出力はオブジェクトの配列の出力であるため、それを機能させるには、最初に定義ImageCollectionする必要があります。require

require 'imagecollection.class.php';
// open your session here

またはを使用しautoloaderます。

于 2012-12-18T02:30:03.290 に答える