PHP重写一个包含文件 - 这是一个有效的脚本吗?

时间:2010-05-27 16:31:28

标签: php mutex atomic

我提出了这个问题:PHP mutual exclusion (mutex)

如上所述,我希望有几个消息来源偶尔发送他们的统计数据,这些统计数据将显示在网站的主页面上。
我的问题是我希望这是以原子方式完成的,因此统计数据的更新不会与在后台运行的另一个重叠。

现在,我想出了这个解决方案,我想让你的PHP专家来判断它。

stats.php

<?php
define("my_counter", 12);
?>

的index.php

<?php
include "stats.php";

echo constant("my_counter");
?>

update.php

<?php
$old_error_reporting = error_reporting(0);

include "stats.php";

define("my_stats_template",'
<?php
define("my_counter", %d);
?>
');

$fd = fopen("stats.php", "w+");
if($fd)
{
    if (flock($fd, LOCK_EX))
    {
        $my_counter = 0;

        try
        {
            $my_counter = constant("my_counter");
        }
        catch(Exception $e) { }

        $my_counter++;

        $new_stats = sprintf(constant("my_stats_template"), $my_counter);

        echo "Counter should stand at $my_counter";
        fwrite($fd, $new_stats);
    }
    flock($fd, LOCK_UN);
    fclose($fd);
}

error_reporting($old_error_reporting);
?>

多个客户端将每60秒调用一次“update.php”文件。 正如您所见,“index.php”将始终使用“stats.php”文件。

你有什么看法?

1 个答案:

答案 0 :(得分:0)

您可能会发现像Memcache这样的解决方案可能比每次要更新值时重写PHP文件更直观,更快速,更有用。

然后就是在数据库中进行stroing的想法,是的,我知道这很慢,但它是持久的。

最后,不是将PHP编写到文件中,为什么不将值本身写入共享文件并只读取它?这将很好地与您的锁定机制一起使用,并且不需要将“有效”的PHP写入一个只会让我觉得错误的文件。