虚拟主机实现php定时任务,深入php定时计划任务的实现方法详解_餘弦Inverse的博客-程序员宅基地

技术标签: 虚拟主机实现php定时任务  

以uchome中实现定时计划任务为例:

1. 把所有的计划任务存放到数据库

2. 每次用户进行操作或打开页面的时候都按排序执行一条计划任务. 也就是轮番判断,时间到了的, 就在用户进程中执行.

uchome的计划任务代码在 ./source/function_cron.php

ignore_user_abort()

php中实现定时计划任务的思路很多,但最适合Web的还是触发式的,就是类似于DZ和PHPWind的。

其它几种方法,供大家参考:

1,为了提供稳定的触发,用crontab+wget或者ab提供定时访问

2,nohup + php写守护程序

3,直接用php写个死循环还提供触发,这时需要用缓存或者数据库来协助推出循环,还有必须用sleep或者usleep控制触发频率

4,crontab+php

5,web触发方式,这也有区别,一种是定时触发,一种是定周期触发,DZ和PHPWind都是定时触发,我最后采用的是定周期触发

主机中肯定用crontab来执行命令行PHP,如果没有的话,只能写在代码中了。

用crontab会比较好, 如果用循环的话, 最好也要把循环和具体处理程序分开, 不然内存会一直增加.

php函数-ignore_user_abort,这个函数可以帮助我们实现像linux中的cron一样实现计划任务,下面一起来看下该如何来实现。

首先,看下php手册对这个函数的解释

Description

int ignore_user_abort ([ bool $setting ] )

Sets whether a client disconnect should cause a script to be aborted.

无论客户端是否关闭浏览器,下面的程序都会执行.

再看下其参数

Parameters

setting

If not set, the function will only return the current setting.

这个函数接受一个参数,来决定是否启用ignore_user_abort的功能。

再看其返回值:

Return Values

Returns the previous setting, as a boolean.

这里说返回前一次的设置,并且是bool值得,经过测试,这个说法是不对的,返回的明明是int型的。

该如何用php的这个函数实现计划任务呢?

要借助另外一个函数,这个函数是set_time_limit,通过set_time_limit0)可以设置程序的运行时间为无限制,php默认的运行时间是30秒,通过set_time_limit(0)可以让程序无限制的执行下去。在程序执行之前加上ignore_user_abort(1)和set_time_limit(0)即可以了。

代码如下:

复制代码 代码示例:

/**

* php定时计划任务

× edit www.jbxue.com

*/

ignore_user_abort(); // run script in background

set_time_limit(0); // run script forever

$interval=30; // do every 15 minutes…

