2011-09-02 112 views
0

這裏是我的代碼PHP變量問題

echo ("<br/>"); 
if ($APIkbpersec < 30) { 
    global $SpeedTest; 
    echo ("Slow speed"); 
    $SpeedTest--; 
} 
if ($APIkbpersec > 30) { 
    global $SpeedTest; 
    echo ("High speed"); 
    $SpeedTest++; 
} 
echo $SpeedTest; 

頁這個代碼在被重新加載每一秒與AJAX和40和0

我基本上希望有一個變量(之間的$APIkbpersec變化$SpeedTest)增加或減少取決於什麼$APIkbpersec是。

  • 如果$APIkbpersec小於30,我要通過$SpeedTest 1每個刷新降低到最小的0
  • 如果$APIkbpersec是GREATERTHAN 30,我想$SpeedTest從由1每增加刷新到最大10.

問題是我不知道的porblem是什麼....進出口目前試圖寫$SpeedTest到一個txt文件,所以我可以在每次刷新讀取它做數學上它的每一個不刷新它正在重置在PHP

任何幫助將不勝感激

+4

你有沒有想過使用會話來存儲變量?當'$ APIkbpersec'剛好是30時會發生什麼? – Jrod

+0

我認爲它會爲你提供更多信息,如果您將創建2個變量與慢速和快速測試和之後的每個動作都會增加他們。比你不僅知道差別,而且知道每種類型的數量。 – varela

+0

你需要的變量是持久的在每個用戶的基礎還是需要它有一個獨特的全球價值? – CaNNaDaRk

回答

3

它被重置。每個AJAX調用都是PHP腳本的一個獨立事件。要使變量保持不變,必須將其存儲在$_SESSION中。

您沒有顯示您用於將其寫入文本文件的代碼,但除非您需要將代碼保存到用戶會話之外,否則這是錯誤的方法。你最好使用$_SESSION。如果您確實需要長期持久性,則應該使用數據庫。

session_start(); 

// Initialize the variable if it doesn't exist yet 
if (!isset($_SESSION['SpeedTest'])) { 
    $_SESSION['SpeedTest'] = 0; 
} 

echo ("<br/>"); 
if ($APIkbpersec < 30) { 
    echo ("Slow speed"); 
    $_SESSION['SpeedTest']--; 
} 
if ($APIkbpersec > 30) { 
    echo ("High speed"); 
    $_SESSION['SpeedTest']++; 
} 
echo $_SESSION['SpeedTest']; 
+0

但如果您需要在全球範圍內執行此操作,而不是針對單個用戶? – varela

+0

@varela然後一個數據庫是最合適的。 OP沒有提到全球系統的全球情況。 –

+0

@varela - 那麼你需要更長久的東西,比如數據庫或日誌文件中的條目。 –

2

你應該使用$_SESSION爲此目的。
一個解釋見HERE,但基本上你需要做到以下幾點:由於HTTP請求是無狀態的

session_start(); 
$SpeedTest = isset($_SESSION['speedTest']) ? $_SESSION['speedTest'] : 0; 

if ($APIkbpersec < 30) 
{ 
    echo ("Slow speed"); 
    $SpeedTest--; 
} 

if ($APIkbpersec > 30) 
{ 
    echo ("High speed"); 
    $SpeedTest++; 
} 
$_SESSION['speedTest'] = $SpeedTest; 

echo $SpeedTest; 
2

或者:

  • 返回$SpeedTest的響應,並通過來回。
  • 使用某種類型的持久性存儲,如cookie或PHP會話。

兩者都很容易實現。如果你想持久存儲,我會建議一個cookie,因爲JS和PHP都可以共享它。會議雖然是明顯的候選人,但在這種情況下有點矯枉過正 - 海事組織。

0

如果這是您的所有代碼,問題很簡單。每次腳本運行時,所有變量的值都被初始化。對於您的情況,這意味着$ SpeedTest的值不會持續 - 每次調用腳本時它都會重置爲零。您可以使用@Michael建議的會話(可能是我的建議),從文本文件或數據庫中讀取值,然後寫出新值,或者可以將$ SpeedTest的值返回到您的AJAX腳本並將其傳回進入php腳本作爲參數。其中每一種都有各種優點和缺點,但使用$ _SESSION超全局很容易,並且對代碼進行很少的修改。

0

如果你想與文件做它,你可以使用一個單獨的文件來存儲您的變量一個單一的全球值:從文件
讀取數據(docs here):

$data= file_get_contents('file.txt'); 

放入數據文件( docs here

$bytesWritten = file_put_contents($data); 

否則,您可以使用sessionsdatabase或其他建議。
如果沒有cookies或會話,您不可能擁有真正的「每用戶」解決方案,因此如果您需要其他答案或與會話/文件混合使用解決方案
如果您使用請求解決方案POST或GET變量)總是要注意,因爲這些變量可以被用戶改變。
其他的事情要記住:

  1. 文件和數據庫記錄最後直到您刪除它們(所以也許你需要管理未刪除的文件或記錄)。
  2. 會話持續時間服務器中配置(這樣他們就可以,如果你需要長期的持續性不會長久)。
  3. 通常數據庫比文件越好(在做更多的工作,並提供您的應用程序更多的可擴展性),但在某些情況下,文件的解決方案更快(測試)如果你的數據庫駐留在另一臺主機上,而不是在同一臺主機爲您的Web服務器上的特殊。