任何的程序和软件都是离不开对文件的操作的,其实说的通俗了一点,所有的程序其实都是对文件的操作,都是对文件中等的某些字符的操作。当然说到文件就有很多。Txt、doc、sql、ini等的文本文件gif、jpg、png等的图片文件当然还有很多swf,flv等的视频文件。有很多很多。既然所有的程序、系统都是文件组成,所以文件是个比较敏感的东西,尤其是在linux这样的操作系统下就更是如此。

文件的权限是个比较敏感的问题,但很多人并不重视,其实合理的对文件分配权限是可以很大的提高程序的安全性的。

今天简单的说一下一个对txt文件的操作。很多时候网站都想做一个这样的功能,一个投票或者类似顶一下的这样的功能。限制一个访客使用一次。在哪个时间结束。显示有多少人参与。类似这样的。

分析这个功能,首先这个人数、百分比肯定是要随点击来变的。再者不能忘了的就是这个蓝环的高度。外层这个遮罩是整个环的高度的1-百分比。这样读取就实现了。

所以我们有的时候搞这样一个活动可能也就是几天,没有太大的必要再重新建一个表来判断ip地址(当然是你的访客并没有太大的话),那么我们就可以利用文件来实现这个功能。首先一个txt文件存储参与人数,一个txt文件来存储日期,一个txt文件来存储ip(我以前也做过一个统计访客在线人数的功能,但是用的是一个dat文件,这样的文件可能更高效一些,这里我们还是用txt).上代码

ajax.php

简述一些php对文件的操作,投票活动的实现

PHP

$val = @$_POST['val'];

if("1"==$val){

$time = time();

$time2 = date('Y-m-d',$time);

$file1 = 'data.txt';

$file2 = 'val.txt';

$f1 = fopen($file1,'r+');

$f2 = fopen($file2,'r+');

$t1 = fread($f1,'99');

$t2 = fread($f2,'99');

if('2012-11-15'){

if($t1==$time2){

$rs['bv'] = round((16-(strtotime('2012-11-15')-strtotime($t1))/86400)/16*40,1)+60;

$rs['hv'] = 270*($rs['bv']/100);

$rs['zv'] = $t2;

}else{

$f1 = fopen($file1,'w+');

$f2 = fopen($file2,'w+');

$t1 = fread($f1,'99');

$t2 = fread($f2,'99');

$rs['bv'] = round((16-(strtotime('2012-11-15')-strtotime($time2))/86400)/16*40,1)+60;

$rs['hv'] = 270*($rs['bv']/100);

$rs['zv'] = round(999999*($rs['bv']/100));

fwrite($f1,$time2);

fwrite($f2,$rs['zv']);

}

}else{

$rs['bv'] = 100;

$rs['hv'] = 270;

$rs['hv'] = $t2;

}

fclose($f1);

fclose($f2);

echo json_encode($rs);

}else

//if("2"==$val)

{

$time = time();

$time2 = date('Y-m-d',$time);

if('2012-11-15'>$time2){

$file3 = 'ip.txt';

$f3 = file($file3);

$ip = $_SERVER['REMOTE_ADDR'];

if(!in_array($ip."\r\n",$f3)){

$f4 = fopen($file3,'a+');

fwrite($f4,$ip."\r\n");

$file2 = 'val.txt';

$f2 = fopen($file2,'r+');

$t2 = fread($f2,'99');

$t2 = $t2+1;

$m2 = fopen($file2,'w+');

fwrite($m2,$t2);

fclose($f2);

fclose($f4);

fclose($m2);

echo $t2;

}else{

echo 2;

}

exit;

}else{

echo 1;

}

}

?>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

$val=@$_POST['val'];

if("1"==$val){

$time=time();

$time2=date('Y-m-d',$time);

$file1='data.txt';

$file2='val.txt';

$f1=fopen($file1,'r+');

$f2=fopen($file2,'r+');

$t1=fread($f1,'99');

$t2=fread($f2,'99');

if('2012-11-15'){

if($t1==$time2){

$rs['bv']=round((16-(strtotime('2012-11-15')-strtotime($t1))/86400)/16*40,1)+60;

$rs['hv']=270*($rs['bv']/100);

$rs['zv']=$t2;

}else{

$f1=fopen($file1,'w+');

$f2=fopen($file2,'w+');

$t1=fread($f1,'99');

$t2=fread($f2,'99');

$rs['bv']=round((16-(strtotime('2012-11-15')-strtotime($time2))/86400)/16*40,1)+60;

$rs['hv']=270*($rs['bv']/100);

$rs['zv']=round(999999*($rs['bv']/100));

fwrite($f1,$time2);

fwrite($f2,$rs['zv']);

}

}else{

$rs['bv']=100;

$rs['hv']=270;

$rs['hv']=$t2;

}

fclose($f1);

fclose($f2);

echojson_encode($rs);

}else

