PHP变量问题

时间:2011-09-02 13:24:35

标签: php ajax math auto-increment

这是我的代码

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

此代码所在的页面每秒都会使用AJAX重新加载,$APIkbpersec在40和0之间进行更改。

我基本上希望变量($SpeedTest)增加或减少,具体取决于$APIkbpersec是什么。

  • 如果$APIkbpersec小于30,我希望$SpeedTest每次刷新时减少1,至少为0.
  • 如果$APIkbpersec大于30,我希望$SpeedTest每刷新一次增加1,最多为10。

问题是我不知道这个问题是什么....我正在尝试将$SpeedTest写入txt文件,这样我就可以在每次刷新时读取它,每次刷新都会对它进行数学处理而不是用PHP重置

任何帮助将不胜感激

5 个答案:

答案 0 :(得分:3)

由于HTTP请求是无状态的,因此正在重置。每个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'];

答案 1 :(得分:2)

您应该使用$_SESSION来实现此目的 有关说明,请参阅HERE,但基本上您需要执行以下操作:

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 :(得分:2)

或者:

  • 在回复中返回$SpeedTest并来回传递。
  • 使用某种持久性存储,例如cookie或PHP会话。

两者都很容易实现。如果你想要持久存储,我会建议一个cookie,因为JS和PHP都可以共享它。会议,虽然明显的候选人,在这种情况下有点矫枉过正 - IMO。

答案 3 :(得分:0)

如果这是您的所有代码,问题很简单。每次运行脚本时,都会初始化所有变量的值。对于您的情况,这意味着$ SpeedTest的值不会持久 - 每次调用脚本时它都会重置为零。您可以使用@Michael建议的会话(可能是我的推荐),从文本文件或数据库中读取值,然后写出新的值,或者您可以将$ SpeedTest的值返回到您的AJAX脚本并将其传回进入php脚本作为参数。每个都有各种优点和缺点,但使用$ _SESSION超全局很容易做到,并且几乎不需要修改代码。

答案 4 :(得分:0)

如果您想对文件执行此操作,可以使用单个文件为变量存储单个全局值:
从文件(docs here)中读取数据:

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

将数据放入文件(docs here

$bytesWritten = file_put_contents( $data );

否则,您可以使用sessionsdatabase作为其他建议 没有cookie或会话,您就无法拥有真正的“每用户”解决方案,因此如果您需要坚持其他答案或使用带有会话/文件的混合解决方案
如果你使用请求解决方案(那种带有POST或GET变量的乒乓球)总是要注意,因为这些变量可以被用户改变。
其他要记住的事情:

  1. 文件和数据库记录会一直存在,直到您删除它们为止(因此您可能需要管理未删除的文件或记录)。
  2. 会话持续时间在您的服务器中配置(如果您需要长期持久性,它们可能会持续时间过长)。
  3. 通常数据库比文件更好(执行更多任务并为您的应用程序提供更多可伸缩性)但在某些情况下,如果您的数据库驻留在另一台主机并且与您的Web服务器不在同一主机上,则文件解决方案会更快(经过测试)