Home > Backend Development > PHP Tutorial > PHP adds a cache to article click statistics_PHP tutorial

PHP adds a cache to article click statistics_PHP tutorial

WBOY
Release: 2016-07-13 10:33:10
Original
851 people have browsed it

<?php
error_reporting(E_ALL);
$ROOT_PATH = '../';
include_once($ROOT_PATH . "include/config.php");
$update_time = 1800;//多长时间更新一次,单位是秒
$article_id = (isset($_GET['article_id']) && is_numeric($_GET['article_id']) && $_GET['article_id'] > 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('<a href="/">服务器忙,请稍候再访问</a>');
        }
        $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();
}
?>  
Copy after login

First create last_update.txt in the log directory, The content is 1155163400, (this is the time generated by the time() function).

The content of the click_log file is as follows:

13136|44
13104|31
23509|32
11407|5
12141|29  
Copy after login

The first number represents the ID of the article, and the second number represents the accumulated number of clicks.

Doing this will improve the execution efficiency of the program, whether it is a dynamic PHP page or html,

<script src="click.php?article_id=333"></script>  
Copy after login

This method of pages is very effective.

This is generally used to count the number of clicks on articles and other content. Generally, in static pages, it is used as above (you can save my above program as click.php). For dynamic pages, you can make the above code into an include file, and then include it in your article. However, you need to change the PHP code and pass in the article_id. Not much to say, PHP programmers will know how to do it. If you don’t understand the program, it will be useless for me to talk too much.

A few days ago, I often saw a lot of updates in the mysql process on my server, so I thought of this method of caching updates.

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; //How often to update, in seconds $article_id = (isset($_GET[...
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template