求助!求助!PHP求助!ignore_user_abort(),set_time_limit(0),定时、持续运行
这是我的代码:<?phpignore_user_abort();//忽略用户影响set_time_limit(0);//连续运行while(1){$now=date("H...
这是我的代码:
<?php
ignore_user_abort(); //忽略用户影响
set_time_limit(0); //连续运行
while (1) {
$now = date("H:i:s");
$s = explode(":", $now);
if ($now == '00:00:00') { //每天00:00:00检查
......
}
if ($s[0] == '23') {
if ($s[1] > 49) {
if ($s[1] == '59') {
sleep(1); //23:59:00--23:59:59 1秒钟执行一次
} else {
sleep(60); //23:50--23:59 1分钟执行一次
}
} else {
sleep(600); //23:00--23:49,10分钟执行一次
}
} else {
sleep(3600); //23点以外,1小时执行一次
}
}
?>
我要的效果是:
执行一次之后,程序不间断的运行,在每天零点检查数据;
现在的情况是执行一次之后,关闭浏览器,程序持续执行,在23点之前,一小时运行一次可以做到,在23:50之前每十分钟执行一次也能做到,23:50--23:59 1分钟执行一次和23:59:00--23:59:59 1秒钟执行一次并最终在00:00:00执行检查数据都是正常的,但这个过程只有24小时,然后就停止了。
例如:我在10:25:18运行了一下程序,然后关掉浏览器,之后在每一个小时的25分18秒程序都会运行一遍,直到23:25:18开始每十分钟执行一次,再到23:55:18开始每一分钟执行一次,最后到23:59:18开始一秒钟执行一次,最终到00:00:00执行if语句检查数据,假如1秒钟检查完毕,那么,到01:00:01再次执行,接下来每隔一小时执行一次,直到09:00:01执行之后,到这里,程序停止了,不再继续运行了,我不知道什么原因,请教高手指点,不胜感激!
首先感谢各位的回答,但两位的最终思路--等待用户触发--在我这里行不通的,因为网站对时间的要求很严格,关键点就是零点,我的本来的思路是管理员触发一次就好了,不需要普通用户参与,现在执行了5天多又一次停止了,我考虑用别的方式,但一时没有什么思路,各位有什么经验的话不妨说说,小弟感激不尽! 展开
<?php
ignore_user_abort(); //忽略用户影响
set_time_limit(0); //连续运行
while (1) {
$now = date("H:i:s");
$s = explode(":", $now);
if ($now == '00:00:00') { //每天00:00:00检查
......
}
if ($s[0] == '23') {
if ($s[1] > 49) {
if ($s[1] == '59') {
sleep(1); //23:59:00--23:59:59 1秒钟执行一次
} else {
sleep(60); //23:50--23:59 1分钟执行一次
}
} else {
sleep(600); //23:00--23:49,10分钟执行一次
}
} else {
sleep(3600); //23点以外,1小时执行一次
}
}
?>
我要的效果是:
执行一次之后,程序不间断的运行,在每天零点检查数据;
现在的情况是执行一次之后,关闭浏览器,程序持续执行,在23点之前,一小时运行一次可以做到,在23:50之前每十分钟执行一次也能做到,23:50--23:59 1分钟执行一次和23:59:00--23:59:59 1秒钟执行一次并最终在00:00:00执行检查数据都是正常的,但这个过程只有24小时,然后就停止了。
例如:我在10:25:18运行了一下程序,然后关掉浏览器,之后在每一个小时的25分18秒程序都会运行一遍,直到23:25:18开始每十分钟执行一次,再到23:55:18开始每一分钟执行一次,最后到23:59:18开始一秒钟执行一次,最终到00:00:00执行if语句检查数据,假如1秒钟检查完毕,那么,到01:00:01再次执行,接下来每隔一小时执行一次,直到09:00:01执行之后,到这里,程序停止了,不再继续运行了,我不知道什么原因,请教高手指点,不胜感激!
首先感谢各位的回答,但两位的最终思路--等待用户触发--在我这里行不通的,因为网站对时间的要求很严格,关键点就是零点,我的本来的思路是管理员触发一次就好了,不需要普通用户参与,现在执行了5天多又一次停止了,我考虑用别的方式,但一时没有什么思路,各位有什么经验的话不妨说说,小弟感激不尽! 展开
展开全部
很无聊的写法,你这样迟早会溢出的。
如果是linux环境的话 用crontab计划任务几句搞定了。windows也有计划任务啊。
实在不行要用你列出的这方法 就用跳转啊 比如每十分钟执行就跳转,
设置个get把时间作为参数带上就OK。
如果是linux环境的话 用crontab计划任务几句搞定了。windows也有计划任务啊。
实在不行要用你列出的这方法 就用跳转啊 比如每十分钟执行就跳转,
设置个get把时间作为参数带上就OK。
追问
自上次停止之后,我重新执行了一下,这四天一切正常,不过你说的也对,不修改的话终究是隐患,所以,能针对上面的代码写一个示例吗?
我是在本地win环境下写好,然后放到网上去的,买的空间是linux环境的,我能操作的就是在指定的地方上传,修改文件,要用计划任务的话,我想可能涉及要操作主机吧,空间商不可能给你这个权限的,或者不涉及主机,可以自己完成的话,麻烦指点一下具体操作,最好给个示例,谢谢!能用的话可以加分
追答
不知道你那网站访问量如何,尤其是凌晨的。。
如果每小时都有访问 那设置成让用户触发吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家提供动态代理服务器服务的企业,旨在帮助用户更好地管理网络访问和安全。以下是一些关于StormProxies的IP动态代理服务的特点:1. 高匿名性:StormProxies的动态代理服务器具有高匿名性,可以有效...
点击进入详情页
本回答由Storm代理提供
展开全部
有可能崩溃了,大约因为没有回收内存,注意不能用 exit();,否则执行一次后就会停止,试试对变量、对象置空
更多追问追答
追问
应该不是崩溃了,毕竟它执行了24小时,回收内存什么意思?exit是肯定没有的,对变量、对象置空是什么意思,怎么操作?
追答
php在运行过程中,如果程序不退出或不对变量和对象进行清理,内存占用会越来越多。这是就需要置空或清理变量和对象,通常用“=Null”,对于sql链接,用sql_close(Name);
楼下说的就是这个意识,不是指“逻辑错误”,而是“运行时错误”,因为内存等问题造成的溢出导致崩溃
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询