国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 建站經(jīng)驗 > 正文

php定期拉取數(shù)據(jù)對比方法實例

2019-11-02 14:09:52
字體:
供稿:網(wǎng)友

寫在前面

今天在網(wǎng)上看帖子提問的時候,看到有人發(fā)表了一個提問

php下載遠程的批量文件,每天一次,對比昨天和今天的文件,將舊文件替換成新文件

我們通過這個問題來分析講解一下其中的知識點。

首先要解決的問題是:如何讓程序每天自動執(zhí)行一次腳本

php定時執(zhí)行任務(wù)

關(guān)于定時執(zhí)行,最常見的方法是利用系統(tǒng)級別自帶的功能

linux ( crontab 定時任務(wù)命令) windows計劃任務(wù)

這需要手動修改系統(tǒng)的任務(wù)文件,然后使其生效

手動在linux添加定時任務(wù)

# crontab -e

運行該命令 打開任務(wù)編輯 在其中輸入任務(wù)內(nèi)容,然后Esc :wq保存退出

任務(wù)示例

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

前面的是運行周期的配置,后面的是sh腳本的路徑,該方式一般需要自己編寫sh腳本來執(zhí)行

寶塔面板快速計劃任務(wù)

如果我們使用寶塔面板當成運維工具,那么我們就可以很方便地添加計劃任務(wù)了,如下圖,寶塔中內(nèi)置了挺多計劃任務(wù)的類型,如定時請求URL,運行腳本,備份文件等等。

可視化配置,帶給我們極大的便利,維護、添加都節(jié)約了很多的時間。

這也是為什么寶塔受到那么多人喜愛的原因之一吧。

寶塔面板計劃任務(wù)的面板添加
取巧云監(jiān)控定時執(zhí)行
以上兩種方式都需要服務(wù)器的權(quán)限,我們才可以管理定時任務(wù),假設(shè)我們剛?cè)腴T時使用的是虛擬主機,沒有權(quán)限設(shè)置腳本運行,那么該如何實現(xiàn)這種功能呢?

這里記錄了我以前學(xué)習(xí)時利用的一個小方案,大家可以在其中學(xué)習(xí)一下。

云監(jiān)控,是很多云服務(wù)商提供的一項服務(wù),它可以用來測試、分析接口或者網(wǎng)站的穩(wěn)定性和執(zhí)行效率。

我們可以在服務(wù)商的后臺類似寶塔面板一樣去添加任務(wù),然后服務(wù)商就會按我們設(shè)置的頻率,定期訪問網(wǎng)址,獲取網(wǎng)址的正確執(zhí)行、時間等信息,記錄到他們后臺,提供給用戶查看分析改進。

我們可以利用這種特性,由服務(wù)商向我們的服務(wù)發(fā)起請求,我們可以填寫一個php腳本的url,在其中判斷當前時間,如果當前時間周期已經(jīng)到了你設(shè)置的時間,則執(zhí)行下面的內(nèi)容

同時因為云監(jiān)控是不間斷地發(fā)起(一般最細顆粒是30s) 如果不能重復(fù)運行的任務(wù),我們需要及時地把任務(wù)標記為已經(jīng)執(zhí)行。

可以在本地寫文件,當文件鎖。

不同云監(jiān)控服務(wù)商有不同的設(shè)置和服務(wù)提供,網(wǎng)上有挺多免費的。大家可以找一找,如果找不到好的,也可以聯(lián)系我QQ交流一下。

現(xiàn)代化PHP

PHP發(fā)展了這么久,其實已經(jīng)有了很大的改進,比如PHP5OOP特性的完善、PHP7的性能提高、Swoole生態(tài)的出現(xiàn),讓PHP能做的事越來越多,越做越好。

在當今環(huán)境中,我們可以使用SWOOLE常駐內(nèi)存的特性完成很多事,

這里推薦一下EasySwoole這款基于Swoole環(huán)境的框架。

關(guān)于定時任務(wù)在EasySwoole框架中的文檔地址點這里EasySwoole Crontab 定時器

常駐內(nèi)存的程序,在服務(wù)器上后臺穩(wěn)定運行,

EasySwoole中提供了豐富的組件,比如傳統(tǒng)PHPFPM環(huán)境很難解決的Mysql數(shù)據(jù)庫連接池、協(xié)程Redis客戶端、協(xié)程Http客戶端、芒果DB客戶端等等

還有我們這個主題有的一個定時任務(wù)的模塊,下面看一小段demo代碼

首先在主環(huán)境事件代碼中開啟定時任務(wù)

public static function mainServerCreate(EventRegister $register){  // 開始一個定時任務(wù)計劃  Crontab::getInstance()->addTask(TaskOne::class);}

定時任務(wù)的配置和內(nèi)容

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.    // 定時任務(wù)名稱    return 'taskOne';  }  static function run(/swoole_server $server, int $taskId, int $fromWorkerId,$flags=null)  {    // 定時任務(wù)處理邏輯    // 我們在這里執(zhí)行拉取文件、對比處理、保存文件的邏輯就好了    var_dump('run once per hour');  }}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜宾县| 太仆寺旗| 顺平县| 巨野县| 蛟河市| 海口市| 宜黄县| 鄂温| 怀集县| 大余县| 灵石县| 隆昌县| 涞水县| 体育| 旅游| 太白县| 从化市| 工布江达县| 灯塔市| 洪泽县| 海晏县| 闽侯县| 丰原市| 榆社县| 沂南县| 香港| 文安县| 眉山市| 元朗区| 枣强县| 花莲市| 南京市| 庆元县| 垫江县| 定边县| 泰宁县| 南木林县| 新巴尔虎左旗| 方正县| 微山县| 左云县|