保存变量(不是会话)

时间:2010-05-28 13:29:01

标签: php

这可能是一个愚蠢的问题,但如何保存不特定于特定会话的变量。您可能想要这样做的一个简单示例是访问者计数器 - 每次有人访问网页时会增加一个数字(注意 - 我实际上并没有这样做,我的应用程序不同,但这是我需要的功能)。我能想到的唯一方法是将变量写入文件,或将变量放入数据库。两者看起来都有点不雅。对这种事情有更好的方法吗?

8 个答案:

答案 0 :(得分:5)

如果需要保存全局状态,则需要保存全局状态。这通常在您已经注意到的文件或数据库中完成。

答案 1 :(得分:2)

根本不是“不优雅”。如果您需要永久保存某些内容(半),请将其放入数据库中。这就是数据库的用途。

答案 2 :(得分:1)

查看PHP http://uk3.php.net/serialize中的serialize()函数,您可以在其中将数组或类似数据写入文件并重新检索:

<?php
  // Save contents
  $var = array('pageCounter' => 1);
  file_put_contents('counter.txt', serialize($var));

  // Retrieve it
  $var = unserialize(file_get_contents('counter.txt'));
?>

否则将值保存到数据库。

答案 3 :(得分:0)

鉴于PHP是无状态的,并且每个页面加载基本上都是重新运行您的页面,如果您要保存将增加多个页面加载的变量(例如,不同用户的数量),您将不得不使用某种形式的服务器端存储 - 基于文件,数据库,等等 - 来保存变量。

答案 4 :(得分:0)

您可以尝试安装APC(备用PHP缓存),它具有很酷的功能,可以在所有PHP脚本之间共享数据,您可以尝试使用共享内存,或者像您说的那样,使用文件或数据库

答案 5 :(得分:0)

如果您希望它是永久性的,那么数据库和文件确实是您唯一的两种选择。

如果您只想将这些值临时存储在内存中,如果安装了APC,则可以执行以下操作:

// Fetch counter value back from memory
$success = false;
$counter = apc_fetch('counter', &$success);
if ($success) {
    // fetch succeeded
} else {
    // fetch failed
    $counter = 0;
}

// Increment the counter and store again
// Note that nothing stops another request/page from changing this value
// between the fetch and store calls.
$counter++;
apc_store('counter', $counter);

这只是一个例子。 对于计数器,最好使用apc_inc('counter') / apc_dec('counter')

据推测,其他操作码缓存有类似的方法。如果你没有运行操作码缓存......真的吗?您希望PHP在每次请求时重新编译页面吗?

答案 6 :(得分:0)

我想我找到了答案 - session_name('whatever')可用于为会话设置固定名称,我可以参考该数据以及会话特定会话。

答案 7 :(得分:0)

优雅,没有数据库,没有文件?

使用shmop将其存储在服务器内存中,并希望您的服务器不会重启!