我想存储一些计数器,并希望根据需要增加。 此计数器与任何客户端无关,因此我无法使用会话或cookie。 我试过$ GLOBALS但是,这不是我想要的。
我想要类似的东西,假设我有3个php文件,每个都会做一些反制造。
的init.php
$_GLOBAL_VARIABLE['cntr1'] = 0;
file1.php
$_GLOBAL_VARIABLE['cntr1'] = $_GLOBAL_VARIABLE['cntr1'] + 7;
file2.php
$_GLOBAL_VARIABLE['cntr1'] = $_GLOBAL_VARIABLE['cntr1'] + ($_GLOBAL_VARIABLE['cntr1'] * 0.90);
file3.php
echo $_GLOBAL_VARIABLE['cntr1'];
所有三个文件(init.php除外)将在没有ant关系的情况下随机调用,init将调用一次。
我不想尝试数据库事务coz计数器制作是非常频繁的,文件i / o是一样的。我正在寻找一些方法将我的数据存储在服务器上,直到它启动并运行,有点像c#中的全局类和变量。
答案 0 :(得分:1)
如果您希望服务器中的商店全局可访问值而不使用数据库,cookie或会话,那么memcache
可能是您的解决方案。它是一个守护进程,允许您存储数据并在不同的连接请求中使用它。如果您经常访问,则必须以某种方式处理应用程序中的并发。
答案 1 :(得分:0)
我认为这会起作用
global $cntr1;
如果没有,那么您可以制作一个.inc.php
并将此文件包含在所有页面中。
这将解决您的问题。
答案 2 :(得分:0)
我确定这不是你想要的,但我已经使用fileread / filewrite将我的全局变量存储在驱动器上的文件中,可以读取,写入更新值等。这允许你设置很多全局变量作为int,我修改了我的全局变量代码作为迭代器,按照你传递的值来计算或倒计时。
这是我处理请求的简单快速课程:
<?php
class my_global{
protected $name;
protected $value;
static protected $path = './globals/';
public function __construct()
{
if(!is_dir(self::$path))
mkdir(self::$path);
}
public function change($name, $value)
{
$current = $this->get($name);
$this->set($name,$current+$value);
return $current+$value;
}
protected function set($name, $value)
{
$this->name = $name;
$this->value = $value;
$this->write();
}
protected function get($name)
{
if(file_exists(self::$path.$name))
{
$myFile = self::$path.$name;
$fh = fopen($myFile, 'r');
$value = fread($fh, filesize($myFile));
fclose($fh);
}
else
$value = 0;
$this->name = $name;
$this->value = $value;
return $value;
}
protected function write(){
$myFile = self::$path.$this->name;
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $this->value);
fclose($fh);
}
}
$my_global = new my_global();
?>
然后您可以调用$ my_global-&gt; change()方法来增加或减少计数器
<?php
echo $my_global->change('new_global',5).'<br>';
echo $my_global->change('anotherglobal',-2).'<br>';
echo $my_global->change('forme',7).'<br>';
?>
这比任何事情都更值得思考,但可以根据需要调整使用。