php 验证码学习笔记

我们为什么需要验证码?

  • 需要判断正在执行操作的另一方,是真正的人/或者是非人(机器人/脚本/程序)。

生产验证码的基本步骤?

  1. 产生效验数据
  2. 产生干扰数据
  3. 生成图片
  4. 让用户看到图片
  5. 验证真实性

PHP做验证码主要用GD库来实现。

 

GD

  • resource imagecreatetruecolor(int $width,int $height);
  • 创建一个图片 返回一个图像标示符
  • imagecolorallocate (resource $image, 255, 255, 255);
  • 分配颜色  输入资源标示符+RGB颜色  返回一个标示符
  • // 如果想要显示透明度 可以用 imagecolorallocatealpha() 函数;
  • bool imagefill ( resource $image, int $x, int $y, int $color);
  • 区域填充 在image资源上,开始坐标为x,y 填充 color
  • bool imagesetpixel ( resource $image, int x,int y, int $color);
  • 在image资源上 在x,y坐标产生一个像素的color颜色的点
  • bool imageline ( resourcce $image, int $x1, int $y1, int $x2, int $y2, int $color);
  • 在image资源上,从 x1,y1画到 x2,y2,产生一条颜色color的线段
  • bool imagestring ( resource $image, int $fontsize, int $x,int $y, string $string, int $color );
  • 在image资源上 ,从 x,y开始花上字符串string,并且颜色是color,字体大小是fontsize

其他需要掌握的函数

  •  string substr( string $string , int $start [, int $length ] );
  • 返回 字符串。 从源字符串string上,从start开始 到长度为length处截取 。
  • int rand ( int $min, int $max );
  • 返回min到max直接的随机数。

如果你还要验证的话

  • $_SESSION[]
  •  session 全局变量需要知道
  • bool session_start(void);
  • 创建新会话或者重用现有会话。
  • $_REQUEST[]
  • request 全局变量需要了解

等等 你需要了解更多,请查看 php手册 ,边学习边看手册是一个不错的方法。

最后, 是练习的代码:

[php]
<?php
session_start();
// create image
$image = imagecreatetruecolor(100, 30);
// color image
$bgcolor = imagecolorallocate($image, 255, 255, 255);
// put color
imagefill($image, 0, 0, $bgcolor);
// create pixel
for ($i=0; $i < 200; $i++) {
$x=rand(0,200);
$y=rand(0,30);
$pixcol = imagecolorallocate($image, rand(1,200), rand(1,200), rand(1,200));
imagesetpixel($image, $x, $y, $pixcol);
}

// create line
for ($i=0; $i < 4; $i++) {
$linecolor = imagecolorallocate($image, rand(100,200), rand(100,200), rand(100,200));
imageline($image, rand(0,50), rand(0,30), rand(0,100), rand(0,30), $linecolor);
}

// create unique rand int
for ($i=0; $i < 4; $i++) {
$num = rand(0,9);
$numcolor = imagecolorallocate($image, rand(0,150), rand(0,150), rand(0,150));
$x = ($i+1)*20;
$y = rand(0,15);
imagestring($image, 6, $x, $y, $num, $numcolor);
}

// create unique sting
$yzmyz = ”;
for ($i=0; $i < 4; $i++) {
$strcol = imagecolorallocate($image, rand(0,150), rand(0,150), rand(0,150));
$data=’abcdefghijkmnpqrstuvwxy123456789′;
$str = substr($data, rand(0,strlen($data)-1),1);
$yzmyz .= $str;
imagestring($image, 6, ($i+1)*20, rand(0,15), $str, $strcol);
}

$_SESSION[‘yzmyz’] = $yzmyz;

header(‘Content-type: image/png’);

imagepng($image);

// drop image
imagedestroy($image);
?>
[/php]

记一次对博客死链的清除

今天,我打开博客之后,发现有加载缓慢的情况。
F12之后,发现了一个无效链接。如下:
2014-11-30 19:05:05 的屏幕截图

我知道我的网站是没有经过大的改动的,唯一的就是开启了几个插件。

