问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于php自动签到。 我想问的是写完代码之后如何实现它自己一直运行?php放在后台不是要有人发请求

发布网友 发布时间:2022-04-06 02:40

我来回答

2个回答

懂视网 时间:2022-04-06 07:01

php签到功能的实现方法:首先在数据库里建两张表,一个是用户的积分表,一个是签到状态表;然后通过时间戳的判断,及时更新状态表;最后根据上次签到时间和这次签到时间进行比较判断有没有漏签和今日是否已签到即可。

推荐:《PHP视频教程》

首先我在数据库里建了两张表,一个是用户的积分表,一个是签到状态表,分来用来记录用户的积分数和先到状态

在用户签到状态表中我们有一个字段,last_sign_time,即上一次签到时间,每次可以签到的时候把这个时间与当前时间进行比较 如果相差为0天,则说明今天已签到(这个签到是24小时内只能签到一次,即两次签到时间要相差24小时以上).如果等于一天则今日可以签到,如果2天及其以上则说明漏签了.

通过时间戳的判断,及时更新状态表,并且当可以签到的时候则对用户积分表进行操作,即更新用户积分.

<?php
$user_id=@$_REQUEST['user_id'];
//功能:计算两个时间戳之间相差的日时分秒
//$begin_time 开始时间戳
//$end_time 结束时间戳
function timediff($begin_time,$end_time)
{
 if($begin_time < $end_time){
  $starttime = $begin_time;
  $endtime = $end_time;
 }else{
  $starttime = $end_time;
  $endtime = $begin_time;
 }

 //计算天数
 $timediff = $endtime-$starttime;
 $days = intval($timediff/86400);
 //计算小时数
 $remain = $timediff%86400;
 $hours = intval($remain/3600);
 //计算分钟数
 $remain = $remain%3600;
 $mins = intval($remain/60);
 //计算秒数
 $secs = $remain%60;
 $res = array("day" => $days,"hour" => $hours,"min" => $mins,"sec" => $secs);
 return $res;
}


function upuserscore($current_total_day){
$user_id=@$_REQUEST['user_id'];
//读取数据库配置信息的ini文件
 $ary=parse_ini_file('db.ini');
 $db_login_name=base64_decode($ary['db_login_name']);
 $db_login_password=base64_decode($ary['db_login_password']);
 $db_host=base64_decode($ary['db_host']);
 $db_name=base64_decode($ary['db_name']);
//链接数据库
 $scorelink=mysqli_connect($db_host,$db_login_name,$db_login_password);

mysqli_select_db($scorelink,$db_name); //选择数据库

//检查积分表里是否有该用户 有的话则更新数据 没有的话则插入数据
$scoreq = "SELECT * FROM user_score WHERE user_id=$user_id"; //SQL插入语句
 mysqli_query($scorelink,"SET NAMES utf8");

 $rs = mysqli_query($scorelink,$scoreq); //获取数据集
 if(!$rs){
  exit(json_encode(array('status'=>"success",'code'=>"1",'error'=>mysqli_error($scorelink))));
 }
 
 if(mysqli_num_rows($rs)){//该用户有数据 则更新其积分信息
  $total_score="";
  while($row = mysqli_fetch_row($rs)) {
  $total_score=$row[4];
  }
  $scoreusdateq = "UPDATE user_score SET user_total_score ='98' WHERE user_id=$user_id;"; //更新
  mysqli_query($scorelink,"SET NAMES utf8");
  $ustaters = mysqli_query($scorelink,$scoreusdateq); //获取数据集
  if($ustaters ==1){
   exit(json_encode(array('status'=>"success",'code'=>"100")));
  mysqli_close($scorelink);//关闭连接 
  exit();
  }else{
   exit(json_encode(array('status'=>"success",'code'=>"1")));
   mysqli_close($scorelink);//关闭连接
   exit();
  }
 }else{//没有该用户数据 则插入其积分信息
  $scoreinsertq = "insert into user_score (user_id,user_total_score)values($user_id,10)"; //SQL插入语句
  mysqli_query($scorelink,"SET NAMES utf8");

  $rs = mysqli_query($scorelink,$scoreinsertq); //获取数据集

  if(!$rs){
   exit(json_encode(array('status'=>"success",'code'=>"1",'error'=>mysqli_error($scorelink))));
  }
  if(strpos($q,"SELECT") === false){
   exit(json_encode(array('status'=>"success",'code'=>"100")));
  }

  mysqli_close($scorelink);//关闭连接

 }

}




//读取数据库配置信息的ini文件
 $ary=parse_ini_file('db.ini');
 $db_login_name=base64_decode($ary['db_login_name']);
 $db_login_password=base64_decode($ary['db_login_password']);
 $db_host=base64_decode($ary['db_host']);
 $db_name=base64_decode($ary['db_name']);

//链接数据库
 $link=mysqli_connect($db_host,$db_login_name,$db_login_password);

mysqli_select_db($link,$db_name); //选择数据库

