php定期拉取数据对比方法实例


Posted in PHP onSeptember 22, 2019

写在前面

今天在网上看帖子提问的时候,看到有人发表了一个提问

php下载远程的批量文件,每天一次,对比昨天和今天的文件,将旧文件替换成新文件

我们通过这个问题来分析讲解一下其中的知识点。

首先要解决的问题是:如何让程序每天自动执行一次脚本

php定时执行任务

关于定时执行,最常见的方法是利用系统级别自带的功能

  • linux ( crontab 定时任务命令) windows计划任务

这需要手动修改系统的任务文件,然后使其生效

手动在linux添加定时任务

# crontab -e

运行该命令 打开任务编辑 在其中输入任务内容,然后Esc :wq保存退出

任务示例

0 0 * * * /www/siam/test.sh

前面的是运行周期的配置,后面的是sh脚本的路径,该方式一般需要自己编写sh脚本来执行

宝塔面板快速计划任务

如果我们使用宝塔面板当成运维工具,那么我们就可以很方便地添加计划任务了,如下图,宝塔中内置了挺多计划任务的类型,如定时请求URL,运行脚本,备份文件等等。

可视化配置,带给我们极大的便利,维护、添加都节约了很多的时间。

这也是为什么宝塔受到那么多人喜爱的原因之一吧。

宝塔面板计划任务的面板添加
取巧云监控定时执行
以上两种方式都需要服务器的权限,我们才可以管理定时任务,假设我们刚入门时使用的是虚拟主机,没有权限设置脚本运行,那么该如何实现这种功能呢?

这里记录了我以前学习时利用的一个小方案,大家可以在其中学习一下。

云监控,是很多云服务商提供的一项服务,它可以用来测试、分析接口或者网站的稳定性和执行效率。

我们可以在服务商的后台类似宝塔面板一样去添加任务,然后服务商就会按我们设置的频率,定期访问网址,获取网址的正确执行、时间等信息,记录到他们后台,提供给用户查看分析改进。

我们可以利用这种特性,由服务商向我们的服务发起请求,我们可以填写一个php脚本的url,在其中判断当前时间,如果当前时间周期已经到了你设置的时间,则执行下面的内容

同时因为云监控是不间断地发起(一般最细颗粒是30s) 如果不能重复运行的任务,我们需要及时地把任务标记为已经执行。

可以在本地写文件,当文件锁。

不同云监控服务商有不同的设置和服务提供,网上有挺多免费的。大家可以找一找,如果找不到好的,也可以联系我QQ交流一下。

现代化PHP

PHP发展了这么久,其实已经有了很大的改进,比如PHP5OOP特性的完善、PHP7的性能提高、Swoole生态的出现,让PHP能做的事越来越多,越做越好。

在当今环境中,我们可以使用SWOOLE常驻内存的特性完成很多事,

这里推荐一下EasySwoole这款基于Swoole环境的框架。

关于定时任务在EasySwoole框架中的文档地址点这里EasySwoole Crontab 定时器

常驻内存的程序,在服务器上后台稳定运行,

EasySwoole中提供了丰富的组件,比如传统PHPFPM环境很难解决的Mysql数据库连接池、协程Redis客户端、协程Http客户端、芒果DB客户端等等

还有我们这个主题有的一个定时任务的模块,下面看一小段demo代码

首先在主环境事件代码中开启定时任务

public static function mainServerCreate(EventRegister $register)
{
  // 开始一个定时任务计划
  Crontab::getInstance()->addTask(TaskOne::class);
}

定时任务的配置和内容

namespace App\Crontab;

use EasySwoole\EasySwoole\Crontab\AbstractCronTask;

class TaskOne extends AbstractCronTask
{

  public static function getRule(): string
  {
    // TODO: Implement getRule() method.
    // 定时周期 (每小时)
    return '@hourly';
  }

  public static function getTaskName(): string
  {
    // TODO: Implement getTaskName() method.
    // 定时任务名称
    return 'taskOne';
  }

  static function run(\swoole_server $server, int $taskId, int $fromWorkerId,$flags=null)
  {
    // 定时任务处理逻辑

    // 我们在这里执行拉取文件、对比处理、保存文件的逻辑就好了
    var_dump('run once per hour');
  }
}

其他问题

解决了定时执行的问题,那么下载文件和保存文件,我觉得应该都不会是很大的问题

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
php foreach、while性能比较
Oct 15 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
Jun 04 PHP
php设计模式 DAO(数据访问对象模式)
Jun 26 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
Oct 17 PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 PHP
PHP 文件编程综合案例-文件上传的实现
Jul 03 PHP
php将csv文件导入到mysql数据库的方法
Dec 24 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
Aug 08 PHP
PHP中Http协议post请求参数
Nov 02 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
利用PHP获取汉字首字母并且分组排序详解
Oct 22 PHP
PHP变量的作用范围实例讲解
Dec 22 PHP
php设计模式之工厂模式用法经典实例分析
Sep 20 #PHP
php设计模式之单例模式用法经典示例分析
Sep 20 #PHP
php数组和链表的区别总结
Sep 20 #PHP
php输出反斜杠的实例方法
Sep 19 #PHP
php实现session共享的实例方法
Sep 19 #PHP
php进行md5加密简单实例方法
Sep 19 #PHP
php解决安全问题的方法实例
Sep 19 #PHP
You might like
PHP 读取Postgresql中的数组
2013/04/14 PHP
PHP SPL使用方法和他的威力
2013/11/12 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
2014/04/08 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
实例讲解PHP表单验证功能
2019/02/15 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
Extjs学习笔记之六 面版
2010/01/08 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
jQuery实现自定义右键菜单的树状菜单效果
2015/09/02 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
js判断是否为空和typeof的用法(详解)
2016/10/07 Javascript
Bootstrap实现导航栏的2种方式
2016/11/28 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
2019/09/10 Javascript
利用Python的Django框架中的ORM建立查询API
2015/04/20 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
利用python计算时间差(返回天数)
2019/09/07 Python
python numpy中cumsum的用法详解
2019/10/17 Python
Python面向对象封装操作案例详解
2019/12/31 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
2020/03/10 Python
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
幼儿园教师辞职信
2014/01/18 职场文书
尊师重教演讲稿
2014/09/04 职场文书
尊老爱幼演讲稿
2014/09/04 职场文书
师德师风学习材料
2014/12/19 职场文书
大学军训通讯稿
2015/07/18 职场文书