do{

$fp = fopen(‘text3.txt','a');

fwrite($fp,'test');

fclose($fp);

sleep($interval); // wait 15 minutes

}while(true);

?>

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_36027743/article/details/115144695

智能推荐

c语言编译为机器码,单片机C语言到机器码的全过程_weixin_39811101的博客-程序员宅基地

我们平时做单片机编程,最常使用的是C语言和汇编语言两种,但是最终下载到单片机内部的,却是HEX文件里的二进制机器代码,很多同学不懂这个过程是如何转换的。我们的程序开发环境,比如KEIL和伟福等等,都是可以使用C或者汇编语言来编程的。对于C语言来讲,一旦我们编程完毕,就可以点击编译,编译的过程,实际上首先通过“编译器”将C语言翻译成汇编语言,再通过“汇编器”将汇编语言转化成机器代码,最终可以下载到单...

战歌网php,教你怎么采集傲气战歌网歌曲(包括分类)_weixin_39706127的博客-程序员宅基地

$list = "\n\n";//首先获取本采集程序地址$fname = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER["SCRIPT_NAME"];//建立傲气战歌13个分类数组,分类基本是死的就不实现采集列出了(接口也难找)$name = array ("每月新曲","MC佳瑶","指挥战歌","DJ音乐","推荐嗨曲","国外战歌","激情战歌...

mysql输入中文出现ERROR 1366_H_MZ的博客-程序员宅基地

mysql输入中文出现如下错误:ERROR 1366: 1366: Incorrect string value: '\xE6\xB0\xB4\xE7\x94\xB5...' for column 'introduce' at row 1这是因为mysql编码的问题 打开mysqlmysql -u root -p...

centos 6 python django mysql_CentOS + Python3.6+ Django2.0 + uwsgi + nginx + mysql web发布环境搭建..._动机在杭州的博客-程序员宅基地

目录:CentOS上升级Python安装easy_install和pipuwsgi安装及测试Django安装及测试连接uwsgi与Djangonginx安装及测试连接uwsgi与nginx连接uwsgi与Django与nginxuwsgi inimysql安装设置python3 Django mysql连接及测试快速搭建blog测试Pycharm开发如果只是想学习django开发直接用django...

剑指offer 变态跳台阶 (经典跳台阶问题)Java_MallowYi的博客-程序员宅基地

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题解设f[i] 表示 当前跳道第 i 个台阶的方法数。那么f[n]就是所求答案。假设现在已经跳到了第 n 个台阶,那么前一步可以从哪些台阶到达呢?如果上一步跳 1 步到达第 n 个台阶,说明上一步在第 n-1 个台阶。已知跳到第n-1个台阶的方法数为f[n-1]如果上一步跳 2 步到达第 n 个台阶,说明上一步在第 n-2 个台阶。已知跳到第n-2个台阶的方法数为f[n-2]

盘点2018.6~2018.8触碰过的技术_米斯特.杜的博客-程序员宅基地

之所以这篇题目叫“触碰”过的技术,而不是研究,是因为确实有些技术点不是研究,只是应急,问题解决后也没有再去深入系统的去学习。JavaJava8阅读了《Java8实战》的前6章和第10章,对Java8的知识体系基本上了解了。在开发中会思考能否用的上Java8的特性,如果能再到书中去查找。读书期间按着书中的例子动手实践了一下,代码地址https://github.com/duzhuo/...

随便推点

[源码解析] 深度学习分布式训练框架 horovod (15) — 广播 & 通知_罗西的思考的博客-程序员宅基地

Horovod 是Uber于2017年发布的一个易于使用的高性能的分布式训练框架,在业界得到了广泛应用。本系列将通过源码分析来带领大家了解 Horovod。本文是系列第十五篇,看看horovod 弹性训练如何广播和发送通知。

osmdroid API解读(二)_Tiny小祥的博客-程序员宅基地

osmdroid API解读(二)osmdroid-android模块 org.osmdroid.config包1、IConfigurationProvider/*** 用于 get/set a configuration provider for osmdroid*/public interface IConfigurationProvider { //get&set 使用gps位置后

一大波 Android 刘海屏来袭,全网\Maybe/最全适配技巧!_weixin_33836874的博客-程序员宅基地

一、序Hi,大家好,我是承香墨影!Apple 一直在引领设计的潮流,自从 iPhone X 发布之后,"刘海屏" 就一直存在争议。不过不管你怎样,Android 也要跻入 "刘海屏" 的行列,尤其是 Android P 发布之后,也从系统级支持顶部凹槽屏幕设计。很多厂商也在逐渐推出 “刘海屏” 设计的手机,在国内比较常见的就是 OPPO R15 和 华为 P20。屏幕不一样了,迎来的就...

iOS 技术支持网址:_weixin_42093585的博客-程序员宅基地

iOS 技术支持网址:有问题的可以留言。邮箱地址:[email protected]联系电话:+86-13008685297公司名称:昆明纶萌电子商务有限公司

SpringBoot 员工管理系统①_風栖祈鸢的博客-程序员宅基地

SpringBoot 员工管理系统①好久没写 SpringBoot 了···发现还是写算法题有意思,写完就溜不会还能看看答案。不过最后还是得把这个小小项目写一下。1. 准备工作首先创建个 SpringBoot-04-EMS 项目,不想用之前的项目了,切割一下。创建时添加 Spring Web、Thymeleaf、Lombok 的依赖。创建完后导入静态资源文件,模板放到 templates 目录下,js、css、img 放到 statics 目录下。这里突然发现 Maven 的路径又被 IDEA 重置

Activity 加载模式详细说明_iteye_12187的博客-程序员宅基地

 在minifest.xml中的<activity>元素的launchmode属性可以设置四种不同的加载模式:“standard”(默认值)“singleTop”“singleTask”“singleInstance” 以下表格是纯考虑launchmode设置情况下作出比较哪个Task把持对intent作出响应的activityActivit...

推荐文章

热门文章

相关标签