PHP - 服务器端变量将永远“生存”?

时间:2010-11-03 10:25:13

标签: php variables server-side

我正在寻找一种简单的方法将计数器存储在服务器内存中以允许页面加载选择,类型(伪代码):

if counter is odd then load page-x 
else (even counter)  load page-y
increment counter by 1
store counter in server's memory

会话变量对多个用户没有帮助。

我知道这可以通过将字段存储到数据库中来实现,但这似乎是一种无聊的方法。想要更快的东西。

这就是为什么我想到了跨会话保存在内存中的一些服务器端变量....

9 个答案:

答案 0 :(得分:7)

使用APC,xCache或memcache将变量保存到缓存而不是数据库。但请注意,服务器重置会消除这些值。

答案 1 :(得分:3)

您所指的是A / B测试。您通常会有一个cookie来跟踪传入的访问者,然后确定是提供版本A还是版本B.

您使用cookie的原因是,如果用户访问同一页面并获得替代版本,他们会感到困惑。使用cookie会将访问者放在文本组A或测试组B中,并在每次访问时提供相关页面(只要cookie存在)。

答案 2 :(得分:3)

对于真正的50/50,请使用文件:

$pageToShow = file_get_contents("whatever.dat");

if ($pageToShow == "A") {
    // show page a
    file_put_contents("whatever.dat", "B");
} else {
    // show page b
    file_put_contents("whatever.dat", "A");
}

显然首先创建文件中只有字母“A”。

干杯。

答案 3 :(得分:2)

如果您已经打开了数据库连接,我会考虑使用它。我无法想象,查询一行可以在任何负载下给你性能问题。

如果您不想这样做,那么“奇/偶”检查的简单快捷方法可能是使用临时文件。

  • 如果文件存在,则条件为“奇数”

  • 如果不存在,则条件为“均匀”

确保对两个试图在同一时间创建或删除同一文件的实例race condition进行检查 - 在这种情况下,您必须确保脚本不会崩溃。 / p>

显然,即使重新启动服务器,这个解决方案仍然存在。

答案 4 :(得分:1)

Shared Memory扩展如果那么简单呢?

Memcached通常用于数据缓存,可选地分发。您可以从PHP memcache extension的页面开始阅读。

答案 5 :(得分:1)

除了已经提到的内容之外,请查看

或在PHP手册中:

答案 6 :(得分:0)

您可以简单地使用缓存机制(如另一个答案中所提出的),或者只是将您的值存储在文本文件中,而不是使用数据库。这将比缓存慢,但具有即使在服务器重置后也能保持持久性的优势。

答案 7 :(得分:0)

您似乎正在尝试进行A / B测试,让您查看Google Website Optimizer,这样您就可以进行一些非常详细的A / B分析。

您可以测试不同的网页或网页板块,找出哪一个可以带来更多转化。

我知道这个答案并没有直接回答您的技术问题,但它可能会解决您尝试解决的实际问题。

答案 8 :(得分:0)

如果只是偶然的,你想要服务A或B,你可以使用一个简单的访问时间开关:

<?php
if (filemtime(".switch") % 2):
  require "A";
else:
  require "B";
endif;

touch(".switch");

显然,这不是50/50的硬解决方案。