我制作了一个img编辑器,它在99.9%的情况下都能很好地工作。
然而,在这种罕见的0.1%的情况下,发生了一些奇怪的事情,我的会话记忆没有正确的值。
我在初始化类的页面上有这个:
$imgScreen = new img4crop();
// And here some settings like $imgScreen->setExtraJs($extraJs);
在这个类中,我有一个将$this
数据保存到数组的函数:
private function save(){
$_SESSION['cropper'][$this->uniqid] = serialize($this);
}
在init-page.php
中,我打开一个fancybox,将设置加载回类:
$info = unserialize($_SESSION['cropper'][$_GET['id']]);
// Should now be the same as $imgScreen
问题
有时CCD_ 3被设置为CCD_。我不知道为什么<这种情况很少发生>密钥已设置。当我调试并将echo $_SESSION['cropper'][$this->uniqid];
附加到save()
函数时,它会给我想要的值。这种情况很少发生>
那么,只有在这种罕见的情况下,我的会话价值会去哪里呢?为什么它不在fancybox屏幕上?
在第一条注释之后:初始化页面可以启动多个实例,每个实例在$_SESSION['cropper']
中都有自己的值。在上述情况下,它们都起作用,只是其中一个不起作用。在重新加载时,我启动了新的实例,但完全相同的屏幕不起作用,尽管我现在有了一个新的、新的id
编辑:更奇怪的是:如果图像所在的位置有一个与类同名的文件,那么就没有问题。奇怪的部分:除了最后一步(屏幕有3个步骤(,我使用ImageMagick之外,整个类没有关于文件的代码
需要注意的是:当我安装发生这种情况的页面时,目标文件也不存在,开始为空。
序列化对象时,必须确保在取消序列化对象之前加载基类(原型(。对于PHP本机对象,您不必做任何事情,它将加载基类。
您的变量$this是一个类的实例。为了$this的存在,基类必须存在。也许它大部分时间都在工作,因为自动加载器或加载项目的特定顺序。
正如预期的那样,这个解决方案是一个与实际代码无关的古怪的小东西:
在我的index.php中,我执行$_SESSION['cropper'] = array();
来重置数组,然后让显示编辑器屏幕的函数为cropper设置新的设置,这非常好。
在那个html中,我有一个带有反缓存的图像:
echo '<img src="'.$image_url.'?'.time.'" />';
当$image_url
为空/未定义时出现问题,导致类似以下的源:?1420793438
。它从一个?
开始,所以它实际上是在调用index.php?1420793438
。
在index.php
开始时,我们重置,导致一个空数组。