PHP 類別下的文章 文章類別歸檔


Dcat-admin登录增加验证码(保姆级教程)
3年前
  • 206
  • 194

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中,登录判断增加验证码对比
阅读更多
Codeigniter扩展-支持分库分表
8年前
  • 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表里面

阅读更多
RTXServer web接口清单
11年前
  • 4
  • 2

RTXServer web接口清单

109天没发表博客,破了记录,至从换了公司后就没有机会使用CI,重要的原因是自己懒惰了,下班后的时间几乎都在玩吉他,所以一直没有找到可以分享的技术点

不过在这109天里可以肯定的事情是:我变了

在新公司接触得最多的是oa与RTX,而RTX其实也是很多玩法,这里就先将前几天趁空闲的时间整理下来的RTX可以通过web方式调用的接口列一下

值得提醒的是这些接口都需要设置访问权限不然访问时会提醒“IP受限制”

RTX Server强加了SDK访问安性,因此通过http方式访问cgi文件需要在SDKProperty.xml添加远程访问机器的IP地址,如下图所示,允许192.168.10.100通过http方式访问cgi文件
阅读更多
CI脚手架(当作是圣诞礼物好了)
12年前
  • 2
  • 0

CI脚手架(当作是圣诞礼物好了)

自己设计的一个基于codeigniter的脚手架,能生成原始模型文件与模块目录,你只需要扩展与完善功能即可,减少编写重复模式的代码 在CI的基础上也做了一些扩展 包括一些开源的扩展与自己编写的扩展

git上的项目地址 https://github.com/paperen/ci-scaffold

部分截图

ci-scaffold界面
ci-scaffold界面

阅读更多
CI模型扩展成调用即加载(含缓存模式)
12年前
  • 2
  • 0

CI模型扩展成调用即加载(含缓存模式)

关于CI中的模型的标准用法是先要load然后才能使用的,基于这种调用模型的做法长久下来就让paperen觉得麻烦,一开头就得要将用到的模型手动全部load过来,当然这种算是比较苛刻的做法也是有它的理由,毕竟这就清楚这部分引用了哪些模型与减少加载多余模型的机会。

// 加载用户模型
$this->load->model('user');
// 获取所有用户数据
$this->user->all( $per_page, $offset );

CI的模型文档 http://ellislab.com/codeigniter/user-guide/general/models.html

在开始后续内容之前还是声明一下

调用即加载

paperen想象中要达到的目的就是

// YY一下要实现的调用写法
$this->model_user_all( $per_page, $offset );

我们不需要再先load,调用的时候就会自动加载,格式必须是model_{模型名称}_{方法}( 参数1, 参数2, ... )

如果你觉得这样不适合自己使用就不用往下看了

附带查询缓存的概念
// YY一下要实现的调用写法
$this->model_cache( 'model_user_all', $per_page, $offset );

之前也有一篇关于查询缓存的文章 http://paperen.com/post/ci-querycache-extend

其实就是避免不同模块执行了相同的SQL语句,模块之间的数据完成是可以公用的,而这个querycache就是桥梁,也算是一种解决办法吧,不过在这次扩展中querycache将成为其中的组件,对于我们来说它完全是透明的

强调一下 对插入与更新、删除的动作不要使用查询缓存 paperen在代码中并没有限制这个也就是意味着你可以使用model_cache来完成update、insert、delete等操作,但是这有什么意义呢。。。

阅读更多
关于hook一些研究(CI)
12年前
  • 5
  • 2

关于hook一些研究(CI)

近来因为布置了每个人了解一个框架,paperen依旧选择CI(从这方面也可以看出我很专一…)作为进一步研究,所以paperen又再次看了它的核心代码,而看到hooks的实现时不禁有感而发,感叹之前自己试着在CI的基础上设计一个hook的做法实在太SB。

paperen并不想放什么概念的跟大家分享,而是从自己博客开始。

你看到博客的右边栏,在进入某篇文章详细时是会多出这个附带图片的栏目,就是将该文章中所有的附带图片在此用缩略图形式展现,方便浏览者点击查看。这个地方就是应用了钩子,或许说到这里你还是很模糊,但下面就会进行更多解析。

阅读更多
paperenblog發佈
12年前
  • 2
  • 0

paperenblog發佈

終於算是可以光明正大地發佈自己的博客源碼了,雖然之前一直都有在git,但是都是功能沒完善的版本,而現在正式進行官方發佈paperenblog~~

安装说明

1 将压缩包解压,将相应文件复制到您的www目录下

2 根据自己的情况去修改.htaccess文件第3行RewriteRule