然后我就登陆服务器去找,想知道罪魁祸首是什么?

不过在那么一堆文件里找一个网址,如图大海捞针一样。

当然你的服务器不会让你这么痛苦的,find命令会帮你搞定。

我去网上搜索了一下,得到了几个find的用法。如下:

  • 查找文件中是否有某个字符串
  • find . | xargs grep -ri “字符串”
  • 如果只想显示出文件名
  • find . | xargs grep -ri “字符串” -l

find是Linux下非常强大的搜索工具,有空我还要深刻学习一下,不过这次就先这样了吧!

以下是执行之后的效果,找到了!

2014-11-30 19:11:56 的屏幕截图

有时候插件名和文件夹名不一样,但是认真观察的话还是可以知道插件名的。不过我是直接进入之后看程序备注就知道文件名了。

然后直接关掉这个插件。至此,一个不正常的外链就被我修好了。

ItPP Team 的第0个项目

恩,这是个算不上项目的项目

主要是提供免费空间以及免费博客的想法而已,服务器放着也是放着 多帮助别人还是极好的。

以下是简介:

ItPP团队看到了很多求免费空间的朋友,作为过来人,我们很清楚的了解,一个月上百元的服务器费用对很多人来说(尤其是学生),也是一笔不小的开支。

所以我们决定了发起这个项目,用来帮助想要拥有自己的博客或者网站的朋友!

附上链接

个人博客扶持项目

 

最后,再次:欢迎任何喜欢互联网的朋友加入我们

一次阿里云服务器的磁盘只读修复经历

今天,忽然想把一个网页做点小改变。当我连接上了服务器之后,忽然感觉气氛和平时不同。

然后我也没太在意,和往常一样的 cd /data {tab}{tab}。

呐尼,居然报错了。好吧,这个我不懂,先不急。

然后,我直接输入地址,vi index.php,然后从本地粘贴(起初我是用scp的,但是当scp报错之后,我只有亲自上阵了)。

然后 :wq   ,!!!居然提示我只读,我用的可是root啊,这是闹那样!

好吧,文件系统出错。系统盘和数据盘都出现问题了!

百度一下(祭奠一下逝去的谷歌):

fsck

好吧,系统盘貌似没问题了,tab 补全也可以使用了。

然后,继续,数据盘还是不可写 。

数据盘我挂在了 /data   ,然后我想 我是个菜鸟,重启一下就ok了吧!别这样乱来了。好吧,reboot……

cat /proc/mounts
/dev/xvdb1 /data ext4 ro,relatime,user_xattr,acl,barrier=1,data=ordered 0 0

哦,no!好吧,继续百度!

mount -o rw,remount /dev/xvdb1        失败

umount /dev/xvdb1  (提示device is busy)失败

然后我实在没办法了,

apt-get update

apt-get upgrade

umount /dev/xvdb1

呐尼,居然成功了 cat /proc/mounts 果然没有xvdb1 了

好吧  mount -a

vi index.php   -> :wq    OK

好吧,至此  成功修改一个页面

最后   更新大法好

(一篇略带娱乐的文章,希望真正懂的朋友可以留言给我说明原因,如果有什么地方不合适,大家不要介意,就当娱乐就行了)

帮基友测试主题 ~(≧▽≦)/~

嘛,先来介绍一下吧:

PosArt

一个同是站长的朋友3天完成的作品,实在是让我惭愧。

考虑之后就拿过来用了,不过和我的wordpress怎么有点不兼容。

也算是帮忙测试吧!为其一个月,暂时没法设置友链了,对不起朋友们了!


下载地址:

度娘盘:http://pan.baidu.com/s/1h668d

Gitbut:https://github.com/lingoys/posart

(我用的是github上的,这个是相对来说最新的版本,建议使用这个。如果你不知道github,赶快去百度吧! )

由于最近没有网络,所以我这是在网吧写的!

当然,针对本主题的意见以及改动,我也会做出建议的。

加油,我可爱的小伙伴们!

嘛,惨不忍睹啊!

