这是我的代码
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重置
任何帮助将不胜感激
答案 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,因为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 );
否则,您可以使用sessions或database作为其他建议
没有cookie或会话,您就无法拥有真正的“每用户”解决方案,因此如果您需要坚持其他答案或使用带有会话/文件的混合解决方案
如果你使用请求解决方案(那种带有POST或GET变量的乒乓球)总是要注意,因为这些变量可以被用户改变。
其他要记住的事情: