php定时器 php利用curl做定时器

开始想是用 ignore_user_abort()方法写定时器,但是总是断掉 就没用了,

ignore_user_abort();
while(true)
{

}

PHP定时器代码开始 复制执行就可以用了,原理就是调用接口的方式通过CURL调用自身(看代码)

// 120秒执行1一次,开启日志记录
timer(120, true );
/*
 * @todo PHP定时器
 * @explain 回调接口回调原理 注:打开直接运行 关闭页面后也会执行,停止:重启apache服务器;会消耗2-5个进程
 * @txt 是否开启日志记录 true开启 false关闭 日志文件:timer_log.txt
 * @interval 延迟时间 延迟时间越长进程消耗越少
 * @stop 停止时间 时间戳
 * @demo timer(5, true,1595983440);
 **/
function timer($interval = 10, $txt = true, $stop = false)
{
    // 停止时间
    if ($stop && time() >= intval($stop)) return;

    // 是否写入记录
    if ($txt) file_put_contents('timer_log.txt', date('Y-m-d H:i:s',time()) . "\r\n", FILE_APPEND);  //日志记录

    // 判断是否是https
    $is_https = false;
    if (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') {
        $is_https = true;
    } elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
        $is_https = true;
    } elseif (!empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off') {
        $is_https = true;
    }

    // 生成当前文件url
    $url = 'http' . ($is_https ? 's' : '') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING'];
    
    // 延迟时间单位秒
    sleep($interval);

    // 你需要执行的代码方法
    mannerOfExecution();

    $ch = curl_init(); //初始化CURL句柄
    curl_setopt($ch, CURLOPT_URL, $url); //设置请求的URL
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); //设置请求方式
    $output = curl_exec($ch);
    curl_close($ch);
}

// 你需要执行的代码
function mannerOfExecution()
{

}

这是我在自己项目中使用

    /*
     * @todo PHP定时器 备份
     * @explain 回调接口回调原理 注:打开直接运行 关闭页面后也会执行,停止:重启apache服务器;会消耗2-5个进程
     * @txt 是否开启日志记录 true开启 false关闭 日志文件:timer_log.txt
     * @interval 延迟时间 延迟时间越长进程消耗越少
     * @stop 停止时间 时间戳
     * @demo timer(5, true,1595983440);
     **/
    function timer($interval = 3600, $txt = true, $stop = false)
    {
        // 停止时间
        if ($stop && time() >= intval($stop)) return Cache::rm('Backups');

        // 禁止多开控制器
        if (Cache::has('Backups') && Cache::get('Backups') + $interval > time()) {
            return json(['code' => 400200, 'msg' => '已开启一个']);
        } else {
            Cache::set('Backups', time());
        }

        // 是否写入记录
        if ($txt) file_put_contents('timer_log.txt', date('Y-m-d H:i:s', time()) . "\r\n", FILE_APPEND);  //日志记录

        // 生成当前接口url
        $url = 'http' . (Request()->isSsl() ? 's' : '') . '://' . $_SERVER['HTTP_HOST'] . '/' . $_SERVER['QUERY_STRING'];

        // 延迟时间单位秒
        sleep($interval);

        // 你需要执行的代码方法
        (new Baksql())->index(['tp' => 'backup', 'name' => 'self_motion']); // 备份方法

        // 回调循环
        $ch = curl_init(); //初始化CURL句柄
        curl_setopt($ch, CURLOPT_URL, $url); //设置请求的URL
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); //设置请求方式
        $output = curl_exec($ch);
        curl_close($ch);
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值