TP8 定时任务yzh52521/http-crontab 教程

发布于:2024-06-04 ⋅ 阅读:(46) ⋅ 点赞:(0)

官方文档:

https://www.thinkphp.cn/ext/36

源码仓:

http-crontab: 接口化秒级定时任务管理

GitHub - yuanzhihai/http-crontab: 接口化秒级定时任务管理

一、composer 安装

composer require yzh52521/http-crontab

二、启动yzh52521/http-crontab

一定要用composer来打来命令窗口

php think crontab start

三、在TP控制器中发起请求

发送GET、POST、PUT、DELETE等HTTP请求,在TP8的控制器中实现这些功能
HTTP客户端库,如Guzzle。如果之前没有安装,可以通过Composer安装:

要引入:

use GuzzleHttp\Client;

use think\facade\Config;

发起ping请求:

composer require guzzlehttp/guzzle
<?php
namespace app\admin\controller;
use think\facade\Config;
use GuzzleHttp\Client;


/**
* @name 定时任务
* @author 峰神
* @date 2024-6-1
*/
class Crontab 
{

    public function index()
    {
       // 使用配置中的参数初始化Guzzle客户端
	   $client = new Client([
			'base_uri' => config('crontab.base_url'),
			'timeout'  => 2.0,
			'headers' => [
				'key' => config('crontab.safe_key'), // 添加安全密钥到请求头部
			],
		]);

		// 定义任务详情
		$taskData = [
			'name'      => 'My New Cron Task',
			'schedule'  => '* * * * *', // 每分钟执行一次
			'command'   => '/path/to/your/command', // 替换为实际的命令或控制器路由
			'arguments' => [], // 可选参数
			'times'     => 0, // 无限次执行
		];

		$method = 'GET';

		// 根据请求方法构造请求
		$uri = '/crontab/ping';
		$options = [];
		$taskData = [];

		if ('POST' === $method) {
			// 对于POST请求,我们需要在请求体中发送数据
			$options['json'] = $taskData;
		} elseif ('GET' === $method && !empty($taskData)) {
			// 对于GET请求,我们将数据附加到URL作为查询字符串
			$query = http_build_query($taskData);
			$uri .= '?' . $query;
		}

		try {
			// 发起请求
			$response = $client->request($method, $uri, $options);

			// 处理响应
			$responseBody = (string)$response->getBody();
			$arrayData = json_decode($responseBody, true);
			dump($arrayData);die;
			echo "Request response: " . $responseBody;
		} catch (\Exception $e) {
			echo "Error sending request: " . $e->getMessage();
		}
    }
}

打开/admin/crontab/index

返回:Request response: {"code":200,"data":"pong","msg":"\u4fe1\u606f\u8c03\u7528\u6210\u529f\uff01"}

成功

添加任务例子:

$client = new Client();

            // 发起POST请求
            $response = $client->post(config('crontab.base_url').''/crontab/add'', [
                'headers' => [
                    'key' => Config::get('crontab.safe_key'),
                    'Content-Type' => 'application/x-www-form-urlencoded',
                ],
                'form_params' => $postData,
                //'timeout' => 10.0, // 设置请求超时时间(秒)
            ]);

			// 处理响应
			$responseBody = (string)$response->getBody();
			$arrayData = json_decode($responseBody, true);

重点:'form_params' => $postData,  $postData=数组

TP8中引用组件(暂时用不到)

use Fairy\HttpCrontab;

参考案例:

cshaptx4869/http-crontab - 码云 - 开源中国 (gitee.com)

yuanzh/http-crontab - 码云 - 开源中国 (gitee.com)

TP6代码安全

http-crontab:Workerman + ThinkPHP6 实现后台可视化定时任务管理

https://download.csdn.net/download/weixin_42157556/20696280

如果本地安装测试请注意:

1.环境:php7.3

2.

3.下载代码中缺少了vendor文件夹,需要重新生成,

用composer+PHP打开命名窗口

composer install

,启用服务:执行命令 php crontab.php (windows) 或 php crontab.php start (linux)

浏览正常


网站公告

今日签到

点亮在社区的每一天
去签到