[請益] sem_acquire() 是 cross session 的嗎?

看板PHP作者 (meowyih)時間11年前 (2013/08/20 16:52), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串1/1
我要用 PHP 做一個簡單的搶答功能, 像是某個猜謎遊戲十點鐘開放,前三個答對的可以拿到獎品! 因為 PHP 每個 SESSION 都是獨立的, 我沒辦法寫一個 "真正的" global variable, 在不想用 MySQL 來做這麼簡單的事的情況下, 想到最簡單的方法是讓每個 SESSION 打開某個檔案, 檔案裏面一開始是 0,開過一次改寫成 1,如果打開後變 3 就拿不到獎品了。 因為要做到這點, 我需要一個 semaphore 確保一次只有一個 SESSION 能開這個檔案, 請問 sem_aquire() 是產生一個的 semaphore 給所有 SESSIONS 用的嗎? (抱歉寫了一堆只有最後一句才是問題 Orz) code 大概是這樣 $SEMKEY = 1; $sem_id = sem_get( $SEMKEY, 1 ); /* maximum one user */ if ( sem_acquire( $sem_id )) { /* 在這裏讀檔案看自己是第幾個答對的人 */ ... sem_release( $sem_id ); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.68.97.241

08/20 17:44, , 1F
用semaphore時php得加上--enable-sysvshm 編譯選項,
08/20 17:44, 1F

08/20 17:45, , 2F
有些環境應該預設應該不會有支援。使用flock或是sqlite
08/20 17:45, 2F

08/20 17:46, , 3F
跨平台性應該會好一些。
08/20 17:46, 3F

08/21 13:02, , 4F
試試 firebase ?
08/21 13:02, 4F

08/22 15:21, , 5F
memcached ?
08/22 15:21, 5F
文章代碼(AID): #1I4ovJsm (PHP)