使用svn开发自己的网站项目

目前最有名的版本管理工具就是 svn & git 了。如果想要做开发的话,ftp已经无法满足我们的要求了。

因为开发有可能是一件漫长的事情,作为目前来说只是学习者的我们,根本没有多少时间能够连续开发。所以,与之前对比&记录每一次的更改是我们非常想要的功能。它能够让我们再一次回到上次开发时的状态,能够使我们不再重复阅读代码,比较如果文件和代码都很多的话,有时候会忘记上次到底做了什么,目前的进度到哪儿了?这真是悲惨的事件!

所以,如果想要长时间做一个项目的话。一个版本管理工具是必不可少的!
因为我是在自己的服务器上使用的,并不是Github那些网站。所以我选择了svn,因为第一次接触的就是svn。

还有就是我的技术不是太好,如果放到github上,我怕被人笑话。所以想先在自己的服务器上练练,等有所成果,或着开发更负责的项目的话,我会学习使用Github。目前来说,还是svn吧!

配置起来说简单也很简单,说难也有点,不过有搜索引擎的话,一切就不那么复杂了。
先是在网上查找,找到一篇感觉靠谱的文章。

我因为比较菜,所以选择了直接在 apache 上面的配置。

  1. 先是安装 dav_svn 以及 svn , dav_svn 是属于apache上的一个模块,这样配置起来很简单啊!
  2. 然后就是配置了,基本上 dav_svn.conf 里面已经帮我们做好了,只要去掉#注释就行了
  3. 创建版本库
  4. 创建网站目录,并且配置域名
  5. 开始使用

好吧,其实偷了个懒,不过许多东西都可以搜到的,我觉得更重要的是方法&思路。
下面说说我遇到的难点:
第一个难点就是配置。主要分为3个地方:1.conf 2.passwd 3.authz (配置,用户,权限)
第二个难点就是同步问题,这个我找了好久才搞定:
1.在版本库里的hooks文件夹创建post-commit(原先有个文件,是带后缀名的,最初我以为是那个了,结果搞了半天)
2.编辑post-commit(在这之前,你要先在web目录里Checkout一下)

[php]
#!/bin/sh
#/home/user/www/project1为我们的web发布路径
svn up /home/user/www/project1 –username "用户名“ –password ”密码“ –no-auth-cache
#–no-auth-cache 这个要有,不然会报错
[/php]

这样就基本ok了,接下来就是使用了。(我做的比较急,好多东西不完善,有空加个ssl比较好)

幻想未来的网站

最新学习UI中,所以找了很多网站看看。

基本主流就块状布局为主,大部分都是 logo、banner、导航、内容(一般是一列或者两列)、版权信息&友情链接。

我也学了很多,但是其中也有很个性的网站,非常吸引我。

我也在想,如何能够将网站做得震撼人心呢!我也看过好多flash站,的确非常震撼。但同样的,也有不足点,所以我开始想象,我心目中的网站是什么样子:

智能化:网站AI(网站 互动&导航 -AI程序,如同伪春菜一般,但是功能更加强大——导航、搜索、网页切换、消息提醒、改变UI等等,更重要的一点,我希望能够声控,如果google class一般,更加智能的帮助人们浏览网站。)

视听化:不只是flash,还有 css3 & html5 ,甚至我希望能够有 透明视频技术(只在想要展现的形态之上展现视频,其他采取透明技术,这样可以不妨碍获取信息而且使网站更精美,各种元素结合,如同电影大片一样的用户体验!)

系统化:(网站开始像操作系统一般,好像已经有了“云OS“,但是,我希望更加强大,可以抛弃一般的客户端程序。系统支持:网站可以跨出浏览器,真正的成为一种应用,更加便捷!)

这些东西想想我都觉得兴奋啊!期待那一天的到来!

些东西比较片面,但是,这只是我的希望而已,我希望能够更加便捷的、更加轻松的使用Internet,而不是渐渐的变得繁琐!QQ、weibo、twitter、gmail等等,我开始变得很累很累,希望以后交流能够轻松一点!