首页 > 代码库 > 12-8-协议、请求、响应、画布(验证码制作)
12-8-协议、请求、响应、画布(验证码制作)
fwrite(文件句柄,写入内容) 返回值为写入文件的字节长度
fopen(文件路径,打开方式) 这个便是文件句柄
fclose(文件句柄) 关闭文件句柄
文件句柄打开后,可以对文件进行读写操作,关闭文件句柄便不能再对文件进行读写操作了。
copy(被复制文件路径,复制后存放文件的路径) 复制文件
存放位置要包含文件名
unlink(文件路径) 删除文件
filemtime(文件路径) 返回制定文件最后被修改的时间,得到一个时间戳
filesize(文件路径) 返回文件的大小,单位字节
关于http的请求协议包:
1, 请求行(request-line)
请求方式—请求路径—协议版本
需要单独占用一行,路径不包括域名
2, 请求头(request-line)
本次请求需要用到的所有协议项的集合
host:指明请求服务器的主机名(域名)
accept-encoding:gzip指明浏览器所支持的文件压缩编码类型
accept_charset:浏览器支持的字符集
referer此次请求来自哪个网址
accept-language:可以接受的语言类型
cookie:若有该网站的未过期cookie则代入cookie数据
user-agent:浏览器的内核信息
accept:浏览器可以接受的数据类型
3, 空行
用来分隔请求头和请求数据,表名请求头到此结束
4, 请求数据(request-line)
请求的数据存放于此,比如注册账号时输入的个人信息。
使用telnet向服务器发送请求
在cmd中: 1,telnet 192.168.148.10 80
2,ctrl+] 进行数据的回显
3,输入请求行、请求头、空行
每次telnet发送请求只能单次,再次使用需要重新开启telnet
关于http相应协议包:
1, 响应行(状态行)
协议版本、状态码(404:请求资源不存在)、状态描述
常见状态码:
200 ok:请求成功
302 found:重定向,配合响应头location使用,服务器要求浏览器重新发起一次请求
404 not found:请求资源不存在
403 forbidden:没有权限访问该资源
500 server internet error:服务器内部错误,不能正常进行响应
独占一行
2, 响应头(也是一些协议的集合)
协议的集合
协议名:值
server:服务器信息
date:响应时间
last-modified:文件最后修改时间
content-length:响应主体的长度(字节)
content-type:相应内容的数据类型—text/html image/png
location:重定向,浏览器遇到这个选项便立刻跳转,不会解析后面的内容
refresh:重定向,浏览器遇到这个选项会准备跳转,时间到了便会跳转,继续向下解析
content-encodeing:文件编码格式
cache-control:缓存控制,no-cached—不要缓存
3, 空行
4, 响应主体(相应数据)
PHP模拟http响应
通过header()函数
header(“协议名:协议值”);
header(“Content-Type:text/html;charset=utf-8”); 设置文件编码
header(“location:新的url或uri”); 设置跳转,浏览器访问到该行时进行跳转(站内用uri)
header(“refresh:刷新等待的时间;url=url或uri”) 在等待过程中,后面代码将继续执行
验证码
PHP默认没有处理图片的功能,所以要加载GD库(图片处理扩展)
php.ini——extension=php_gd2.dll
画布: imagecreate(width,height); (256种颜色)
imagecreatetruecolor(width,height); (24位真彩)(一般使用)
颜色句柄: imagecolorallocate(img,red,green,blue);
img:画布资源
绘制文字: imagestring(img,size,x,y,sting,color);
size:文字大小
x、y:起始坐标(左上角为原点)
string:文字内容
color:颜色句柄
image<png|jpeg|gif>(画布资源[,保存路径])
输出时要使用header函数设置相应头信息,告诉浏览器这是个图片
输出前使用ob_clean()清理数据缓冲区
1, 填充背景
a) imagefill(img,x,y,color); 把坐标点颜色相同且连续的区域填色
img:画布资源
x、y:坐标点
color:颜色句柄
2, 添加干扰线
a) imageline(img,x1,y1,x2,y2,color);
3, 添加噪点(干扰点)
a) imagesetpixel(img,x,y,color);
代码实现:
1. img = imagecreatetruecolor(170,40);
2. backcolor = imagecolorallocate($img,mt_rand(180,255),mt_rand(0,255),mt_rand(180,255));
3. imaggefill($img,0,0,$backcolor);
4. $arr = array_merge(range(‘A’,’Z’),rang(‘a’,’z’),range(0,9));
5. shuffle($arr);
6. $rand_keys = arr_rand($arr,4);
7. $str = ‘’;
8. foreach($rand_key as $value){
$str .= $arr[$value];
}
9. $span = ceil(170/(4+1));
10. for($i=1;$i<=4;$i++){
$strcolor = imagecolorallocate($img,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
imagestring($img,5,$i*$span,10,$str[$i-1],$strcolor);
}
11. for($i=1;$i<=6;$i++){
$linecolor = imagecolorallocate($img,mt_rand(5,100),mt_rand(50,100),mt_rand(0,100));
imageline($img,mt_rand(0,169),mt_rand(0,39),mt_rand(0,169),mt_rand(0,39),$linecolor);
}
12. for($i=1;$i<=170*40*0.03;$i++){
$pxcolor = imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)
imagesetpixel($img,mt_rand(0,169),mt_rand(0,39),$pxcolor);
}
13. header(“Content-Type:image/png”);
ob_clean();
imagepng($img);
12-8-协议、请求、响应、画布(验证码制作)