黑马程序员技术交流社区

标题: 【上海校区】PHP与定时器 [打印本页]

作者: 不二晨    时间: 2018-11-12 09:39
标题: 【上海校区】PHP与定时器
在一般情况下,我们都是通过客户端浏览器来触发服务端的PHP脚本,这种触发的方式是手动的,并不能做到定时触发。并且,使得手动触发耗时时间很长的脚本的时候,因为受到服务器端设定的超时时间等条件的限制,导致最后执行失败。
想要做到定时执行,就需要结合Linux服务器端的Crontab工具来定时执行任务。我们可以根据自己的需求在设定需要定时执行的任务,比如下面:
#查看服务器上是否已经安装好了crontab工具crontab -l #不报错就是已经安装好了#进行编辑定时任务crontab -e#默认使用VI编辑器进行编辑定时任务30 7 * * * /usr/local/etc/rc.d/nginx restart  #每天早晨7点半启动nginx复制代码关于定时任务语法的问题,这里简单概括一下,不清楚的可以自己百度。
基本格式 :
*  *  *  *  *  command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
搞定了定时器,那么怎么通过命令来触发PHP脚本那?我目前知道两种方式:
(1):通过 php命令 + php脚本的方式来触发 ----我们在服务端安装php成功以后,就可以来直接使用php这个命令。但是这种方式,只能用来触发简单的脚本,如果我们来触发框架中某个控制器中具体的某个方法,使用这种方式肯定是不行的,因为框架一般都是以入口文件来进行分发的,我们直接执行对应的控制器脚本文件,肯定执行不通,那怎么办?这就用到了第二种触发方式。
(2):通过Linux中的系统工具Curl + 服务地址的方式来触发----在默认情况下,Curl工具默认是安装好的。可以使用/usr/bin/curl 访问地址就可以直接进行访问了。例如下面:
curl http://127.0.0.1/index.php?g=admin&m=index&a=index复制代码尝试一下,你会发现,这样使用还是存在问题,看下面的问题:


我明明访问的是:https://www.baidu.com/s?ie=UTF-8&wd=crontab,但是最后实际访问的却是https://www.baidu.com/s?ie=UTF-8,也就是说&符号后面的参数不存在了,这是为什么那?这是因为&符号在linux命令行中是用来表示将进程放置在后台进行运行的"特殊参数",所以如果指定的url中含有&符号,就会被截断。为了不被截断,可以在&符号前面加"\"进行转义处理。也就是这样写,就没有问题了:https://www.baidu.com/s?ie=UTF-8\&wd=crontab
(3):针对耗时时间特别长的脚本,可以在脚本中加上以下代码,防治访问超时问题的发生
复制代码
讲完了上面两点,我们就可以直接写一个完整的定时器来触发怕脚本程序了。
30 7 * * * /usr/bin/curl https://path/index.php?g=admin\&m=admin\&a=index复制代码搞定!!


【转载】
作者:codefly
链接:https://juejin.im/post/5836a4adda2f600062849e4f




作者: 不二晨    时间: 2018-11-14 15:25
~(。≧3≦)ノ⌒☆
作者: 梦缠绕的时候    时间: 2018-11-15 14:59

作者: 魔都黑马少年梦    时间: 2018-11-15 16:35

作者: 小影姐姐    时间: 2018-11-15 17:17
奈斯~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2