php定期拉取数据对比

简介: 如果我们使用宝塔面板当成运维工具,那么我们就可以很方便地添加计划任务了,如下图,宝塔中内置了挺多计划任务的类型,如定时请求URL,运行脚本,备份文件等等。 可视化配置,带给我们极大的便利,维护、添加都节约了很多的时间。 这也是为什么宝塔受到那么多人喜爱的原因之一吧。

写在前面


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


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


我们通过这个问题来分析讲解一下其中的知识点。 首先要解决的问题是:如何让程序每天自动执行一次脚本


php定时执行任务


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


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


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


手动在linux添加定时任务


# crontab -e


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


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


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


宝塔面板快速计划任务


如果我们使用宝塔面板当成运维工具,那么我们就可以很方便地添加计划任务了,如下图,宝塔中内置了挺多计划任务的类型,如定时请求URL,运行脚本,备份文件等等。 可视化配置,带给我们极大的便利,维护、添加都节约了很多的时间。 这也是为什么宝塔受到那么多人喜爱的原因之一吧。


bd639225b7afebd3629be434c1cf7019.png


取巧云监控定时执行


以上两种方式都需要服务器的权限,我们才可以管理定时任务,假设我们刚入门时使用的是虚拟主机,没有权限设置脚本运行,那么该如何实现这种功能呢? 这里记录了我以前学习时利用的一个小方案,大家可以在其中学习一下。 云监控,是很多云服务商提供的一项服务,它可以用来测试、分析接口或者网站的稳定性和执行效率。 我们可以在服务商的后台类似宝塔面板一样去添加任务,然后服务商就会按我们设置的频率,定期访问网址,获取网址的正确执行、时间等信息,记录到他们后台,提供给用户查看分析改进。 我们可以利用这种特性,由服务商向我们的服务发起请求,我们可以填写一个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');
    }
}


其他问题


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

目录
相关文章
|
9月前
|
JSON 数据处理 PHP
PHP数组处理技巧:高效操作数据集合
PHP数组处理技巧:高效操作数据集合
|
9月前
|
JSON 安全 大数据
PHP中的数组处理艺术:灵活高效的数据操作
PHP中的数组处理艺术:灵活高效的数据操作
|
9月前
|
JSON 定位技术 PHP
PHP技巧:解析JSON及提取数据
这就是在PHP世界里探索JSON数据的艺术。这场狩猎不仅仅是为了获得数据,而是一种透彻理解数据结构的行动,让数据在你的编码海洋中畅游。通过这次冒险,你已经掌握了打开数据宝箱的钥匙。紧握它,让你在编程世界中随心所欲地航行。
276 67
|
数据库连接 PHP 数据库
【YashanDB知识库】PHP使用ODBC驱动无法获取长度为256char以上的数据
【YashanDB知识库】PHP使用ODBC驱动无法获取长度为256char以上的数据
|
Oracle 关系型数据库 MySQL
【YashanDB知识库】php查询超过256长度字符串,数据被截断的问题
本文分析了YashanDB中PHP通过ODBC查询数据时出现的数据截断问题,表现为超过256字节的数据被截断,以及isql工具无法显示超过300字节长度的数据。问题根源在于YashanDB的ODBC驱动仅支持单次查询,且PHP扩展库默认缓冲区限制。解决方案包括改用PHP ODBC扩展库而非PDO_ODBC,以及调整isql代码逻辑以支持循环取数或一次性读取完整数据。文章还提供了具体代码示例和规避方法,适用于23.2.4.14及更早版本。
【YashanDB知识库】php查询超过256长度字符串,数据被截断的问题
|
数据采集 JSON JavaScript
如何通过PHP爬虫模拟表单提交,抓取隐藏数据
本文介绍了如何使用PHP模拟表单提交并结合代理IP技术抓取京东商品的实时名称和价格,特别是在电商大促期间的数据采集需求。通过cURL发送POST请求,设置User-Agent和Cookie,使用代理IP绕过限制,解析返回数据,展示了完整代码示例。
389 3
如何通过PHP爬虫模拟表单提交,抓取隐藏数据
|
Oracle 关系型数据库 MySQL
【YashanDB 知识库】php 查询超过 256 长度字符串,数据被截断的问题
php 查询超过 256 字节数据,显示被截断:yashandb 的 odbc 驱动接口 SQLGetData 现在只支持单次查询,不支持多次取数据的操作。 isql 显示不出来,isql 工具最大只查询 300 长度的数据,超过了该长度未正常显示。
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
306 5
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
352 3
|
存储 SQL 数据处理
PHP中如何高效地处理大规模数据的排序?
在PHP中处理大规模数据排序时,选择合适的方法至关重要。对于内存内可以处理的数据,可以直接使用PHP内置排序函数;对于超出内存限制的数据,可以考虑分块处理、外部排序或利用数据库的排序功能。根据具体应用场景和数据规模,选择最佳的排序策略,确保排序操作高效且稳定。
192 2