分类 PHP 下的文章

No package 'oniguruma' found

CentOS可以直接通过yum安装oniguruma

如果是Docker或者apt找不到包的话的话需要到Github的 kkos/oniguruma 仓库,点击Releases
下载最新的版本,比如我现在看到最新的版本是6.9.7.1,那就下载 onig-6.9.7.1.tar.gz
老三样:

1.tar -zxvf 解压
2.进入目录运行configure
3.make && make install

No package 'libzip' found

详细报错

#12 1370.5 checking for libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0... no
#12 1370.5 configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met:
#12 1370.5
#12 1370.5 No package 'libzip' found
#12 1370.5 No package 'libzip' found
#12 1370.5 No package 'libzip' found

跟上面的一样,Github仓库 : nih-at/libzip
Releases 下载最新版本安装。

error: /usr/src/php/ext/wddx does not exist

PHP7.4已经弃用wddx

configure: error: unrecognized options: --with-freetype-dir, --with-jpeg-dir

PHP7.4更改了扩展开启和配置的命令名,更多更改参考 官方文档

简介

JWT全程Jason Web Token,主要用在移动端登录与权限验证的一种方案。
由于移动端无法使用传统Web的Session会话技术,一般会使用JWT或者其他类似方案。

使用

客户端提供账户密码等信息,后端验证成功后返回token,后续调用Api时需要将token放在请求头上(视为已登录状态)s。 token具有时效性,可以在失效前使用旧token换取新token。

JWT Token拆解分析

这是一段JWT Token

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9hcGkudGVzdFwvbG9naW4iLCJpYXQiOjE1OTMzOTQ0OTAsImV4cCI6MTU5MzYxMDQ5MCwibmJmIjoxNTkzMzk0NDkwLCJqdGkiOiJEVm1zbFJvZ1NENnQ4bFVRIiwic3ViIjoyLCJwcnYiOiJmMmJjNTBlYjk0MTgzNGY3MDcyYzUxNDQ0Njg3ODg3ZWMzNzU0ZDc5In0.sHpM0FTQW1o91FiIfbf0Z-syY8SVnuDEayC5LFw0hMA

该token由三段字符串组成,以"."为分隔符,按先后顺序分为Header、Payload、Signature

- 阅读剩余部分 -

需求

用户每日点击签到,获得x积分;用户连续签到y天后额外获得z积分。
x,y,z分别由后台配置。
需要记录用户今天是否已签到当前连续签到数本月签到列表数据供前端展示

表结构

CREATE TABLE `sign_in_logs` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '用户id',
      `year` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '年',
      `month` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '月',
      `date_list` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '签到日期列表(按位储存)',
      `count` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '累计连续签到的天数,到一定数量后清零',
      `last_date` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '上一次签到的日期',
      `created_at` timestamp NULL DEFAULT NULL,
      `updated_at` timestamp NULL DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `sign_in_logs_user_id_index` (`user_id`),
      KEY `sign_in_logs_year_month_index` (`year`,`month`),
      KEY `sign_in_logs_date_list_index` (`date_list`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

- 阅读剩余部分 -

最近实现了一个需求是关于在PHP对URL参数进行RSA加解密的
主要是第三方页面跳转过来时get参数带上加密信息包,
我这边解密后进入业务代码进行后续处理
开发调试时我是直接代码里生成了加密字符串,然后下面行立即进行解密打印数据没有任何问题
但是功能完成后模拟跳转时发现解密失败,后面找到是URL转义的原因
比如加密后的字符串为

iuO8VlTj4i0YCYi3KQ1N5Q9bedKm8t9U2V7AOv3cSlAKtBHTF7mW5aBpc4IBd5yrNQmmTm5bAcbWaIha7VCx2cI4oJWtjws/xWa7vaeE9QmYbzfJeBHeEHBGXcIybrer+PTI7yqCuvY7KpkSJrolsozBHjKv0dvatJKgYy45KfA=

其中brer+PTI7这段会被转义为brer PTI7 ("+" => " ")

所以让调用方在拼接参数前进行urlencode()即可。