Dcat-admin登录增加验证码(保姆级教程)
2年前
  • 5
  • 0

Dcat-admin登录增加验证码(保姆级教程)

写在前面 paperen这里使用的dcat-admin版本小于2.0,故不能直接使用dcat-login-captcha这个第三包实现 对于2.0以上建议直接用guanguans/dcat-login-captcha

dcat-login-captcha - dcat admin 登录验证码扩展

由于工作原因需要给dcat-admin登录页面增加一个验证码,一开始百度找了一些解决方案

https://paperen.com/file/216

记在dcat-admin中,登陆页面加验证码操作 Laravel - 验证码

两个参考资料paperen都试了一下,最终基本按第一个方案实现出来,但其中踩过一些坑(花了有4、5个小时才弄出来)所以借此机会记录一下 PS:这个真的是保姆级教程

大致思路

  • 通过路由重写原本的登录页面与登录验证入口——修改routes.php、完善AuthController
  • 增加一个生成验证码的接口——需要给这个接口开放权限验证
  • 验证码保存在session中,登录判断增加验证码对比
阅读更多
docker宿主无法访问容器端口
3年前
  • 33
  • 1

docker宿主无法访问容器端口

https://paperen.com/file/210

在VM中创建了一个centos7.2虚拟机并跑起docker搞个lnmp镜像玩一玩,一开始用的-p将宿主机端口映射一下(由于本来宿主机就跑着apache占用了80端口)

命令如下:

 docker run -dit -p 90:80 -v /home/web/docker/www:/www --privileged=true --name=lnmp 2233466866/lnmp

跑倒是跑起来了,但奇怪的是打开浏览器访问虚拟机的IP+映射的端口(这里是90),却无法访问到nginx

于是就各种排查,netstat看过,防火墙通通都关了,在容器里面curl自身localhost是ok的,但奇怪的是在宿主机curl自身加映射好的端口号一点反映都没有

 [root@localhost ~]# curl http://localhost:90
 curl: (56) Recv failure: Connection reset by peer

然后也各种查资料

阅读更多
手工制作的polygon框架
4年前
  • 2
  • 0

手工制作的polygon框架

这个小框架是paperen3年前就写了,但说来惭愧一直闭源同时模型层糟糕,最近抽空将模型层丰富与抽象了接近可用程度才敢拿出来开源,暂且给个0.0.1版本...

代码确实是一般般,但作为平时快速搭建与开发接口来说也还勉强够用,如各位大佬发现有什么可以改进的话或bug随时吐槽

https://paperen.com/file/208

git地址:https://github.com/paperen/polygon

下面为polygon的README

polygon框架

  • 编写始于插件化/模块化思想
  • 适合快速编写简单的接口
  • 半自动转换中英语言

如何开始

  1. git clone到本地后
  2. composer update
  3. 修改config/config.php(按实际情况调整数据库信息,区分develop/test/production三种环境配置,关于环境常量参见index.php中的ENV)
  4. 浏览器访问 本地地址+/api/index
  5. clone下来自带存在两个模块adminapiadmin是后台(只有一个登录页,没写什么逻辑,不是重点)仅提示也可以做成后台或前台等,重点是api
  • /api/index - API模块
  • /admin/login - admin模块

具体指向哪个控制器方法需要对照分别模块中路由映射

阅读更多
centos下redmine部署/迁移
4年前
  • 5
  • 0

centos下redmine部署/迁移

20年一开头就进入艰难模式,业务不得已只能服务器删减降低成本,redmine也需要转移到另外一台服务器上

思路很清晰,paperen稍微到原有的服务器上看了一下,了解一下数据的位置,数据主要包括两个地方:

  • mysql
  • redmine目录下的files(整个)

因为是迁移所以就直接按照原有软件版本进行安装就好,如果你是新搭建的话留意一下下面这个版本对应

redmine版本 ruby版本 rails版本
4.0 ruby 2.21, 2.3, 2.4, 2.5, 2.6 5.2
3.3 ruby 1.9.33, 2.0.02, 2.1, 2.21, 2.3 4.2
3.0 ruby 1.9.3, 2.0.01, 2.1, 2.2 4.2
2.6 ruby 1.9.2, 1.9.3, 2.0.01, 2.1 3.2

