分类 技术专栏 下的文章

今天在做项目开发时,接口报了:Cannot redeclare xxx 错误,第一反应是方法被重复定义,估计这个方法被其他人在公共文件中定义了,找了一下,果然,方法名一样,由于返回内容不一样,所以对自己的方法进行重命名,错误得到解决,log一下

laravel任务调度在App\Console\Kernel类的 schedule 方法中定义所有的调度任务,以Artisan命令调度为例:
1、在schedule添加调度命令及时间

protected function schedule(Schedule $schedule)
{
        // $schedule->command('inspire')
        //          ->hourly();
        $schedule->command("my:test")->everyMinute();//每分钟执行
}

2、创建调度文件,该文件存储于App\Console\Commands目录下:

php artisan make:command MyTest

3、修改调度,定义任务调度名称和描述

protected $signature = 'my:test';
protected $description = 'This is my test';

    public function handle()
    {
        //自定义任务
        dump("hello world") ;
    }

4、执行测试,输出"hello world"

php artisan my:test

注意,如果你不知道如何向服务器添加 cron 配置项,请考虑使用 Laravel Forge 之类的服务来为你管理 cron 配置项:

* * * * * cd /你的项目路径 && php artisan schedule:run >> /dev/null 2>&1

常用时间说明
->everyMinute(); 每分钟执行一次任务
->hourly(); 每小时执行一次任务
->daily(); 每天 00:00 执行一次任务
->dailyAt('13:00'); 每天 13:00 执行一次任务

更多调度请参考文档:https://learnku.com/docs/laravel/9.x/scheduling/12238#105d37

最近业务需要,需要统计每天、每周、每月、每季度、上半年、全年等数据,所以找到找到了Carbon插件,可以方便的获取对应时间范围,例如:

today 根据当前时间创建Carbon实例,时间重置为 0时0分0秒

startOfWeek 重置当前实例时间为 本周的第一天,同时设置 0时0分0秒

endOfWeek 重置当前实例时间为 本周的最后一天,同时设置 23时59分59秒

startOfMonth 重置当前实例时间为 本月第一天,同时设置 0时0分0秒

endOfMonth 重置当前实例时间为 本月最后一天,同时设置 23时59分59秒

...

Carbon实例详细参考:
https://www.jianshu.com/p/7e45bc4d0006

当前示例是展示curl请求raw数据的方法,如下:

$headers = [
    'Content-Type:application/json',
    'App-Key:'.$key,
    'App-Sign:'.$result,
    'X-AjaxPro-Method:ShowList',
    'User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36'
];

$callBack = [
    "mobile" => 111,
    "content" => "测试"
];

$postUrl= 'http://www.baidu.com/';

$jsonContent = json_encode($callBack);

//用法
$result = http_post_json($postUrl, $headers, $jsonContent);

/* @param $postUrl
 * @param $headers
 * @param $jsonContent
 * @return mixed
 */
function http_post_json($postUrl, $headers, $jsonContent)
{
    $ch = curl_init();//初始化curl
    curl_setopt($ch, CURLOPT_URL,$postUrl);//抓取指定网页
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);//执行命令
    curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonContent);
    $data = curl_exec($ch);//运行curl
    curl_close($ch);
    $data = json_decode($data,true);
    return $data;
}

General

%v 以默认的方式打印变量的值
%T 打印变量的类型

Integer

%+d 带符号的整型,fmt.Printf(“%+d”, 255)输出+255
%d 不带符号的整形,注意和 %+d的区别。
%o 不带零的八进制
%#o 带零的八进制
%x 小写的十六进制
%X 大写的十六进制
%#x 带0x的十六进制
%U 打印Unicode字符
%#U 打印带字符的Unicode
%b 打印整型的二进制
%q 打印单引号

Integer width

%5d 表示该整型最大长度是5
%-5d则相反,打印结果会自动左对齐
%05d会在数字前面补零。

Float

%f (=%.6f) 6位小数点
%e (=%.6e) 6位小数点(科学计数法)
%g 用最少的数字来表示
%.3g 最多3位数字来表示
%.3f 最多3位小数来表示

String

%s 正常输出字符串
%q 字符串带双引号,字符串中的引号带转义符
%#q 字符串带反引号,如果字符串内有反引号,就用双引号代替
%x 将字符串转换为小写的16进制格式
%X 将字符串转换为大写的16进制格式
% x 带空格的16进制格式

String Width (以5做例子)

%5s 最小宽度为5
%-5s 最小宽度为5(左对齐)
%.5s 最大宽度为5
%5.7s 最小宽度为5,最大宽度为7
%-5.7s 最小宽度为5,最大宽度为7(左对齐)
%5.3s 如果宽度大于3,则截断
%05s 如果宽度小于5,就会在字符串前面补零

Struct

%v 正常打印。比如:{sam {12345 67890}}
%+v 带字段名称。比如:{name:sam phone:{mobile:12345 office:67890}
%#v 用Go的语法打印。
比如main.People{name:”sam”, phone:main.Phone{mobile:”12345”, office:”67890”}}

Boolean

%t 打印true或false

Pointer

%p 带0x的指针
%#p 不带0x的指针

原文参考:http://www.hangdaowangluo.com/archives/1918