因为在项目中有个需求是大批量的数据自动计算后插入更新到 数据库 中,为避免占用正常资源,需要在固定时间段进行自动计算,因为项目服务器是windows server2012,就考虑用windows平台强大的任务计划程序来实现。

此外在网上找了这类似问题的解决办法后,还可用 PHP 的ignore_user_abort()函数,这个函数还没使用过,PHP官网是这样介绍的

int ignore_user_abort ([ string $value ] )

设置客户端断开连接时是否中断脚本的执行 ,PHP以命令行脚本执行时,当脚本终端结束,脚本不会被立即中止,除非设置 value 为 TRUE,否则脚本输出任意字符时会被中止。

个人理解就是不通过浏览器来执行,而是通过命令行方式执行的情况下,此函数的代码块继续执行。在这篇博文中有具体地通过此函数的实现过程。

下面是一个测试用的例子。

windows批处理文件

新建文本文档,编写如下代码,保存为.bat文件。

"E:\PHP\wamp\bin\php\php5.5.12\php.exe" -f "E:\PHP\wamp\www\write.php"

PHP运行模式

平时执行php代码,是通过浏览器向服务器请求的方式执行的,这种运行模式叫模块模式。 模块模式是以mod_php5模块的形式集成,此时mod_php5模块的作用是接收Apache传递过来的PHP文件请求,并处理这些请求,然后将处理后的结果返回给Apache。如果我们在Apache启动前在其配置文件中配置好了PHP模块(mod_php5), PHP模块通过注册apache2的ap_hook_post_config挂钩,在Apache启动的时候启动此模块以接受PHP文件的请求。

而我们用php.exe执行时, 便是 CLI模式,这篇博文对PHP四种运行模式进行了详细阐述。

php.exe

PHP命令行执行程序php.exe的功能非常强大,在windows环境下配置系统变量path的值可以直接在dos窗口界面直接运行php脚本文件,这篇文章有具体配置方法。

这里的php.exe是php安装目录下三个和php相关的exe文件中的一个,php-cgi.exe、php-win.exe

php-cgi.exe提供来作为CGI使用的,通常用来在windows环境下通过cgi方式解析php脚本,常用于在iis下运行php网站,区别是在文件输出所有内容之前,会自动输出一个下面的HTTP头

X-Powered-By: PHP/5.2.5
Content-type: text/html

php-win.exe也可以执行PHP文件,区别是大打开控制台,不显示输出内容。可以用来编写无需显示界面的文件处理、网路服务等程序。

PHP执行代码

$fp = @fopen("E:/PHP/wamp/www/test.txt", "a+"); fwrite($fp, "自动播报时间:\n" . date("Y-m-d H:i:s")); fclose($fp);
  • 1
  • 2
  • 3
  • 4

这里的文件路径一定要是绝对路径,因为没有经过apache或iis这种服务器,除了一些基于服务器的变量不能使用的,如$_SERVER等,还有很有可能发生各种无法预计的错误。

(注:这里php页面中出现的相对路径发现不能用,脚本做好不牵涉到其他的路径)

创建任务计划

这个百度一下就能出很多,我测试的用的是windows7. 
开始–》附件–》系统工具–》任务计划程序 
双击创建任务 
这里写图片描述 
创建名称和设置执行权限 
这里写图片描述 
设置好开始时间和重复任务间隔时间 
这里写图片描述 
选择写好的脚本路径 
这里写图片描述 
到这儿就已经创建好任务计划程序了 
下面是执行的效果 
这里写图片描述

windows批处理文件PHP运行模式phpexePHP执行代码创建任务计划【摘抄-方便自己学习】【http://blog.csdn.net/zdx_y/article/details/52810330】因为在项目中有个需求是大批量的数据自动计算后插入更新到数据库中,为避免占用正常资源,需要在固定时间段进行自动计算,因为项目服务器是windows s
navicat创建MySql 定时任务详解 事件(event)是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据调度事件来启动的。由于他们彼此相似,所以事件也称为临时性触发器。事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。 一、开起定时
做了个数据库的备份脚本,顺便系统得学习一下Linux下定时执行脚本的设置。Linux下的定时执行主要是使用crontab文件中加入定制计划来执行,设置Windows稍微复杂一些(因为没有图形界面嘛),但是也不是非常复杂,基本上用过一遍能记住了,关键是要记住/var/spool/cron这个目录。下面看一下具体的用法:   首先查看一下/etc/crontab文件:   $ cat /etc/crontab   SHELL=/bin/bash   PATH=/sbin:/bin:/usr/sbin:/usr/bin   MAILTO=root   HOME=/   # run-p
切换到"触发器"选项卡,点击左下角"新建",将出现触发条件配置页; 比如配置一个每天早八点到晚八点,每个小时执行一次的任务,按图设置持续时间为"12小时"即可。如果下拉框没有想要的周期,此配置框也可以打字输入,比如设为13小时,即实现早八点到晚九点; 注意勾选上左下角的"已启用"; 可以配置多个触发条件,只要触发一个,任务即被唤醒,再次点击"新建";