阅读更多
用户动作记录器
12年前
  • 0
  • 0

用户动作记录器

当我们设计的站点应用对安全有一定要求的话,就可能会涉及到需要记录使用者的操作记录,比如什么时候登录什么时候做了些什么之类的,你也可以称之为用户操作足迹。

具体来说要实现的最终要得到的数据是如下的:

吴给力在 2012-02-18 01:14:13 上了厕所
吴给力在 2012-02-18 01:17:23 回到床上
吴给力在 2012-02-18 02:26:43 接起电话
吴给力在 2012-02-18 02:27:11 放下电话

就针对上面这个描述来说的话,我们可以有两种解决办法:在吴给力身上装一个记录器,凡是与其身体有接触的东西都会被记录下来同时记录触发的时间;在所有东西上放置记录器,每当触摸人是吴给力时就会连同时间记录下来,理论上两种都是可行的办法,既然这样那就写写试试吧。

阅读更多
解决表单重复提交
13年前
  • 3
  • 0

解决表单重复提交

这应该是个很长久的问题……长久得在网上一搜大把解决方案,就是关于如何防止表单重复提交的问题,而paperen这里也就再来解析一下解决的方法与原理,毕竟也是一个实用的技 术。如果您已经知道如何解决的话那么这篇文章可能不适合你的口味,paperen这里也打算从基础开始讨论,所以希望一步看到解决方案的您也可能不太适合,所以请注意。So~开始吧 ~

paperen想您一定知道表单是什么吧,form元素就是表单,一般网页需要输入的地方必定使用了表单元素,也很常见,一般的代码如下:

<form 

method="post">
<p>
<label for="test">随便输入点什么</label>
<input type="text" name="data" id="test" />
</p>
<p>
<input type="submit" value="提交" name="submit" />
</p>
</ul>
</form>

重点其实是form与input元素,p元素只是paperen私自加上去的,对后续的说明没有任何影响,其实很简单,所谓input就是输入了,你可以完全将input 元素理解为是用作用户输入,只是某些属性的(type)不能作为输入而已(这里就是submit),而form元素你完全可以将它理解为是一个袋子,将所有用户输入数据到装在它里面之后用 来提交回服务端处理,但对于form元素值得注意的是method属性,一般来说有get与post两种方法,其实不要想得太复杂(因为深入的不需要太理解,对于后续的内容没有太多关系,如 有兴趣不妨可以使用浏览器的调试工具查看请求头部信息与发送信息,例如firebug),表现出来就是,使用get提交表单的话所有的input元素的值将会在地址栏处出现,而post则不会, 例如使用get提交此表单后的浏览器地址栏

阅读更多
手工制作的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模块

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

阅读更多
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

阅读更多
markdown编辑器(PHP)
12年前
  • 1
  • 0

markdown编辑器(PHP)

自从接触了markdown就迷上了它,就希望连word文档都可以使用markdown来编写。看一两遍markdown的语法说明(中文版)基本就能上手了,简单快捷

paperen想将自己博客的编辑器也改造成markdown的,于是乎利用工作休息与空闲的时间在git上找了个php markdown解析引擎,然后再补充一下代码就完成了一个简单的markdown editor

演示地址 http://paperen.com/demo/markdowneditor/

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

markdowneditor

一个简单的markdown编辑器

@author paperen

@url http://paperen.com/post/markdowneditor/

关于markdown

Markdown 的目标是实现「易读易写」。 可读性,无论如何,都是最重要的。一份使用 Markdown 格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令所构成。Markdown 语法受到一些既有 text-to-HTML 格式的影响,包括 Setext、atx、Textile、reStructuredText、Grutatext 和 EtText,而最大灵感来源其实是纯文本电子邮件的格式。 总之, Markdown 的语法全由一些符号所组成,这些符号经过精挑细选,其作用一目了然。比如:在文字两旁加上星号,看起来就像强调。Markdown 的列表看起来,嗯,就是列表。Markdown 的区块引用看起来就真的像是引用一段文字,就像你曾在电子邮件中见过的那样。

以上摘自http://wowubuntu.com/markdown/#philosophy

阅读更多
通过hook设计出更方便的令牌
12年前
  • 0
  • 0

通过hook设计出更方便的令牌

之前同事做每周分享时说了thinkphp的令牌,只需要在视图中写上__TOKEN__那么到时就会自动转换成一个隐藏域,顿时觉得很方便于是那时就按照这种思路在CI的基础上扩展了这种产生令牌的方式

记得之前发表过关于hook令牌的两篇文章

