我正在尝试在会话中存储一个整数值,如下所示:
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);
}
}
但是相同的代码可以在我的localhost(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/" } }
同样,此代码在我的localhost上正常运行。哪个可能是问题?
更新我解决了问题,但我不太清楚导致此问题的原因。也许这是php bug,但我的代码在$_SESSION['images']
重命名为$_SESSION['imagesNew']
后才开始正常工作 - 因此$ _SESSION变量的名称不再与变量$ images的名称相同。
答案 0 :(得分: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
。