看板 PHP 關於我們 聯絡資訊
我要用 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
rickysu:用semaphore時php得加上--enable-sysvshm 編譯選項, 08/20 17:44
rickysu:有些環境應該預設應該不會有支援。使用flock或是sqlite 08/20 17:45
rickysu:跨平台性應該會好一些。 08/20 17:46
liaosankai:試試 firebase ? 08/21 13:02
chrisQQ:memcached ? 08/22 15:21