//检查签到表里是否有该用户 有的话则更新数据 没有的话则插入数据
$q = "SELECT * FROM user_signin WHERE user_id=$user_id"; //SQL插入语句
 mysqli_query($link,"SET NAMES utf8");

 $rs = mysqli_query($link,$q); //获取数据集
 if(!$rs){
  exit(json_encode(array('status'=>"success",'code'=>"1",'error'=>mysqli_error($link))));
 }
 
 if(mysqli_num_rows($rs)){//该用户有数据 则更新其签到信息
  $last_time="";
  $total_day="";
  while($row = mysqli_fetch_row($rs)) {
  $last_time=$row[4]."<br/>";
  $total_day=$row[5];
 }
  //根据上次签到时间和这次签到时间作比较判断有没有漏签和今日是否已签到
  $current_total_day=intval($total_day)+1;
  $current_day=time();
  $ary = timediff($last_time,$current_day);
 if($ary[day]==0){//今天已签到
  exit(json_encode(array('status'=>"success",'code'=>"5")));
  mysqli_close($link);//关闭连接 
  exit();
 }else if($ary[day]==1){//没有漏签
  $usdateq = "UPDATE user_signin SET last_sign_time='$current_day', total_day='$current_total_day' WHERE user_id=$user_id;"; //更新
  mysqli_query($link,"SET NAMES utf8");
  $ustaters = mysqli_query($link,$usdateq); //获取数据集
  if($ustaters ==1){
  upuserscore($current_total_day);
   //exit(json_encode(array('status'=>"success",'code'=>"100")));
  mysqli_close($link);//关闭连接 
  exit();
  }else{
   exit(json_encode(array('status'=>"success",'code'=>"1")));
   mysqli_close($link);//关闭连接
   exit();
  }
 }else{//漏签过
 $usdateq = "UPDATE user_signin SET last_sign_time='$current_day', total_day=1 WHERE user_id=$user_id;"; //更新
 mysqli_query($link,"SET NAMES utf8");
 $ustaters = mysqli_query($link,$usdateq); //获取数据集
 if($ustaters ==1){
  upuserscore($current_total_day);
  //exit(json_encode(array('status'=>"success",'code'=>"100")));
  mysqli_close($link);//关闭连接 
  exit();
 }else{
  exit(json_encode(array('status'=>"success",'code'=>"1")));
  mysqli_close($link);//关闭连接
  exit();
 }
 }

 }else{//没有该用户记录则插入
 $current_day=time();
 $insertq = "insert into user_signin (user_id,last_sign_time,total_day)values($user_id,'$current_day',1)"; //SQL插入语句
  
 mysqli_query($link,"SET NAMES utf8");
 $insertrs = mysqli_query($link,$insertq); //获取数据集

 if(strpos($insertrs,"SELECT") === false){//出入数据成功
  upuserscore('1');
  //exit(json_encode(array('status'=>"success",'code'=>"100")));

  }

 }

 mysqli_close($link);//关闭连接


?>

热心网友 时间:2022-04-06 04:09

使用
ignore_user_abort();
set_time_limit(0);
可以实现你的目的,但是,一般都不建议这样做
其实,如果你仅仅是想实现签到的功能,完全可以通过"补签"的方式来实现
只有在发出请求的时候才签到,然后同时将过去的进行补签就行了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
神九返回后轨道舱分离去哪里了,是在轨道继续运行,还是不管了。天宫一... 空间站通常由对接舱、气闸舱、轨道舱、生活舱、服务舱、专用设备... 为什么不让神舟七号的轨道舱留在天上让神州八号去追? 洗衣机生产厂家 狗鱼好吃吗? 洪霞的爷爷知识很丰富,你能用哪些成语来形容他 用什么成语可以形容包罗各种各样的想法 什么万千的成语有哪些 重庆哪些考研大学 重庆师范大学考研好不好考 用phpphp+mysqlmysql做一个每日签到功能,哪位大神有源代码发给我看看。多谢了。 请问下那个PHP每日签到时怎么实现的! 怎么用php来获取时间 周次 节次来做签到功能? 北京php培训课程哪个好 华为系统升级11.0.0.165后,是不是意味着下一阶段升级鸿蒙系统2.0? emui11微内核是什么 华为EMUI 11系统正式发布:支持超50款手机 荣耀i9支持EMUI11吗? 荣耀可升级至emul11有哪几款? 华为9x系统怎么升到emui11 华为荣耀x9支持安卓11吗 为什么更新了系统后锁屏壁纸不能自动更换了? 壁纸有自动切换的功能嘛,但是自动切出来的壁纸怎么让它可以滑动啊?每张切出来都要手动选滑动,能自动吗 华为手机备忘录怎么苹果 emui11备忘录怎么加密 laravel 框架,redis的anth连接应该是怎么样的 laravel中的cache和redis的区别 对于缓存在redis中且不会改变的数据并发读为什么还会出现QPS的瓶颈 laravel redis 缓存字段子为什么是object laravel中如何用redis存储session,求教 大牛,php 每日签到功能限制某些用户不允许签到该如何实现 php签到,点击签到按钮,数据库里面的积分加1, php 像淘宝领取淘金币一样的签到系统 怎么写? PHP 消息推送。这边学生签到后,学生所在的班级,姓名,学号这些信息推送到别的服务器上,怎么实现? PHP+JS如何实现网上签名功能? 怎么实现单例模式签到送积分 php 想做个签到,但是怎么判断连续3天 连续7天 连续30天签到过啊。。思路是有 但是MYSQL那边的语句。 phpwind怎么添加每日签到功能啊? 用php做的赛凡特网络科技有限公司 的程序,怎么在留言里面的家应该签到的逻辑 fastsix呢? 微信公众号,关于签到的功能实现,每天只能签到一次,24点刷新,签到一次奖励一块钱 PHP怎么生成去掉中括号的JSON php编程中如何去除一个字符串中的所有的括号以及括号中的内容 ECShop 分页样式怎么去掉数字中括号 如果替换PHP数组中的方括号[] php 中括号 如何去除这个中括号 PHP中的中括号什么意思 织梦php 标签过滤括号和括号内容怎么弄 为什么php手册中好多函数参数后面都有半个中括号 word里如何删除所有中括号及里面内容?