[英]Accessing the $_SESSION variable from pthreads
使用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訪問超全局會話時,我需要做些特別的事情嗎? 還是我在這里想念的東西完全不同?
編輯:是的,我嘗試了全局$ _SESSION; 也一樣
經過更多研究之后,似乎會話變量不是線程安全的,實際上直到會話關閉之前,它都完全鎖定。 我必須刪除對會話的引用,而只是將所需的信息傳遞給該函數或重新初始化它。
幸運的是,所創建的物業經理不會造成性能下降。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.