//if("2"==$val)

{

$time=time();

$time2=date('Y-m-d',$time);

if('2012-11-15'>$time2){

$file3='ip.txt';

$f3=file($file3);

$ip=$_SERVER['REMOTE_ADDR'];

if(!in_array($ip."\r\n",$f3)){

$f4=fopen($file3,'a+');

fwrite($f4,$ip."\r\n");

$file2='val.txt';

$f2=fopen($file2,'r+');

$t2=fread($f2,'99');

$t2=$t2+1;

$m2=fopen($file2,'w+');

fwrite($m2,$t2);

fclose($f2);

fclose($f4);

fclose($m2);

echo$t2;

}else{

echo2;

}

exit;

}else{

echo1;

}

}

?>

html引用页面代码,我用ajax

JavaScript

function lookview(){

$.post("ajax.php",{val:1},function(data){

var obj=eval("("+data+")");

$("#bv").html(obj.bv);

$("#zv").html(obj.zv);

var gd = "-"+obj.hv+"px";

$("#lh_box").css({ "margin-top":gd});

});

}

function addview(){

$.post("ajax.php",{val:2},function(data){

if("1"==data){

alert("对不起,浇筑活动已过期,请期待下次活动!");

return false;

}else if("2"==data){

alert("对不起,一个人只能浇筑一次!如果您没有留下您的联系方式请填写。");

return false;

}else{

$("#zv").html(data);

}

});

}

lookview();

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

functionlookview(){

$.post("ajax.php",{val:1},function(data){

varobj=eval("("+data+")");

$("#bv").html(obj.bv);

$("#zv").html(obj.zv);

vargd="-"+obj.hv+"px";

$("#lh_box").css({"margin-top":gd});

});

}

functionaddview(){

$.post("ajax.php",{val:2},function(data){

if("1"==data){

alert("对不起,浇筑活动已过期,请期待下次活动!");

returnfalse;

}elseif("2"==data){

alert("对不起,一个人只能浇筑一次!如果您没有留下您的联系方式请填写。");

returnfalse;

}else{

$("#zv").html(data);

}

});

}

lookview();

代码大体看一下,其实就是以2012-11-15为活动到期日期,将999999为活动的最多也叫满员人数,如果访客在活动期内访问并且是第一次访问就可以投票,而考虑到可能并没有多少人访问,可以判断在活动日期内访问的日期和存储日期不同,就代表过了一天,就按活动剩余天数/总天数*999999这个总人数来获得参与获得人数,并写入。其实说到底这也是个骗人的功能。要知道,其实网路上的绝大部分的数据并不是真实的。这个功能不多说,虽然用到了几个特殊的功能,包括转化json数据等。但今天我们说说file和fopen等的函数,file是将整个文件以行为单位写入一个数组,我们可以在val=2的写入投票可以看出,虽然file_put_contents可以写入文件一个数组,但是却是写入到一行中。所以我们要用fwrite来写入换行。这里要注意几个fopen的参数,查下手册可以看到其有r,r+,w,w+,a,a+等。这个地方有的人看说明搞了半天不知道有什么区别,r和w都有读写的方式,但是其实r是真正意义上的读的方式,w才是真正写的方式,w+是将文件截取为0,才是真正意义上的重新写入。不然用r还是追加,而a是真正意义上的追加。带+都是如果文件不存在就会创建这个文件。很多所\r\n不能写入换行,其实是因为php中双引号和单引号是不一样的,用双引号php会进行变量等特殊字符的解析,所以用双引号才能写入换行,但是要注意的是,在判断ip是否存在时,获取的ip也要补上\r\n来判断才行,不然一直都是不重复的。

程序本天成,妙手偶得之!我们只是代码的搬运工!

