ThinkPHP定时任务(二)

前面说了TP框架中定时任务实现,也对存在的问题和优势做了一个简单的分析。如果有兴趣看的朋友可以参看ThinkPHP定时任务(一)。这篇主要对基于传统定时任务crontab[守护进程],外加TP框架支持实现的基于TP的定时任务 动机 用过TP的朋友都知道,TP框架是一个由国人开发的很优秀且轻量的PHP Web框架。由于其丰富的文档和强大的用户群体,在国内有不错的保有量。记得之前项目之初选择框架的时候,朋友建议选择TP,给的建议就是用户群体大,便于招人。 TP在Web模式下获得除了不俗的成绩,但是在非CGI模式下,通常(CLI),缺罕有人用。究其原因,个人觉得,无外乎以下几点: 文档解释的比较少 对CLI模式本身支持的比较简单 有这样前后台执行需求的用户大多选择了lara...
点我阅读更多...

ThinkPHP定时任务(一)

后台开发的过程中,免不了和定时任务打交道。每天定时的发短信给用户,定时的计算收益、利息,固定间隔的去执行某项大型任务(不适宜同步执行)等等,等等 常用的定时任务都是基于linux中的crontab进行,不过今天我们主要做TP框架内的定时任务实现解析,分析其实现原理和缺陷。在下一部分,会介绍一个新的方案 行为扩展 细心的朋友应该知道TP框架中有一个名叫行为扩展的东西。其实简单的概括起来就是HOOK,可以实现在某个时机进行HOOK,然后注册监听(Listen),实现代码和功能的无侵入式嵌入。行为扩展在我们的项目中使用的比较多,静态资源替换、错误模板替换(这个只有经历过才知道为什么)、自动初始化,太多的地方。总体来说,由于TP暴露了很多关键点的HOOK,我们在使用的时候,只需要去监听即可,...
点我阅读更多...

PHP秘钥管理

做过PHP开发的同学们都应该有这么一个认识,PHP代码中的所有东西对开发者都是不透明的。只要有代码就可以看到所有的配置信息,但是这样会存在什么样的问题呢?前段时间也对此类问题做了些许思考,并提供了一个目前来看比较好的解决方案。 现状 目前比较常用的存储秘钥的方法,大致可分为如下几种: 密钥明文存储到在代码文件 密钥明文存储在某个隐蔽的地方 加密后存储,加密算法暴露 密钥服务器 针对以上几种方式,其实每种都不是一个完美的解决方案。将密钥明文存储到在代码文件中,是最直观,最直接的做法。相信很多项目中也还是这么做的。这样最大的缺陷就是秘钥直接暴露,完全没有隐私。密钥明文存储在某个隐蔽的地方,算是一种比较好的方法,将秘钥存在服务器上的某个地方,用部署脚本部署秘钥,但是...
点我阅读更多...

PhpStorm 代码审查

PHP的自动类型转换(弱类型)使我们在开发过程中确实尝到了不少甜头,然后由于语言的松散性(个人杜撰用词,PHP是全宇宙最牛逼的语言),也使我们在开发过程中碰到不少让人追悔莫及的问题,这篇文字旨在帮助自己总结IDE是如何帮助自己避免一些潜在问题的 手抖问题 先看下面代码 if ($condition = 'ok') { //do something } 这里我们的本意是当$condition的值为ok时,进入判断逻辑内。但是由于我们手抖少写了一个等号,结果的变成了每次后悔执行do something操作 当然如果我们有良好的编码习惯,这类问题是可以直接避免的,我们可以做到在判断语句中,始终将常亮放到等式的左边,例如 if ('ok' = $condition) { ...
点我阅读更多...

谈谈session

做互联网开发的同学,想必都对session有所了解。session我们可以理解为是一个会话,能确定服务的访问者当前的状态或者身份,也可以理解为是当前访问者的一些相关数据。最近由于项目中碰到了一些关于session处理的内容,索性将session相关的东西总结下,以备将来回顾。 什么是session 在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Se...
点我阅读更多...

nginx vhost

在服务器架构上,一般我们会选用LAMP或者LNMP的配置。前面我们说明了一些关于apache配置的东西,这里大概描述下nginx的配置。关于怎么安装LNMP这里就不做赘述,网上也存在很多教程。 nginx配置文件 nginx的配置文件,一般都存在于nginx目录下的conf目录。如下图所示 所有的配置都可以在此设置 配置vhost nginx的vhost配置文件存在于conf/vhost目录,结构如下 我们可以为每个虚拟主机路径建立一个文件,当然文件名没有什么特殊的要求,只要以conf结尾即可。一般我们会起一个容易标示的名字。 配置说明 首先我们来看看phabricator.conf的内容 server { server_name phabricator.powell....
点我阅读更多...