官方安装版本对照说明可以访问这里查看redmine安装说明

阅读更多
ELK架构实现实时数据报表
5年前
  • 4
  • 0

ELK架构实现实时数据报表

最近在做某个项目时客户要求实现广告实时数据报表,paperen也是第一次面对这个需求,由于本来广告就有使用nginx做监播(展示与点击日志),所以查阅了一些资料后决定使用比较轻量的ELK来实现这个需求,先放出平台实时报表的截图

http://paperen.com/file/203

ELK是三个开源软件的缩写,分别表示:Elasticsearch,Logstash,Kibana,都是elsatic下的产品https://www.elastic.co/products

并没有太复杂的东西,简单来说filebeat相当于是一个拉取日志数据,将数据拉到logstash,而logstash中可以配置一些过滤器对数据进行预处理或过滤,最后存到es中

阅读更多
管道+cronolog做日志切分
6年前
  • 2
  • 0

管道+cronolog做日志切分

若业务中涉及到需要记录日志的同时又需要满足日志按时切分功能的话,推荐使用管道pipe+cronolog,而落日志的媒介使用nginx或apache甚至自己写服务来实现也是可以的,paperen推荐nginx

http://paperen.com/file/201

本文按以下节奏进行:

阅读更多
Codeigniter扩展-支持分库分表
7年前
  • 3
  • 0

Codeigniter扩展-支持分库分表

针对CI模型的分库分表扩展

就CI在对于一些分库分表这块并没有支持而做的扩展

涉及以下文件

  • application/libraries/MY_Profiler.php (仅仅为了支持在调试模式的SQL日志输出而重写了_compile_queries方法)
  • application/core/MY_Model.php

http://paperen.com/file/198

使用情景描述

在一些大型项目中可以会遇到DB将某些会出现大量数据的表拆分到多个表甚至是多个数据库中多个表

比如:用户数据

在单库单表的情况下只使用user表存放数据

uid——username——email——password

但随着数据量增加后续会采取分表存放数据比如创建多个表,user0,user1,user2,user3,而同时有一个主表user_index记录用户的id与username,user_index作为用户的一个索引

uid——username 1——paperen 2——paperen3 3——paperen4

关于这三个用户的详细信息是分散到不同表存储的,如何知道是哪个表,则使用求余的方法 公式为:uid%4 通用公式为:id%(分表总数)

那对于paperen4这个用户他的详细数据是放在3%4=3,也就是user3表里面

阅读更多
paperenblog增加redis支持
8年前
  • 2
  • 0

paperenblog增加redis支持

http://paperen.com/file/190

最近尝试了redis,那么就顺便也为自己这套博客代码扩展上redis的支持当练手

关于codeigniter redis的扩展自己先是找了git,用的是这个https://github.com/joelcox/codeigniter-redis

而paperenblog安装时默认这个redis配置是关闭的,安装后可以到后台开启上 http://paperen.com/file/189

同时请根据自己实际情况修改配置目录中的redis.php

application/config/redis.php

阅读更多
当已成事实
10年前
  • 7
  • 2

当已成事实

http://paperen.com/file/182

已有124天没发表过博客,表面是没有什么技术博客分享,事实是自己堕落了,自认为使用堕落这个词也不为过。

看着秋天来临,夏天的炎热也就快结尾,我不知道整个夏天自己有什么收获,也不知道秋天我该期待得到什么收获,表面是叫随意,事实是叫随波逐流。纵使我明白很多东西需要自己去争取但是就没努力过,等待只是让机会离你而去,想到这些,秋天更会让自己难过。

今天是国庆长假最后一天,自己过得并不愉快,跟老妈翻了脸,4号就回深圳。想起早些年的我放假总是期待着回家到现在都害怕回家,这个转变让自己也感到惊讶,也许表面上是厌倦谈论结婚女友的事情,事实上自己想逃避。看着微博微信某些朋友的“欠自己的旅行”图片,突然觉得自己也想来一次独自旅行,抛下所有烦恼,但烦恼终归要面对,除非你人间蒸发再也不回来了。

