2015-06-20 14 views
0

我已經在PHP中使用SLIM框架來實現一些REST API。所有的REST API代碼都在index.php中,我使用的是全局變量。每個REST API函數都設置一個全局變量,而另一個子函數讀取它。現在選擇全局變量的原因是不把這個變量從一個函數傳遞到另一個函數,沒有別的。Apache index.php文件與全局變量的併發問題?

我想知道是否有可能存在併發問題,其中兩個REST請求交錯?這個index.php(OOPS)的單個對象是否爲所有請求實例化?

這是這個事件序列的樣子嗎?

Request 1 -> Set global var to '10' 
Request 2 -> Set global var to '9' 
Request 1 -> Reads global var as '9' 
Request 2 -> Reads global var as '9' 

回答

0

不,這不是問題。在PHP中,全局變量對於特定請求是唯一的。除了使用會話之外,您不能更改或讀取其他請求中的變量。

+0

MPM模塊用於什麼?還是一樣的答案? – Ouroboros

+0

任何關於這些細節的鏈接都是有幫助的。 – Ouroboros

+0

在[這個問題]中有關於線程安全的好建議(http://stackoverflow.com/questions/1623914/what-is-thread-safe-or-non-thread-safe-in-php),但通常該建議似乎是**而不是**使用多線程MPM。我在手冊中看不到任何關於不跨越請求的變量的明確內容,但它隱含在[Variable scope](http://php.net/language.variables.scope),[Thread safety](http:// php .net/manual/en/internals2.memory.tsrm.php),[數據持久性](http://php.net/manual/en/internals2.memory.persistence.php)和[Session](http:/ /php.net/manual/en/intro.session.php)。 –