小编Vex*_*nda的帖子

__PHP_Incomplete_Class_Name错误

我们随机得到一些非常奇怪的错误日志.即使使用相同的参数/动作/等,它们也不会发生在每个页面上,并且它们似乎不可重复,每个页面的崩溃位置和上下文都不同.但几乎所有都有错误的__PHP_Incomplete_Class_Name作为原因.

一个这样的错误是:

main():脚本尝试执行方法或访问不完整对象的属性.请确保在调用unserialize()之前加载了您正在尝试操作的对象的类定义"LoginLogging",或者提供__autoload()函数来加载类定义

问题是,没有"LoginLogging"类.当它被保存到会话中时,它所引用的对象是ScormElement类型.转储变量给出:

__PHP_Incomplete_Class::__set_state(array(
 '__PHP_Incomplete_Class_Name' => 'LoginLogging',
 'intUserId' => '64576',
 '__intUserId' => '64576',
 'intScormId' => '665',
 '__intScormId' => '665',
 'intScoId' => '9255',
 '__intScoId' => '9255',
 'strElement' => 'cmi.core.lesson_location',
 '__strElement' => 'cmi.core.lesson_location',
 'strValue' => '1',
 'dttTimeModified' => QDateTime::__set_state(array(
   'blnDateNull' => false,
   'blnTimeNull' => false,
   'strSerializedData' => '2011-08-31T08:05:22-0600',
   'date' => '2011-08-31 08:05:22',
   'timezone_type' => 1,
   'timezone' => '-06:00',
 )),
 '__strVirtualAttributeArray' => array (),
 '__blnRestored' => true,
 'objUser' => NULL,
 'objScorm' => NULL,
)
Run Code Online (Sandbox Code Playgroud)

正确保留所有属性,并匹配ScormElement的类定义.但是班级名称是错误的.这里没有名为LoginLogging类.

造成这种情况的原因是什么?我们如何修复它?

编辑:这只是一个例子.其他错误在结构上非常相似,但会影响其他类类型,并且具有不同的不完整名称.但是,所有不完整的名称都具有正确类名的相同字符串 …

php session serialization apc

12
推荐指数
4
解决办法
2万
查看次数

当同一客户端一次多次请求同一脚本时,PHP会话处理

所以这是我的测试设置:

session_start();
if(!isset($_SESSION['bahhhh']))
    $_SESSION['bahhhh'] = 0;
$_SESSION['bahhhh']++;
sleep(5);
die('a'.$_SESSION['bahhhh']);
Run Code Online (Sandbox Code Playgroud)

我期望发生的是每次我点击页面时,它返回一个不同的数字.

但是如果我使用多个标签,并在第一个标签的5秒内刷新它们,它们都返回相同的数字.(这不是客户端缓存,因为5秒的延迟仍然很明显.)

为什么这样做,我该如何解决这个问题?

它似乎与文件和数据库数据有着同样奇怪的缓存问题,并且阻止我构建一个工作的互斥锁以防止一次多次运行相同的代码.

这是另一个更简单的例子:

echo microtime();
sleep(10);
Run Code Online (Sandbox Code Playgroud)

运行3次,每次间隔2秒,所有三次返回相同的微秒.WTF?

php session mutex

3
推荐指数
1
解决办法
1114
查看次数

标签 统计

php ×2

session ×2

apc ×1

mutex ×1

serialization ×1