我在使用PHP的pthreads库从Thread对象调用的函数访问会话变量时遇到问题。
从主线程调用该函数时,不会发生错误,一切正常。
但是从Thread对象运行时,我会收到以下错误:
> PHP Notice: Undefined variable: _SESSION
> PHP Notice: Undefined index: Properties Manager
> PHP Fatal error: Call to a member function getGroupValue() on a non-object
错误指定的行号都指向此代码块:
function connect_mysql_db($database, $write = false) {
$properties = $_SESSION['Properties Manager'];
if(!isset($database) || strlen($database)==0){
throw new Exception("No database specified");
}
// Read appropriate host, port, dbname, user & pass for this database
$host = $properties->getGroupValue($database, DB_HOST);
$port = $properties->getGroupValue($database, DB_PORT);
$db_name = $properties->getGroupValue($database, DB_NAME);
...Removed unnecessary code...
}
一点点搜索说我应该能够通过将 session_start(); 放在我的文件顶部来解决这个问题。 执行此操作后,除了以下内容之外,仍会打印其他错误:
> PHP Notice: A session had already been started - ignoring session_start()
所以我的主要问题是:在使用pthreads访问超全局会话时,我需要做些什么吗?或者,我在这里玩的东西是完全不同的吗?
编辑: 是的,我也尝试了 global $ _SESSION; 。
答案 0 :(得分:0)
经过一番研究后,似乎会话变量不是线程安全的,事实上在会话关闭之前完全锁定。我不得不删除对会话的引用,只需将所需信息传递给函数或重新初始化它。
幸运的是,正在创建的物业经理没有业绩下滑。