从pthreads访问$ _SESSION变量

时间:2014-08-12 20:11:49

标签: php multithreading session pthreads scoping

我在使用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;

1 个答案:

答案 0 :(得分:0)

经过一番研究后,似乎会话变量不是线程安全的,事实上在会话关闭之前完全锁定。我不得不删除对会话的引用,只需将所需信息传递给函数或重新初始化它。

幸运的是,正在创建的物业经理没有业绩下滑。