php定时计划任务介绍

ignore_user_abort();函数搭配set_time_limit(0);和sleep($interval);即可实现php定时计划任务

先给出一个基本的范式,其中有个人的测试程序:

<?php

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);

?>

首先运行该程序,然后关闭该页面,程序仍然运行中,test会每隔30秒的填补到text3.txt文件。

实现效果如图:(略)

最后根据php手册简单介绍一些相关的知识:

1.连接处理:

在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况:

0 - NORMAL(正常)

1 - ABORTED(异常退出)

2 - TIMEOUT(超时)

当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮导致的。当连接时间超过 PHP 的时限时,TIMEOUT 状态的标记将被打开。

可以决定脚本是否需要在客户端中断连接时退出。有时候让脚本完整地运行会带来很多方便,即使没有远程浏览器接受脚本的输出。默认的情况是当远程客户端连接中断时脚本将会退出。该处理过程可由 php.ini 的 ignore_user_abort 或由 Apache .conf 设置中对应的"php_value ignore_user_abort"以及 ignore_user_abort() 函数来控制。如果没有告诉 PHP 忽略用户的中断,脚本将会被中断,除非通过 register_shutdown_function() 设置了关闭触发函数。通过该关闭触发函数,当远程用户点击 STOP 按钮后,脚本再次尝试输出数据时,PHP 将会检测到连接已被中断,并调用关闭触发函数。

脚本也有可能被内置的脚本计时器中断。默认的超时限制为 30 秒。这个值可以通过设置 php.ini 的 max_execution_time 或 Apache .conf 设置中对应的"php_value max_execution_time"参数或者 set_time_limit() 函数来更改。当计数器超时的时候,脚本将会类似于以上连接中断的情况退出,先前被注册过的关闭触发函数也将在这时被执行。在该关闭触发函数中,可以通过调用 connection_status() 函数来检查超时是否导致关闭触发函数被调用。如果超时导致了关闭触发函数的调用,该函数将返回 2。

需要注意的一点是 ABORTED 和 TIMEOUT 状态可以同时有效。这在告诉 PHP 忽略用户的退出操作时是可能的。PHP 将仍然注意用户已经中断了连接但脚本仍然在运行的情况。如果到了运行的时间限制,脚本将被退出,设置过的关闭触发函数也将被执行。在这时会发现函数 connection_status() 返回 3。

2.相关函数:

int ignore_user_abort ( [bool setting] )

This function sets whether a client disconnect should cause a script to be aborted. It will return the previous setting and can be called without an argument to not change the current setting and only return the current setting.

int connection_aborted ( void )

Returns TRUE if client disconnected.

int connection_status ( void )

Returns the connection status bitfield.

时间: 2024-10-14 01:57:23

php定时计划任务介绍的相关文章

Spring Boot整合@Scheduled定时计划

SpringBoot集成了@Scheduled的相关依赖(org.springframework.scheduling.annotation.Scheduled);我们只需要直接使用即可. @Scheduled注解的使用步骤: 第一步:在启动类上面启用定时任务 第二步:在要定时执行的方法上面,加上@Scheduled注解,并指定执行间隔 第三步:把@Scheduled所在的类注入到容器中 第四步:启动启动类(注:启动启动类之后,定时任务就开始了) 注意:Spring的定时任务默认是单线程的.如果

Oracle定时计划快速使用

Oracle定时计划快速使用 前言: SQL Server中有相关的定时计划,可以直接打开sql server 的任务管理器进行配置,可以方便.快速实现定时执行相应任务.相应的Oracle也有对应的定时计划,只不过没有一个很好的图形界面供用户去操作.本文主要是为了方便用户在Oracle中快速创建定时计划,定期执行相应的sql或者存储过程. 1.   创建定时计划 说明:以下所有的示例代码,都需要用户先连上sql/plus之后,在sql/plus中执行. 1.1      创建存储过程 存储过程不

Quartz.net 定时计划使用

新建解决方案和工程Quartz.net 使用Power Shell 命令 Install-Package Quartz 导入Quartz.net程序集 新建一个计划TestJob using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Quartz.net { public class TestJob : IJob { public void Execute(I

Windows定时计划执行Python

先看下定时执行的py文件 #coding:gbk from selenium import webdriver import time,os driver = webdriver.PhantomJS() #chromedriver = "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe" #调用chrome安装文件夹下的驱动文件(驱动需要下载) #os.environ["webdriver.ch

Linux 定时计划任务

定时计划任务用的的是at这个工具1.下载at定时任务工具 2.检查状态 3.开启at 4.关闭at 5.制定一个计划任务 6.查看有米有计划任务 附):写个文本命令重定向方式执行,这种执行方式可以同时执行多个任务计划1.编写程序 2.用at 去执行 原文地址:http://blog.51cto.com/kangxi/2112931

navicat for mysql 在win7下设置定时计划之导出数据处理

navicat for mysql 在win7下设置定时计划之导出数据处理 博客分类: mysql navitcatmysql定时任务导出 前两篇记录了,navicat for mysql计划的入门篇和存储过程处理篇,如何制作基本的定时任务,请参看入门篇.本篇记录如何将数据库的数据定时导出成excel(也可以自行选择其他可保存的文件格式). 目的:以test库里的emp表(员工表)为例,将emp表内的数据,定时导出到excel里. 1.在查询选项卡中,打开[查询员工信息表]的查询项,如下图:  

使用ASP.NET实现定时计划任务,不依靠windows服务

我们怎样才能在服务器上使用asp.net定时执行任务而不需要安装windows service?我们经常需要运行一些维护性的任务或者像发送提醒邮件给用户这样的定时任务.这些仅仅通过使用Windows Service就可以完成.Asp.net通常是一个无状态的提供程序,不支持持续运行代码或者定时执行某段代码.所以,我们不得不构建自己的windows service来运行那些定时任务.但是在一个共享的托管环境下,我们并不总是有机会部署我们自己的windwos service到我们托管服务提供商的we

centos定时计划任务

任务调度的crond常驻命令crond 是linux用来定期执行程序的命令.当安装完成操作系统之后,默认便会启动此任务调度命令.crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作.而linux任务调度的工作主要分为以下两类:1.系统执行的工作:系统周期性所要执行的工作,如备份系统数据.清理缓存2.个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置. 一.任务调度设置文件的写法其格式如下:Minute

php中定时计划任务的实现原理

根据php手册简单介绍一些相关的知识: 1.连接处理: 在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况: 0 - NORMAL(正常) 1 - ABORTED(异常退出) 2 - TIMEOUT(超时) 当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效.当远程客户端中断连接时,ABORTED 状态的标记将会被打开.远程客户端连接的中断通常是由用户点击 STOP 按钮导致的.当连接时间超过 PHP 的时限时,TIMEOUT 状态的标记将被打开. 可 以决定脚本是否需要在客