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 中存储对象存在一些问题,但我试图在其中存储一个像这样的一维数组:

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

当 $_SESSION['images'] 有一个元素时,一切正常,但如果有 >1 个元素,我有一个错误&object(__PHP_Incomplete_Class)#1,并var_dump($_SESSION)表明我有一个对象(看起来像 php 试图存储在$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/" } }

同样,此代码在我的本地主机上正常工作。问题可能出在哪里?

更新我解决了问题,但我不太确定是什么导致了这个问题。也许是 php 错误,但我的代码在重命名$_SESSION['images'] 为 后开始正常工作$_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 回答