杨小杰博客(Youngxj)提供免费教程下载和网站搭建技术教程,主要分享和发布网站源码,致力创造一个高质量网络资源教程的分享平台

php计数器

Young小杰2018-8-11 10:40网站搭建(6)1184查询中……小标签: 原创 php

有很久写文章了,因为最近在写一个小项目,所以博客暂时就没有更新。
昨天交流请里有个友友问我如何实现php的计数效果,我告诉他了实现原理,但是他紧接着来了句,你可以教我吗?我一看到消息,心想完蛋,这家伙是来要源码的。如果你直接说要源码,我就能拿给你了,你让我教你,小杰本着负责任的态度,也会教,但是从何说起?从php语法开始讲吗?显然不是很现实。废话也不多说了,小杰也没有其他意思,这是想讲讲关于提问的艺术。
今天花了一个多小时把php计数器的源码写出来,如果那位群友能看到,希望你能理解我当时的心情,谢谢。

文件方式计数器

function fileCounter($default=0){
		//文件名
		$file = './count.dat';
		//最大读取位数
		$Maxlenght = '10';
		if(!file_exists($file)){
			//如果计数器文件不存在
			//初始值
			$counter = $default;
			//新建文件
			$cf = fopen($file,"w");
			//写入数字
			fputs($cf,$counter);
			//关闭文件
			fclose($cf);
		}else{
			//取回当前计数器的值
			$cf = fopen($file,"r");
			//去除空格并取出值
			$counter = trim(fgets($cf,$Maxlenght));
			//关闭文件
			fclose($cf);
		}
		//计数器加一
		$counter++;   
		//写入新的数据      
		$cf = fopen($file,"w");
		fputs($cf,$counter);
		fclose($cf);
		return $counter;
	}

数据库方式计数器

sqlCounter($default=0){
		//数据表名
		$sql_table = 'counter';
		//数据库连接(地址,账号,密码)
		$conn=@mysqli_connect("localhost","root","root");
		
		//判断数据库是否正常连接
		if (!mysqli_select_db($conn,$sql_table)) {
			mysqli_close($conn);
			exit('error('.mysqli_errno($conn).'):'.mysqli_error($conn));
		}
		//判断数据表是否存在
		$result = mysqli_query($conn,"SHOW TABLES LIKE '%{$sql_table}%'");

		if ($result && mysqli_num_rows($result)) {
			//数据表存在的情况下直接读取数据
			$re=mysqli_query($conn,"select count from {$sql_table} where id='1'");
			$counter = mysqli_fetch_assoc($re);
			$count = $counter['count'];
		}else{
			//数据表不存在则直接创建数据表
			$count = $default;
			$sql = "CREATE TABLE `{$sql_table}` (
				`Id` int(11) NOT NULL AUTO_INCREMENT,
				`count` int(11) DEFAULT NULL,
				PRIMARY KEY (`Id`)
			);INSERT INTO {$sql_table} (id,count) VALUES ('1','{$count}');";
			$re=mysqli_multi_query($conn,$sql);
			if(!$re){
				exit('error('.mysqli_errno($conn).'):'.mysqli_error($conn));
			}
		}
		$up = "update {$sql_table} set count=count+1 where id='1'";
		mysqli_multi_query($conn,$up);
		mysqli_close($conn);
		return $count;
	}
sql方式的记得修改数据库连接信息,然后给数据库创建一个counter的数据表,其他都已经备注好了。

下面是class方式的汇总

<?php
/**
 * PHP计数器
 * @author Youngxj <blog@youngxj.cn>
 * @time 2018年8月11日
 * 使用方法:
$count  = new Counter();
sql方式:echo $count::sqlCounter();
文件方式:echo $count::fileCounter();
初始值:echo $count::fileCounter('100');
 */
class Counter{
	/**
	 * 文件形式计数
	 * @param  integer $default 初始值
	 * @return [type]           [description]
	 */
	public static function fileCounter($default=0){
		//文件名
		$file = './count.dat';
		//最大读取位数
		$Maxlenght = '10';
		if(!file_exists($file)){
			//如果计数器文件不存在
			//初始值
			$counter = $default;
			//新建文件
			$cf = fopen($file,"w");
			//写入数字
			fputs($cf,$counter);
			//关闭文件
			fclose($cf);
		}else{
			//取回当前计数器的值
			$cf = fopen($file,"r");
			//去除空格并取出值
			$counter = trim(fgets($cf,$Maxlenght));
			//关闭文件
			fclose($cf);
		}
		//计数器加一
		$counter++;   
		//写入新的数据      
		$cf = fopen($file,"w");
		fputs($cf,$counter);
		fclose($cf);
		return $counter;
	}
	/**
	 * sql方式计数
	 * @param  integer $default 初始值
	 * @return [type]           [description]
	 */
	public static function sqlCounter($default=0){
		//数据表名
		$sql_table = 'counter';
		//数据库连接(地址,账号,密码)
		$conn=@mysqli_connect("localhost","root","root");
		
		//判断数据库是否正常连接
		if (!mysqli_select_db($conn,$sql_table)) {
			mysqli_close($conn);
			exit('error('.mysqli_errno($conn).'):'.mysqli_error($conn));
		}
		//判断数据表是否存在
		$result = mysqli_query($conn,"SHOW TABLES LIKE '%{$sql_table}%'");

		if ($result && mysqli_num_rows($result)) {
			//数据表存在的情况下直接读取数据
			$re=mysqli_query($conn,"select count from {$sql_table} where id='1'");
			$counter = mysqli_fetch_assoc($re);
			$count = $counter['count'];
		}else{
			//数据表不存在则直接创建数据表
			$count = $default;
			$sql = "CREATE TABLE `{$sql_table}` (
				`Id` int(11) NOT NULL AUTO_INCREMENT,
				`count` int(11) DEFAULT NULL,
				PRIMARY KEY (`Id`)
			);INSERT INTO {$sql_table} (id,count) VALUES ('1','{$count}');";
			$re=mysqli_multi_query($conn,$sql);
			if(!$re){
				exit('error('.mysqli_errno($conn).'):'.mysqli_error($conn));
			}
		}
		$up = "update {$sql_table} set count=count+1 where id='1'";
		mysqli_multi_query($conn,$up);
		mysqli_close($conn);
		return $count;
	}
}

发表评论:

发表评论:

  • 虫虫爬 Lv 1

    打卡成功,现在时间:14点42分记得每天坚持打卡哦!

  • 诗梦 Lv 1

    打卡成功,现在时间:23点59分记得每天坚持打卡哦!

    • 教书先生 Lv 1

      回复了诗梦:我从你眼里看到了两样东西,一样是真诚,而另一样是眼屎。

  • 阿珏 Lv 1

    不要以为自己坚持不来,你一定会坚持熬夜玩手机。

  • FROYO Lv 1

    前来学习

  • 少小离家老大回,骚话学了一大堆。打卡成功,现在时间:11点17分记得每天坚持打卡哦!

  • 手机扫描二维码
    阅读体验更佳