tp6 解决跨域问题

在和前端js对接接口的时候遇到跨域问题,记录一下

方法一
通过route文件配置
文件位置 : app/api/route/app.php

<?php
/**
 * Created by PhpStorm.
 * User: 雪后西溏 <[email protected]>
 * Date: 2021-02-23
 * Time: 16:06
 */

use think\facade\Route;

// 手写资源路由
Route::group(':v/:c', function () {
    Route::get('', '/:v.:c/index');
    Route::get('create', '/:v.:c/create');
    Route::get(':id/edit', '/:v.:c/edit');
    Route::get(':id', '/:v.:c/read');
    Route::post('', '/:v.:c/save');
    Route::put(':id', '/:v.:c/update');
    Route::delete(':id', '/:v.:c/delete');
})->allowCrossDomain([
    /** 设置跨域允许的header头信息,新增token字段 */
    'Access-Control-Allow-Headers'     => 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With, authKey, Accept, Origin, token',
    /** 允许所有请求 */
    'Access-Control-Allow-Origin'      => '*',
    'Access-Control-Allow-Credentials' => 'true',
]);

更新后写法

<?php
/**
 * Created by PhpStorm.
 * User: 雪后西溏 <[email protected]>
 * Date: 2021-06-16
 * Time: 10:14
 */

use think\facade\Route;

// 开启资源路由
Route::resource(':v/:c', ':v.:c');
// 配置跨域
Route::allowCrossDomain([
    /** 设置跨域允许的header头信息 , 增加token字段 */
    'Access-Control-Allow-Headers'     => 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, X-CSRF-TOKEN, X-Requested-With, authKey, Accept, Origin, token',
    //    允许所有请求
    'Access-Control-Allow-Origin'      => '*',
]);

参见 官方文档
https://www.kancloud.cn/manual/thinkphp6_0/1037507

 

方法二

设置全局中间件

在 ./app/middleware.php 文件中启用内置中间件即可

\think\middleware\AllowCrossDomain::class
<?php
// 全局中间件定义文件
return [
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
    // \think\middleware\SessionInit::class
    \think\middleware\AllowCrossDomain::class,
];

 

 

linux命令总结之date命令

命令简介:

date 根据给定格式显示日期或设置系统日期时间。print or set the system date and time

指令所在路径:/bin/date

命令语法:

date [OPTION]… [+FORMAT]

date [-u|–utc|–universal] [MMDDhhmm[[CC]YY][.ss]]

命令参数:

参数 描述
-d 显示字符串描述的时间
-f 显示DATEFILE文件中的每行时间
-r 显示文件的最后修改时间
-R 以RFC-2822兼容日期格式显示时间
-rfc-2822 以RFC-2822兼容日期格式显示时间
-s 设置时间为string
-u 显示或设定为Coordinated Universal Time时间格式
–help 显示date命令的帮助信息
–version 显示date命令的版本信息

Format参数格式

要说写这位程序的 David MacKenzie老兄,真是事无巨细啊,居然整了这么多格式参数,佩服佩服。

参数 描述
%% 显示字符%
%a 星期几的缩写(Sun..Sat)
%A 星期几的完整名称(Sunday…Saturday)
%b 月份的缩写(Jan..Dec)
%B 月份的完整名称(January..December)
%c 日期与时间。只输入date指令也会显示同样的结果
%C 世纪(年份除100后去整) [00-99]
%d 日期(以01-31来表示)。
%D 日期(含年月日)。
%e 一个月的第几天 ( 1..31)
%F 日期,同%Y-%m-%d
%g 年份(yy)
%G 年份(yyyy)
%h 同%b
%H 小时(00..23)
%I 小时(01..12)
%j 一年的第几天(001..366)
%k 小时( 0..23)
%l 小时( 1..12)
%m 月份(01..12)
%M 分钟(00..59)
%n 换行
%N 纳秒(000000000..999999999)
%p AM or PM
%P am or pm
%r 12小时制时间(hh:mm:ss [AP]M)
%R 24小时制时间(hh:mm)
%s 从00:00:00 1970-01-01 UTC开始的秒数
%S 秒(00..60)
%t 制表符
%T 24小时制时间(hh:mm:ss)
%u 一周的第几天(1..7); 1 表示星期一
%U 一年的第几周,周日为每周的第一天(00..53)
%V 一年的第几周,周一为每周的第一天 (01..53)
%w 一周的第几天 (0..6); 0 代表周日
%W 一年的第几周,周一为每周的第一天(00..53)
%x 日期(mm/dd/yy)
%X 时间(%H:%M:%S)
%y 年份(00..99)
%Y 年份 (1970…)
%z RFC-2822 风格数字格式时区(-0500)
%Z 时区(e.g., EDT), 无法确定时区则为空

 