php投票系统中各个文件的作用说明,简述一些php对文件的操作,投票活动的实现...相关推荐

  1. Linux系统中mv命令的作用是什么?

    与其它操作系统不同,在Linux系统中大部分操作都可以通过命令来完成,只要我们熟练掌握各种各样的命令,使用linux系统时就会变得游刃有余.那么Linux系统中mv命令的作用是什么?mv命令是move ...

  2. 漫谈 ClickHouse 在实时分析系统中的定位与作用

    ClickHouse 是一款由俄罗斯Yandex公司开源的OLAP数据库,拥有着卓越的性能表现,在官方公布的基准测试中,ClickHouse的平均响应速度是Vertica的2.63倍.InfiniDB ...

  3. 机器视觉系统中相机镜头选型技巧_工业相机在机器视觉系统中的地位和作用

    一.什么是工业相机 工业相机是机器视觉系统中的一个关键组件,其最本质的功能就是将光信号转变成有序的电信号.选择合适的相机也是机器视觉系统设计中的重要环节,相机的选择不仅直接决定所采集到的图像分辨率.图 ...

  4. 让Redis在你的系统中发挥更大作用

    Redis在很多方面与其他数据库解决方案不同:它使用内存提供主存储支持,而仅使用硬盘做持久性的存储:它的数据模型非常独特,用的是单线程.另一个大区别在于,你可以在开发环境中使用Redis的功能,但却不 ...

  5. 让Redis在你的系统中发挥更大作用的几点建议

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/105.html?1455868313 Redis在很多方面与其他数据库解决 ...

  6. 几点建议,让Redis在你的系统中发挥更大作用

    原文地址:http://antirez.com/post/take-advantage-of-redis-adding-it-to-your-stack.html Redis在很多方面与其他数据库解决 ...

  7. WMS系统中条形码技术的作用

    仓储在企业的整个供应链中起着至关重要的作用,如果不能保证正确的进货和库存控制及发货,将会导致管理费用的增加,服务质量难以得到保证,从而影响企业的竞争力.传统简单.静态的仓储管理已无法保证企业各种资源的 ...

  8. linux系统中pwd命令的作用,Linux运维pwd命令有什么用途?linux系统

    Pwd命令用于显示当前所在的位置,是Linux运维工作人员需要掌握的Linux文件和目录操作命令之一.对于Linux运维工作,Linux命令是必不可少的.随着技术的发展,市场对于Linux运维人才的需 ...

  9. linux比较两个文件命令cmp,Linux系统中使用cmp和comm命令来比较两个文件

    cmp cmp 命令:比较任意两个类型的文件,且吧结果输出到标准输出,默认文件相同不输出,不同的文件输出差异 必要参数 -c 显示不同的信息 -l 列出所有的不同信息 -s 错误信息不提示 选择参数 ...

最新文章

  1. big endian和 little endian
  2. php框架laravel:数据库建立:artisan
  3. AWK如何打印从某一列到最后一列的内容
  4. Java黑皮书课后题第3章:**3.27(几何:点是否在三角形内)假设一个平面上有一个直角三角形。编写程序,提示用户输入一个点的x坐标和y坐标,然后判断这个点是否在该三角形内
  5. 数据结构与算法————九九乘法表
  6. 【原创】基于phpGrace+uniApp开发之:5.登录界面增加图片验证码
  7. 为什么持续集成和部署在开发中非常重要?
  8. [JBoss] JNDI与JBossNS
  9. Python基础函数学习笔记(二)
  10. 面试被问项目上线没_从面试官角度谈观察到的程序员技能瓶颈
  11. es search delete
  12. 如何卸载CAD 2020 ?怎么把AutoCAD 2020彻底卸载删除干净重新安装的方法【转载】
  13. python基础篇:字符画生成~甜心教主
  14. Office2021专业增强版激活报错0xc004f074以及尝试办法
  15. 360插件化RePlugin踩坑
  16. oracle remap语句格式,Oracle remap_schema需要注意的问题
  17. 5类人最适合做程序员,你属于哪一类?
  18. Windows10系统变慢,用上这19招,电脑性能大幅度提升!
  19. 解决error while accessing a target resource. resource is perhaps not available or a wrong access was
  20. 新PC如何在不激活系统的情况下查看各项参数(Win10)

热门文章

  1. 清晰扫描件怎么弄:试试扫描裁缝ScanTailor Advanced吧 | 含scantailor使用方法
  2. 【计组期末复习】机器周期和时钟周期、控制单元的功能:取指周期的微操作命令、取数指令的微操作、存数周期的微操作
  3. streamx如何支持我司线上实时作业
  4. 3个技巧教你做好微博号运营
  5. 完整的保存onetab的书签信息
  6. 充电系列-1-msm8909充电驱动常见修改
  7. 百度文心一言推出内测专用独立 App;暴雪回应被网易起诉:未收到相关诉状;iOS 17或支持第三方应用商店 | 极客头条
  8. Linux环境安装+阿里云+jdk8
  9. 深大uooc学术道德与学术规范教育第五章
  10. 何水无鱼?何山无石?何人无父?何女无夫?何树无枝?何城无市?