• 技术文章 >后端开发 >php教程

    PHP给文章点击统计加个缓存_PHP教程

    2016-07-13 10:33:10原创433
     0) ? intval($_GET['article_id']) : 0;//文章的ID
    if ($article_id > 0) {
        $filename = $ROOT_PATH . 'log/click_log.txt';
        $s = '';
        if (file_exists($filename)) {
            $content = file_get_contents($filename);
            $d_ary = array();
            if ($content) {
                $ary = explode("\n", $content);
                foreach ($ary as $line) {
                    $data_ary = explode('|', $line);
                    if (is_numeric($data_ary[0]) && is_numeric($data_ary[1])) {
                        $d_ary[$data_ary[0]] = $data_ary[1];
                    }
                }
            }
            if (array_key_exists($article_id, $d_ary)) {
                $d_ary[$article_id] = $d_ary[$article_id]+1;//将当前的文章的点击数加1
            } else {
                $d_ary[$article_id] = 1;
            }
            foreach ($d_ary as $key => $val) {
                $s .= $key . '|' . $val . "\n";
            }
        } else {
            $s .= $article_id . '|1' . "\n";//这个是初始化记录文件
        }
        //写记录文件
        $fp = fopen($filename, "w");
    //加入锁定
    if (flock($fp, LOCK_EX)) { // 进行排它型锁定
        fwrite($fp, $s);
        flock($fp, LOCK_UN); // 释放锁定
    } 
        //fwrite($fp, $s);
        fclose($fp);
        @chmod($filename, 0777);
        $last_update = file_get_contents('../log/last_update.txt');//取上一次更新的时间
        $last_update = intval($last_update);
        if (($last_update + $update_time) < time()) {
            //以下是数据库连接操作,我用的是ADODB,你可以改成你自己的
            require_once("adodb.inc.php");
            $db = NewADOConnection("$DB_TYPE");
            $db->debug = true;
            $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
            if (!$db->Connect("$DB_HOST", "$DB_USER", "$DB_PASS", "$DB_DATABASE")) {
                exit('服务器忙,请稍候再访问');
            }
            $content = file_get_contents($filename);
            $d_ary = array();
            if ($content) {
                $ary = explode("\n", $content);
                foreach ($ary as $line) {
                    $data_ary = explode('|', $line);
                    if (is_numeric($data_ary[0]) && is_numeric($data_ary[1])) {
                        $sql = "UPDATE article SET hits=hits+" . $data_ary[1] . " WHERE id=" . $data_ary[0];
                        $db->Execute($sql);
                    }
                }
            }
            //点击数更新完了,将这个记录文件清空
            $fp = fopen($filename, "w");
            fwrite($fp, '');
            fclose($fp);
            @chmod($filename, 0777);
            //将最后一次更新时间改为当前时间
            $fp = fopen('../log/last_update.txt', "w");
            fwrite($fp, time());
            fclose($fp);
            @chmod('../log/last_update.txt', 0777);
        
            $db->Close();//关闭数据库连接
        }
        exit();
    }
    ?>  

    首先在log目录下创建last_update.txt, 内容是 1155163400,(这是time()函数生成的时间)。

    click_log文件的内容是像下面这样的:

    13136|44
    13104|31
    23509|32
    11407|5
    12141|29  

    第一个数字代表文章的ID,第二个数字代表累积的点击数。

    这样做,会提高程序的执行效率,无论是动态的PHP页面还是html里,以

      

    这种方法的页面,都很有效。

    这个一般用于统计文章等内容的点击数的, 一般静态页里,像上面这样用的(可以把我上面的程序存成click.php)。 动态页里的话,可以把上面的代码做成一个包含文件,然后在你的文章中include进来,不过,要改一下这个PHP的代码,把article_id传进去。不多说了,PHP程序员都会知道怎么做,不懂程序的话,我讲太多也没用。

    前些日子因为我服务器上的mysql进程里,经常看见一大堆的update,所以就想了这种缓存更新的方式。

    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/752528.htmlTechArticle?phperror_reporting(E_ALL);$ROOT_PATH = '../';include_once($ROOT_PATH . "include/config.php");$update_time = 1800;//多长时间更新一次,单位是秒$article_id = (isset($_GET[...

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PHP 点击统计
    上一篇:帝国CMS的搜索表单语法规则_PHP教程 下一篇:一个简单的PHP MVC演示_PHP教程
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 活动帖问的有关问题徐老师不回答,再开一帖吧• PHP怎么调用java代码• 那些年一行学习的PHP(一)• 最近开发zen cart有些有关问题想咨询下 • 初学者问个简单的逻辑有关问题,求解答
    1/1

    PHP中文网