使用示例:

1: 查看date命令帮助信息

 date --help
 man date

2:运用-d参数

[root@Gin scripts]# date
Sun Jan 29 10:46:03 CST 2017
[root@Gin scripts]# date -d now
Sun Jan 29 10:46:07 CST 2017
[root@Gin scripts]# date -d 'next monday'
Mon Jan 30 00:00:00 CST 2017
[root@Gin scripts]# date -d yesterday +%Y%m%d
20170128

3:显示文件中的时间

[root@Gin scripts]# cat >date.txt
2013-11-17 10:54:00
2013-11-22 11:11:11

[root@Gin scripts]# more date.txt
2013-11-17 10:54:00
2013-11-22 11:11:11

[root@Gin scripts]# date -f date.txt
Sun Nov 17 10:54:00 CST 2013
Fri Nov 22 11:11:11 CST 2013

4:显示文件最后修改的时间

[root@Gin scripts]# date -r date.txt
Sun Jan 29 10:49:11 CST 2017

5:按各种格式显示当前日期时间
这个命令的格式参数实在是太多了,在此没有必要每一个参数都尝试一遍,大家可以对照Format参数表,自己敲一敲命令实践一下。

[root@Gin scripts]# date +%Y
2017
[root@Gin scripts]# date +%m
01
[root@Gin scripts]# date +%D
01/29/17
[root@Gin scripts]# date '+%Y-%m-%d'
2017-01-29
[root@Gin scripts]# date +%Y-%m-%d
2017-01-29
[root@Gin scripts]# date +%m/%d/%y
01/29/17

6: 设置系统时间

[root@Gin scripts]# date -s "2016-11-11 00:00:00"
Fri Nov 11 00:00:00 CST 2016
[root@Gin scripts]# date
Fri Nov 11 00:00:05 CST 2016

7:请给出如下格式的date命令,如:11-02-26。再给出实现按周输出,如:周六为6,请分别给出命令

[root@Gin scripts]# date +%y-%m-%d
17-01-29
[root@Gin scripts]# date +%F
2017-01-29
[root@Gin scripts]# date "+%Y-%m-%d %H:%M:%S"
2017-01-29 10:57:02

生产场景中常用时间格式来打包数据:

[root@Andy andy]# tar zcvf etc-$(date +%F).tar.gz /etc
[root@Andy andy]# tar zcvf etc-`date +%F`.tar.gz /etc
解析命令方法:反引号,或$(),如上
[root@Andy andy]# date +%w  ##显示周,0-6

显示过去与未来时间:

[root@Andy andy]# date +%F
2016-11-16
[root@Andy andy]# date +%F -d "-1day"
2016-11-15
[root@Andy andy]# date +%F -d "+2day"
2016-11-18
[root@Andy andy]# date +%F -d "+24hour"
2016-11-17
[root@Andy andy]# date +%F-%H -d "+2hour"
2016-11-16-14

centos设置时区且自动同步

Linux的时间分为System Clock(系统时间)和Real Time Clock (硬件时间,简称RTC)。

系统时间:指当前Linux Kernel中的时间。

硬件时间:主板上有电池供电的时间。

查看系统时间的命令: #date

设置系统时间的命令: #date –set(月/日/年 时:分:秒)

例:#date –set “10/11/10 10:15”

查看硬件时间的命令: # hwclock

设置硬件时间的命令: # hwclock –set –date = (月/日/年 时:分:秒)

上述提到的是手动设置时间到一个时间点,可能与当前网络的时间有误差。下面介绍一下与时间服务器上的时间同步的方法

 

1.查看时间

[root@bogon ~]# date
Thu Apr 4 11:24:24 CST 2019

2.使用date -s修改时间

[root@bogon ~]# date -s "2019/4/4 11:26" 
Thu Apr  4 11:26:00 CST 2019

3.修改时区

使用新的时区文件覆盖系统默认时区
 # cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

4.安装ntpdate

yum install ntpdate -y

5.同步网络时间

ntpdate ntp1.aliyun.com

6.保存为bios时间

同步BIOS时钟,强制将系统时间写入CMOS,使之永久生效,避免系统重启后恢复成原时间。
# clock -w

7.设置crontab同步时间

59 23 * * *    ntpdate ntp1.aliyun.com
*  *  *  *  *  command 
分 时 日 月 周 命令 
第1列表示分钟1~59 每分钟用*或者 */1表示 
第2列表示小时1~23(0表示0点) 
第3列表示日期1~31 
第4列表示月份1~12 
第5列标识号星期0~6(0表示星期天) 
第6列要运行的命令

8.查看bios时间

[root@bogon ~]# hwclock  -r
Thu 04 Apr 2019 11:35:20 AM CST  -0.365289 seconds