目前这个学习文档的次序有点乱,我也是看哪个简单就先写哪个,正确的应该是介绍文档,然后介绍文档的目录结构,然后,各个组件有个简介,再跟下来来个 HelloWorld ,然后单独介绍组件,然后进阶使用等等,这么个次序才是正确的,不过最近比较忙,最后写完会重新整理出一个次序来的。
Captcha 就是 LotusPhp 验证码的组件,一般来说,比较规范的 LotusPhp 组件都会由3个部分组成,就是分别是配置文件,框架源码和应用源码,框架源码的话自己下就行了,我这里不占地方贴代码了,这里就是写出配置文件和应用范例,能快速看懂会用为原则。
Captcha 组件可以快速生成验证码,这个验证码不借助于 Session 验证,而是在指定文件夹里生成一个经过加密的验证文件,读取的验证码的时候会主动拉取验证文件,读取成功就删除了验证文件,读取不成功返回 false。
Captcha 组件有3个方法
init() 是初始化验证码组件的方法。
getImageResource($seed) 是生成验证码的方法,会读取默认的配置文件,然后根据传入的 $seed 生成验证码图像,该变量不可以是常量,建议可以使用md5(uniqid())得到随机不冲突的$seed
verify($seed, $userInput) 是验证验证码是否正确的方法,两个参数分别是随验证码一起发送到客户端的$seed,一个是用户输入的数据,如果用户输入的值等于 Captcha 缓存中值就代表验证成功。
配置文件名为:captcha.conf.php
先来看配置文件:
<?php
// 允许输出的字符,去除了0,1,o,l这样容易混淆的字符,增加可辨识性
$config['captcha.allow_chars'] = "23456789abcdeghkmnpqsuvxyz";
// 验证码长度
$config['captcha.length'] = 4;
// 图片生成类的类名,如果你有更喜欢的图片生成风格或者类,可以放到 captcha 目录下,然后更改下面的值为该图片生成类的类名
$config['captcha.image_engine'] = 'LtCaptchaImageEngine';
/*
* 这里的配置内容主要是设置验证码图片的一些基本参数
* blur 模糊效果,开启后图像处理速度会变慢
* scale 图像质量,1代表低质量图像,2代表中等质量图像,3代表高质量图像
* width 验证码宽
* height 验证码高
* max_rotation 设置字符顺时针旋转的倾斜度,为增加机器破译的难度的
*/
$config['captcha.image_engine_conf'] = array('blur' => false,'scale' => 2,'width' => 200,'height' => 80,'max_rotation' => 4);
下面的是输出验证码的视图范例:
{$this->data['seed']} 这一句是 LotusPhp 的视图语法,代表输出 data['seed'] 变量,可以对照以后的 MVC 章节
<html>
<head>
<meta charset="utf-8">
<title>Captcha LotusPHP</title>
</head>
<body>
<form action='/blog_article/simplest.html' method='post'>
<img src="/blog_article/captcha_image/seed/{$this-/gt;data[.html'seed']}"/>
<input type='hidden' name='seed' value="{$this->data['seed']}" />
<br />
请输入上图中的验证码:<input type='text' name='captcha_word' />
<input type='submit' />
</form>
</body>
</html>
这个是 captcha_image.php 文件代码:
$captcha = new LtCaptcha;
$captcha->init();
$seed = md5(uniqid());
$imageResource=$captcha->getImageResource($_GET["seed"]);
header("Content-type: image/png");
imagepng($imageResource);
验证文件 simplest.php 代码:
$captcha = new
本期格言:
越高级的技术越需要扎实的基本功。而学好基本功的首要条件是能沉住气和静下心。
往往很多程序员太想一口吃一个肥婆而直接略过基础部分去学习高级部分,长期以往会导致越来越丧失继续学下去的信心,但迫于各种压力又不想放弃,于是气急攻心、郁闷纠结,最后血压越来越高,于是产生了一个程序员通病的描述词:“浮躁”。
本期扯淡:
大家会发现很多程序员喜欢买书自学。其实这是很好的习惯,有对IT行业的热情和喜好就会有执着,有了执着就会想尽各种办法获取知识,当我们通过无限的量变后跳过了执着这个阶段,终于欣喜的发现了走出“程序员囧途”的出口,于是开始不顾一切的奋起创业。
然而买书自学方面,一些有点初级技术经验的程序员青年可能有个习惯:一般会先熟读第二章(有些书第一章啰嗦到什么程度,大家懂的)。
然后发现头两章挺简单,于是偷偷的往后跳过四到五章,这个跳跃很有意思,一般技术类书籍过了五、六章后,会开始讲实例和应用。
于是该青年顿时来了兴趣,他决定先看应用实例,因为实例搞懂了明天就可以投简历了,效率多高啊。于是青年点上烟盘腿坐在床上,并警告室友把dota音效关掉。
一个小时后,室友欢呼—“翻盘了”。再一看青年,已经在床上沉睡多时。
正文部分
PHP的string函数
很多javaer和C# Man经常会在网上互博,譬如”java好还是c#好”。这方面的话题甚至比”社会主义”好还是“资本主义”好讨论的更加激烈,更加无底线。这时其中一个 javaer拿出java中对String对象的处理,宣称其有多么的高效率、结构多么的分明,C# Man不甘示弱也拿出string对象,宣称其有多么的方便、功能有多么的强大。这时一个PHPer不小心点进了该贴,他弱弱的打算参与跟帖,于是他列出 了PHP中string函数列表,瞬间终结了上面(意)淫乱的场面。
不得不说,PHP的string函数确实非常强大。很有名的wordpress把这些函数几乎用到了极致,而今天本文要简要讲的就是关于PHP的string函数。
string函数是php内置的。不需安装,不需引用任何函数库。这点很好,干净利落。我喜欢,拿来就可以使用。
接下来爆料几个常用的string函数,不常用的大家可以去查手册,个人建议有些函数根本不用去学,用的时候再查即可。这点是java或者c#均不能媲美的。
一、去空格,字符替换,输出
这三个字符处理函数实在是太常见了,行内人士把它们叫做“三宝”,为何叫三宝?那是因为掌握这三宝加上一些html知识简直就可以立马上手做一个并不是特别幼稚的页面了,同时基本上大部分功能性函数都要用到这老三样。
去空格:trim 。去除字符串前后空格
用法也灰常的简单 如:
$str=’ 南京8秒绿灯走百米 中国式过马路孰之错 ‘;
$str=trim($str); // 这里就达到了去除”南“和”错“两个字身边的空格
这个函数看似简单,不过有个小学问。它不光是去除字符串两把的普通空格,还能去除字符串两边的”\t(这货是全太阳系最讨厌的,白白净净的,不仔细看还以 为是空格其实是一个tab)” “\0″也就是 NULL。”\n”换行符,”\x0B” – 纵向列表符, ”\r” – 回车。所以不要以为trim只去空格,其实php内核默默无闻的帮你干掉了很多字符。
如果$str=trim($str,’\t’); 则代表 这个trim只去除字符串前后的 \t也就是 tab,遇到普通空格之类的是不会管的。
输出:它存在 echo、print、printf 这三个主要函数
至于区别:大家只需知道 print比echo稍微慢,printf可以格式化输出即可。不用搞的太清楚。如果什么都要搞得太明朗太计较,那么你何必去学php。
这里只讲printf(print大家就忘记这货吧,只需用echo即可)
$str = “php”;
$number = 100;
printf(“开心学%s %u天”,$str,$number);
则会输出 开心学php100天。按照顺序%s代表字符出,$u代表数字。有几个%符号,后面就要跟几个参数。如果我倒过来写:
printf(“开心学%s %u天”,$number,$str); 那就会输出开心学100 0天。
php首先会把$number当做字符串那100就是”100″,把”php”这个字符串当做数字型,大家知道把php变为数字是行不通的,所以就是0.
字符串替换函数:str_replace
这个函数非常的有用。怎么个有用发?网警会让你充分知道你为什么要学会这个函数。你懂的。
$str=str_replace(“敏感词汇”,”我爱祖国”,”XXX@#%$&%@这里其中有一个是敏感词汇“);
这就代表我要把某些 敏感词汇替换成”我爱祖国“。注意这个函数后面还有个count可选参数。几乎没什么用,那是用来计数用的,代表一共替换了几次。如果要实现只替换几个,那么要用正则表达式来做。本章暂时不讲。
有人说这个函数效率差。其实对于小网站小数据量的处理根本无所谓。如果你发现你的网站中简简单单的str_replace一个小字符串已经很影响服务器性能了。那么恭喜你,你要发大财了。
二、strpos()
微信公众平台开发 微信公众平台开发者 微信公众平台开发模式 签名校验 消息响应
作者:方倍工作室
原文:http://www.cnblogs.com/txw1958/archive/2013/05/08/weixin-if29-valid-responseMsg.html
一、问题来源
微信公众平台在启用接口的时候使用valid函数进行验证,
define("TOKEN", "方倍工作室");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
但在验证完成后,就开始执行对消息的响应,不再使用valid函数,需要把他注释掉,并且设置成responseMsg()
如下
define("TOKEN", "方倍工作室");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->responseMsg();
这样操作,其实比较麻烦,因为要回头来改函数。
二、问题分析
为什么要用两个不同函数来处理呢?这是因为两个不同的函数执行不同的功能,
当执行valid函数时,提交的是验证字符串,用于保证url和token填写提交正确,这个时候微信服务器提交给url的请求是
signature=eded789463180edf6c13691398d0cb4c85fb0e23&echostr=5838479218127813673&stamp=1359100969&nonce=1359376876
而当响应消息的时候,已经可以确定url地址正确了,这时候主要是获得回复的xml了,这时提交的请求类似如下:
signature=ba7f5cf8aee512037e5a669596f6f64a8e763d7c×tamp=1368016183&nonce=1368211921
二、解决方法
我们回头来看一下valid函数
public function valid()
{
$echoStr = $_GET["echostr"];
//valid signature , option
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
其中有一个_GET变量,那么什么是_GET变量,以下内容来自 http://www.w3school.com.cn/php/php_get.asp
$_GET 变量
$_GET 变量是一个数组,内容是由 HTTP GET 方法发送的变量名称和值。
$_GET 变量用于收集来自 method="get" 的表单中的值。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送的信息量也有限制(最多 100 个字符)。
为什么使用 $_GET?
注释:在使用 $_GET 变量时,所有的变量名和值都会显示在 URL 中。所以在发送密码或其他敏感信息时,不应该使用这个方法。不过,正因为变量显示在 URL 中,因此可以在收藏夹中收藏该页面。在某些情况下,这是很有用的。
我们注意到在二中描述的,两次不同的请求,签名验证请求中,url中有个echostr变量,而在响应消息中是没有的,
signature=eded789463180edf6c13691398d0cb4c85fb0e23&echostr=5838479218127813673&stamp=1359100969&nonce=1359376876
那么我们用同样的思路,判断_GET变量中是否有这个echostr变量,来实现区分两种不同的请求:
最终代码类似如下:
//define your token
define("TOKEN", "方倍工作室");
$wechatObj = new wechatCallbackapiTest();
if (isset($_GET['echostr'])) {
$wechatObj->valid();
}else{
$wechatObj->responseMsg();
}
至此,我们就不用再来注释一个启用另一个了,减少了一次麻烦。
本文链接