阅读更多
对于APP无法捉到接口请求解决办法
3年前
  • 8
  • 0

对于APP无法捉到接口请求解决办法

工作需要分析某个APP的请求并爬取其图片数据,之前有用过Fiddleranyproxy代理捉包,无论怎样一直没看到有请求接口的记录(只有请求图片的请求),很是奇怪,所以之前爬取的思路是通过模拟器+appium来弄的,效率甚是慢而且容易中断

今天再有空回来复盘一下,自己将模拟器的网络断掉清掉APP的缓存,再次打开app发现数据都没了,很确定其是走的接口拉取数据的,但是为什么捉不到其请求记录,我猜是因为APP不走代理发起接口请求,防止被捉包

paperen在网上遨游了一下,找到这篇文章 部分APP无法代理抓包的原因及解决方法(flutter 应用抓包),基本上是符合现在的情况了

解决方案:drony+代理

drony下载

配置参考下图

阅读更多
mkdocs+git打造自更新文档中心
4年前
  • 3
  • 0

mkdocs+git打造自更新文档中心

写在前面,如果您是有搭建私有文档平台的打算那么这篇文章是提供了一种方案,但如果仅仅用于内部分享或简单的短暂文档那paperen安利给你腾讯文档showdoc

废话不多说,马上进入主题

目的:搭建一个对可使用个人域名,维护简单而且自动更新的文档站点

用到的组件/技术

  • mkdocs
  • git hook
  • apache/nginx等(nginx会更合适)

关于mkdocs(Markdown 项目文档工具)详细介绍

阅读更多
小程序直播文档尝鲜
4年前
  • 3
  • 0

小程序直播文档尝鲜

扒了份小程序直播文档尝鲜

运营手册

小程序直播运营操作手册

接入指南

https://paperen.com/file/206

阅读更多
hive return code 1 from org.apache.hadoop.hive.ql.
4年前
  • 4
  • 0

hive return code 1 from org.apache.hadoop.hive.ql.

调整了一个hive表的结构,跑清洗数据脚本时遇到hive报错

return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

莫名其妙,然后查阅了百度该问题,都比较复杂(看不懂...),沉下心来排查一下,定位到运行到这行时出现问题

hive -e "use data;truncate table shellda_pvuv;insert into shellda_pvuv select '$SDATE','$HOUR',count(*) as pv,count(distinct devid) as uv,channel,version from shellda_temp_result group by channel,version;"

然后我按分号来单条测试,很是奇怪,竟然问题出现在truncate table这里...如图,百思不得其解 http://paperen.com/file/205

该不会因为表为空的所以truncate就报错,不会这么无语,试着去掉truncate,竟然OK了!

所以解决方案就是去掉truncate....

是这样的,这里的truncate是为了保证清空上次清洗的临时数据影响,其实脚本后面也会在hdfs中rm掉相关临时数据(hadoop fs -rm -r 文件绝对路径),所以这里的truncate可要可不要,而现在定位是由于truncate导致出现这个无语问题,所以只能将其去掉

阅读更多
区块链知识分享
5年前
  • 3
  • 0

区块链知识分享

最近公司新方向涉及到区块链,在paperen研究了一段时间后,抽空写点关于这块的一些总结,一方面有助于自己温故旧概念另一方面也作为一个笔记

关于这个分享大概会按照以下提纲进行

  • 区块链概念
  • 区块链相关名词解释
  • 比特币交易图解
  • 以太坊
  • 以太坊开发例子
  • 参考资料

区块链概念

如果一开始觉得这个概念有点难理解那么咱们先从一个带调侃色彩的对话开始

问:什么是区块链?答:世界上最慢的分布式数据库

阅读更多
php7 nginx 编译配置(centos)
7年前
  • 4
  • 0

php7 nginx 编译配置(centos)

将自己编译与配置过程记录一下,方便以后参考更希望能对其他人有帮助,该笔记仅仅适用于配置,没包含性能调优