如果你还不清楚什么是钩子的话,建议花点时间看看与写写,而令牌其实就是为了防止表单重复提交的,不知道的自己补补

要在CI的基础上实现这种扩展,paperen我首先想到的就是利用钩子,利用在视图输出前的钩子检测文本中是否有__TOKEN__关键字,有则创建一个令牌并用隐藏域替换掉

阅读更多
一个基于Hex-HMVC的模型扩展
12年前
  • 3
  • 2

一个基于Hex-HMVC的模型扩展

为什么要进行这个扩展?

在使用hex提供的HMVC扩展方案以来在模型方面一直有疑问,怎衡量模型放在相应modules/models下还是放app目录/models下?比如模块1中要调用user模型的get_all方法获取所有用户数据 模块2也要获取这些数据 那么若模块1,2的模型中都创建一个user模型实现各自的get_all方法会不会显得没有重用的味道?

通过在微博上询问@hex hex的评论启发了我,他说“感觉还需要有个模型继承的功能吧” 没错继承

于是paperen我尝试按照这个概念去在hex的HMVC基础上扩展这个功能,从而达到这个继承的模式

涉及文件

就一个MY_Loader.php

阅读更多
paperenblog补充说明
8年前
  • 3
  • 3

paperenblog补充说明

在这里我将告诉大家一些paperenblog不足与可能对大家有帮助的地方

首先,很重要的一点就是paperenblog是基于codeigniter框架的,所以它必须继承CI的优缺点,同时它也是遵从CI自身规范的,还有我使用了hex提供的HMVC扩展方案 https://github.com/CodeIgniter/HMVC

关闭调试模式

想去掉调试信息的话,可以修改根目录下的index.php的21行

将常量ENVIRONMENT改为不是development就行了,其实这个常量也是CI里面定义的,我也是顺着CI去的而已,关于环境这个常量你继续往下看就会看到,CI定义的有三种:development、testing、production,而只有是development时我才会将调试信息展示。

关于安全

大部分安全措施都已经由CI帮我们完成,包括注入攻击与XSS。针对代码上的攻击我希望paperenblog已经做得很好,但是不代表绝对的安全。

而这里还要提及一点提高站点安全的方法

阅读更多
Ci使用HMVC时增加查询缓存
12年前
  • 2
  • 0

Ci使用HMVC时增加查询缓存

如果你有扩展过CI的HMVC(hex提供的方案),你可能会在实际使用的过程中越来越理解HMVC,但也可能会越来越搞不清楚什么是HMVC,正如paperen一样…有时候特别觉得模块这个词实在是抽象,到底什么才能定义为模块,到底概念并不是最重要,重要的是你用起来是否合理,是否有效,是否能更好减少耦合。

在paperen使用hex提供的这个hmvc方案过程中,确实也遇到了一些bug,不过目前的已经得到修复,关于hmvc我觉得重要一点是模块之间数据不能共用,而导致一个页面有可能执行了多条一样的SQL,想体现一下这种现象,也很简单。

这是原始调用模型的写法

$this->load->model('userlog_model');
print_r( $this->userlog_model->all() );

调用了userlog_model中的all方法,是什么不要紧,反正你知道这里就是送出一条SQL就够了

阅读更多
同步登陆
13年前
  • 1
  • 1

同步登陆

20120104211336

这不是什么新的技术,所以如果你已经知道如何实现可以忽略此博文了。

关于同步登陆的需求,大网站可能有几个子网站或者是子系统,不能设计成每次进入其他子网站就登陆一次,而应该是在子站点登陆了就可以漫游于其他子站点,当然用户帐号与密码也应当保持一致。

阅读更多
Just For Fun
13年前
  • 1
  • 0

Just For Fun

话说很久很久以前有个人,他的名字叫paperen,他一直想弄一个聊天工具……而又在同时他不知不觉间步入了WEB的领域,但他依然想弄个聊天工具……于是直到这篇Just For Fun的面世……

一个很囧的引子……其实呢,paperen我在毕业之前就弄了一个,那时打算将它作为毕设的,但结果用了那时在诺网期间那个IP屏蔽的东西作为自己的毕设~~这次再弄了一个,纯属是弄着玩而已,不过也花了些少功夫,代码架构上就一般般,并没有太多面向对象的味道,其实一开始是想发表一个关于在线的东东,结果弄着弄着就加上了聊天对话的东西……下面放出DEMO与RAR包的地址(如果你想做得更好,paperen可以说我这个还远远不够~~但这并不影响你去实现你想实现的更cool的东西):

DEMO paperen.com/demo/just-for-fun/

阅读更多