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