centos安装的过程就忽略了,自己都是在VM里面折腾,稍微提一下,如果ifconfig命令都提示不存在,需要 yum install net-tools 即可(centos最小化安装会出现这种情况),之后就可以使用xshell等工具ssh来操作

准备安装包

由于涉及到要上传到centos,所以也安装一下lrzsz比较方便 yum install lrzsz

mkdir /home/package
 cd /home/package
 rz (选择刚下载的PHP7与nginx包)
 ls

建立www用户与组

useradd -s /sbin/nologin -U www

-U 参数的是会同时建立与用户名一样的用户组

阅读更多
继续关于并发操作数据库问题的研究
8年前
  • 2
  • 0

继续关于并发操作数据库问题的研究

就很久之前自己写过的一篇关于mysql锁表的文章,http://paperen.com/post/lock-table,在目前来看实现上并不存在太大的问题,而当情况放在高并发的情形下那么该解决方案会变得不那么可行,原因是对数据库update操作实在频繁而且高并发情况下大量操作需要等待某个解锁后才能执行

就接着之前那篇文章说的情况

商店现在某商品只有1件库存,然后A与B在网上进行下订,A与B几乎同时(或许也就差几毫秒,A比B快那么一点点)进行

在这种应用情景下,我们先建立一个数据表 product,注意到使用了innoDB引擎

CREATE TABLE `product` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `num` mediumint(8) DEFAULT '0',
  `goods` varchar(60) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `product` VALUES ('1', '1', 'test');

下面为基本php代码

<?php

$dbhost = '127.0.0.1';
$dbname = 'test';
$dbpwd = '';
$dbuser = 'root';

try {

 $conn = mysqli_connect($dbhost, $dbuser, $dbpwd);
 if ( !$conn ) throw new Exception('db error');
 mysqli_select_db($conn, $dbname);
 mysqli_query($conn,'set names UTF8');

 $id = 1;
 
 $sql = "select * from product where id='{$id}'";
 $query = mysqli_query($conn, $sql);
 $data = mysqli_fetch_array($query, MYSQLI_ASSOC);
 
 if ( $data['num'] <= 0 ) throw new Exception('product sold out');
 
 sleep(1);
 $sql = "update product set num=num-1 where id='{$id}'";
 mysqli_query($conn, $sql);
 echo 'ok';
 
} catch( Exception $e ) {
 echo $e->getMessage();
}

阅读更多
扒站小能手
8年前
  • 4
  • 0

扒站小能手

憋了好几年终于能稍微憋出点小玩意发布一下,希望有人能看到甚至能用上

自己用py写了一个扒站的工具,具体不多说,直接放出github地址

https://github.com/paperen/website-clone

扒站小能手

说明

  • -h or --help 说明
  • -u or --url 站点网址(site url)
  • -d or --dir [可选]保存本地目录,默认为站点域名(which directory to save files[op tion])

例子(example)

py clone.py -u paperen.com

clone -u paperen.com -d test (windows下)

阅读更多
想到一个自动更新多个奴隶版本库的解决方案
10年前
  • 3
  • 0

想到一个自动更新多个奴隶版本库的解决方案

首先声明一下,paperen这里这种方案只是自己想出来的并不是完美的,也许已经有许多前辈已经遇到与我一样的需求并且已经有一套完善的项目管理办法,有知道的麻烦也给我提一下,paperen确实没google出来…

而目前就paperen这个解决办法简单来说就是通过svn的钩子来实现 也需要一些脚本的支持(这里还是用了php)

首先还是先举例,比如SVN服务器上有一个项目版本叫test,我在工作机上checkout下来了,然后又在测试服务器1上checkout一遍,又在测试服务器2上checkout一遍,那么到目前为止test这个项目已经有三个版本,我的工作机上、测试机1上、测试机2上,然后本地的版本某个文件修改了一段代码后提交,很明显其他两个测试机上的代码版本都不会产生变化,因为没有update,那么我得一台台远程过去svn update一遍,我很懒,我不想手动去更新版本,so…

于是乎paperen就想能否让svn服务器具有一些推送的动作,让测试机上的版本自动update,就像下图所示这样的一个机制

阅读更多