[[IT知识]] 纯文件操作打造简易投票系统:PHP实战案例

[复制链接]
查看: 17|回复: 0
发表于 昨天 15:54 | 显示全部楼层 | 阅读模式
易博V9下载

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

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

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

纯文件操作打造简易投票系统:PHP实战案例

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

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

ajax.php

  1. <?php
  2. $val = @$_POST['val'];
  3. if("1"==$val){
  4. $time = time();
  5. $time2 = date('Y-m-d',$time);
  6. $file1 = 'data.txt';
  7. $file2 = 'val.txt';
  8. $f1 = fopen($file1,'r+');
  9. $f2 = fopen($file2,'r+');
  10. $t1 = fread($f1,'99');
  11. $t2 = fread($f2,'99');
  12. if('2012-11-15'){
  13. if($t1==$time2){
  14. $rs['bv'] = round((16-(strtotime('2012-11-15')-strtotime($t1))/86400)/16*40,1)+60;
  15. $rs['hv'] = 270*($rs['bv']/100);
  16. $rs['zv'] = $t2;
  17. }else{
  18. $f1 = fopen($file1,'w+');
  19. $f2 = fopen($file2,'w+');
  20. $t1 = fread($f1,'99');
  21. $t2 = fread($f2,'99');
  22. $rs['bv'] = round((16-(strtotime('2012-11-15')-strtotime($time2))/86400)/16*40,1)+60;
  23. $rs['hv'] = 270*($rs['bv']/100);
  24. $rs['zv'] = round(999999*($rs['bv']/100));
  25. fwrite($f1,$time2);
  26. fwrite($f2,$rs['zv']);
  27. }
  28. }else{
  29. $rs['bv'] = 100;
  30. $rs['hv'] = 270;
  31. $rs['hv'] = $t2;
  32. }
  33. fclose($f1);
  34. fclose($f2);
  35. echo json_encode($rs);
  36. }else
  37. //if("2"==$val)
  38. {
  39. $time = time();
  40. $time2 = date('Y-m-d',$time);
  41. if('2012-11-15'>$time2){
  42. $file3 = 'ip.txt';
  43. $f3 = file($file3);
  44. $ip = $_SERVER['REMOTE_ADDR'];
  45. if(!in_array($ip."\r\n",$f3)){
  46. $f4 = fopen($file3,'a+');
  47. fwrite($f4,$ip."\r\n");
  48. $file2 = 'val.txt';
  49. $f2 = fopen($file2,'r+');
  50. $t2 = fread($f2,'99');
  51. $t2 = $t2+1;
  52. $m2 = fopen($file2,'w+');
  53. fwrite($m2,$t2);
  54. fclose($f2);
  55. fclose($f4);
  56. fclose($m2);
  57. echo $t2;
  58. }else{
  59. echo 2;
  60. }
  61. exit;
  62. }else{
  63. echo 1;
  64. }
  65. }
  66. ?>
复制代码

html引用页面代码,我用ajax

  1. <script>
  2. function lookview(){
  3. $.post("ajax.php",{val:1},function(data){
  4. var obj=eval("("+data+")");
  5. $("#bv").html(obj.bv);
  6. $("#zv").html(obj.zv);
  7. var gd = "-"+obj.hv+"px";
  8. $("#lh_box").css({ "margin-top":gd});
  9. });
  10. }
  11. function addview(){
  12. $.post("ajax.php",{val:2},function(data){
  13. if("1"==data){
  14. alert("对不起,浇筑活动已过期,请期待下次活动!");
  15. return false;
  16. }else if("2"==data){
  17. alert("对不起,一个人只能浇筑一次!如果您没有留下您的联系方式请填写。");
  18. return false;
  19. }else{
  20. $("#zv").html(data);
  21. }
  22. });
  23. }
  24. lookview();
  25. </script>
复制代码

代码大体看一下,其实就是以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来判断才行,不然一直都是不重复的。

易博软件介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1、请认真发帖,禁止回复纯表情,纯数字等无意义的内容!帖子内容不要太简单!
2、提倡文明上网,净化网络环境!抵制低俗不良违法有害信息。
3、如果你对主帖作者的帖子不屑一顾的话,请勿回帖。谢谢合作!
3、问答求助区发帖求助后,如有其他用户热心帮您解决问题后,请自觉点击设为最佳答案按钮。

 
 
QQ在线客服
QQ技术支持
工作时间:
8:00-18:00
软著登字:
1361266号
官方微信扫一扫
weixin

QQ|小黑屋|Archiver|慈众营销 ( 粤ICP备15049986号 )|网站地图

自动发帖软件 | 自动发帖器 | 营销推广软件 | 网络营销工具 | 网络营销软件 | 网站推广工具 | 网络推广软件 | 网络推广工具 | 网页推广软件 | 信息发布软件 | 网站推广工具 | 网页推广软件

Powered by Discuz! X3.4   © 2012-2020 Comsenz Inc.  慈众科技 - Collect from 深圳吉宝泰佛文化有限公司 公司地址:罗湖区黄贝街道深南东路集浩大厦A1403

返回顶部 返回列表