一、时间、字符串与函数
1.时间和日期
PHP 时间戳
UNIX 时间戳(timestamp)是 PHP 中关于时间日期一个很重要的概念,它表示从 1970年1月1日 00:00:00 到当前时间的秒数之和。
PHP提供了内置函数 time() 来取得服务器当前时间的时间戳。
例子:
<?php
echo time();
?>
上面的例子运行后得到的是一串类似这样的数字:1279115455
我们可以通过 date() 等函数将它格式化为我们需要的时间日期格式。
有效的时间戳典型范围是格林威治时间 1901年12月13日 20:45:54 到 2038年1月19日 03:14:07(此范围符合 32 位有符号整数的最小值和最大值)。不过从 5.1.0 起,已经克服了年的范围只能是 1901 到 2038 之间的问题。
格式化时间
date() 函数用于格式化时间,返回一个字符串。
语法:
string date( string format [, int timestamp] )
参数 format 表示时间格式化的方式,可能的方式如下:
格式化方式说明: 格式化方式 | 说明 |
---|---|
Y | 4位数字年,y为2位数字,如99即1999年 |
m | 数字月份,前面有前导0,如01。n 为无前导0数字月份 |
F | 月份,完整的文本格式,例如 January 或者 March |
M | 三个字母缩写表示的月份,例如 Jan 或者 Mar |
d | 月份中的第几天,前面有前导0,如03。j 为无前导0的天数 |
w | 星期中的第几天,以数字表示,0表示星期天 |
z | 年份中的第几天,范围0-366 |
W | 年份中的第几周,如第32周 |
H | 24小时格式,有前导0,h为12小时格式 |
G | 24小时格式,无前导0,g为对应12小时格式 |
i | 分钟格式,有前导0 |
s | 秒格式,有前导0 |
A | 大写上下午,如AM,a为小写 |
可选参数 timestamp 表示时间戳,默认为 time() ,即当前时间戳。
我们可以通过 date() 函数提供的丰富格式化来显示需要的时间日期,如下面的例子:
date("Y-m-d",time()); //显示格式如 2008-12-01
date("Y.m.d",time()); //显示格式如 2008.12.01
date("M d Y",time()); //显示格式如 Dec 01 2008
date("Y-m-d H:i",time()); //显示格式如 2008-12-01 12:01
提示
如果您输出的时间和实际时间差8个小时(假设您采用的北京时区)的话,请检查php.ini文件,做如下设置:
date.timezone = PRC
2.字符串
字符串获取
substr(string,start,len):从字符串中获取其中的一部分
strstr(string,str):查找字符串在另一个字符串中第一次出现的位置,并返回从该位置到字符串结尾的所有字符
strrchr(string,str):查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符
字符串替换
str_replace(search,replace,string):使用一个字符串替换字符串中的另一些字符
字符串计算
strlen(string):取得字符串的长度
strpos(string,str,start) 函数用于定位字符串第一次出现的位置,返回整型。
strrpos():定位字符串最后一次出现的位置
案例
(1)获取 "我爱我.的.祖国.png" 的后缀名
$str = "我爱我.的.祖国.png";
$s = substr(strrchr($str,'.'),1);
echo $s;
$arr = explode(".",$str);
$ext = array_pop($arr);
echo "<br>$ext<br>";
(2) "我爱我的祖国,我的祖国是中国"替换为 "我爱我的国家,我的国家是中国"
$str = "我爱我的祖国,我的祖国是中国";
$str = str_replace("祖国","国家", $str);
echo "<br>$str<br>";
3.PHP 函数
PHP 的函数分为用户自定义函数和系统内置函数。内置函数可以直接使用,用户自定义函数需要使用关键字 function 来定义。
自定义函数
函数(function),可以看着是为实现某个功能的独立的程序语句集合。我们将某个功能写成一个函数后,就可以在需要的地方方便的使用它。合理的使用函数,可以让我们的PHP程序更加简洁易读,更加科学。
语法
function function_name(arg1,arg2,……)
{
函数功能代码
}
语法解读:
- 使用 function 关键字定义一个函数
- function 后面紧跟函数名,函数名字以字母或者下划线开始,命名应该提示其功能
- 函数名字后面是一对小括弧,里面是函数的参数,参数之间以“,”号分隔,但参数不是必须的
- 括弧()后面跟着“{}”,内部是该函数要实现的功能语句
下面是一个自定义函数的例子:
<?php
/* 定义函数开始 */
function print_string()
{
echo "你好!";
}
/* 定义函数结束 */
print_string(); //执行该函数,执行结果是输出“你好!”字符串
?>
任何有效的 PHP 代码都有可能出现在函数内部,甚至包括其它函数和类定义。
提示
函数名是非大小写敏感的,不过在调用函数的时候,通常使用其在定义时相同的形式。
函数的参数
参数的功能是传递信息到函数。
使用参数的例子:
<?php
function city_name($city)
{
echo "城市名称为:".$city;
}
city_name("shanghai"); //执行该函数,执行结果是输出“城市名称为:shanghai”字符串
?>
可以给函数的参数指定默认值,以便在没有指定参数值时,采用参数默认值。
<?php
function city_name($city = "beijing")
{
echo "城市名称为:".$city;
}
$name = "shanghai";
city_name(); //执行结果是输出“城市名称为:beijing”
city_name($name); //执行结果是输出“城市名称为:shanghai”
?>
从例子可以看出,传入参数的变量名($name)和定义函数的参数变量名($city)无关。
接受多个参数:
<?php
function city_name($city, $zipcode)
{
echo "城市名称为:".$city."<br />";
echo "邮政编码:".$zipcode;
}
?>
函数的返回值
函数在处理完内部逻辑后,我们常常需要根据处理结果来决定下一步的操作逻辑,这时候就需要得到函数的处理结果。使用return()来返回函数处理结果。
函数返回值的例子:
<?php
function add($x)
{
return $x+1;
}
echo add(2); //输出函数的返回值,结果是输出 3
?>
函数返回值并不是指返回一个数值,可以返回包括字符串、数组、对象在内的任何类型。
比较下面两个例子的区别:
<?php
$x = 10;
function multiply($x){
$x = $x * 10;
return $x;
}
multiply($x);
echo $x; //输出 10
?>
<?php
$x = 10;
function multiply($x){
$x = $x * 10;
return $x;
}
$x = multiply($x);
echo $x; //输出 100
?>
内置函数
PHP 内置了大量的函数,这使得 PHP 变得非常强大。这些函数几乎包括了我们需要处理的方方面面。
PHP 内置函数常用的有“字符串函数”、“数组函数”、“数据库函数”、“时间/日期函数”、“文件函数”、“图像函数”、“正则函数”、“URL函数”等。
二、php交互
1.isset()
PHP isset() 用于检测一个或多个变量是否设置,如果被检测的变量存在则返回 TRUE,否则返回 FALSE。
语法:
bool isset( mixed var [, mixed var [, ...]] )
如果检测多个变量时,只要其中一个变量存在,则检测结果就会返回 TRUE 。
例子:
<?php
$var = 1;
if(isset($var)){
echo '变量 $var 已经被设置';
} else {
echo '变量 $var 还未被设置';
}
?>
运行该例子输出:
变量 $var 已经被设置
注意
- isset() 只能用于检测变量,传递任何其它参数都将造成解析错误。
- isset() 是一个语言结构而非函数,因此它无法被变量函数调用。
下述情况,isset() 返回 TRUE :
$var = "";
$var = array();
$var = 0;
$var = false;
2.PHP JSON
本章节我们将为大家介绍如何使用 PHP 语言来编码和解码 JSON 对象。
JSON 函数
函数 | 描述 |
---|---|
json_encode | 对变量进行 JSON 编码 |
json_decode | 对 JSON 格式的字符串进行解码,转换为 PHP 变量 |
json_encode
PHP json_encode() 用于对变量进行 JSON 编码,该函数如果执行成功返回 JSON 数据,否则返回 FALSE 。
语法
string json_encode ( $value )
实例
以下实例演示了如何将 PHP 数组转换为 JSON 格式数据:
<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
?>
以上代码执行结果为:
{"a":1,"b":2,"c":3,"d":4,"e":5}
json_decode
PHP json_decode() 函数用于对 JSON 格式的字符串进行解码,并转换为 PHP 变量。
语法
mixed json_decode ($json_string [,$assoc = false [, $depth = 512 [, $options = 0 ]]])
参数
-
json_string : 待解码的 JSON 字符串,必须是 UTF-8 编码数据
-
assoc : 当该参数为 TRUE 时,将返回数组,FALSE 时返回对象。
-
depth : 整数类型的参数,它指定递归深度
-
options : 二进制掩码,目前只支持 JSON_BIGINT_AS_STRING 。
实例
以下实例演示了如何解码 JSON 数据:
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>
以上代码执行结果为:
object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
3.PHP $_GET
$_GET 变量用于接收表单 method="get" 方式发送的表单信息。
PHP $_GET
$_GET 变量的数据结构同 $_POST 类似,也是一个关联数组,键名为表单元素的 name,用于收集以 HTTP GET 方式请求的数据。
表单 form.html:
<html>
<body>
<form name="commentform" method="get" action="comment.php">
<p>
称呼: <input type="text" name="nickname" />
</p>
<input type="submit" value="提 交" />
</form>
</body>
</html>
将前面的例子表单改为 GET 方式,输入称呼后,在浏览器地址栏,看起来类似如下(IE 浏览器下中文可能会经 encode 编码):
http://www.5idev.com/html/comment.php?nickname=%D0%A1%C3%F7
取得 GET 表单数据:
<?php
echo '您的称呼是:',$_GET["nickname"]; //输出:您的称呼是:小明
?>
提示
- GET 方式会把表单数据暴露在浏览器地址栏里,因此不宜发送敏感数据(如密码等),敏感信息发送请使用 POST 方式。
- GET 方式对发送的信息量有一定限制,如果发送较大的信息,请使用POST 方式。
- GET 方式访问的页面可以加入收藏夹而在以后可以直接访问,而 POST 方式访问的页面则不能。
HTTP GET
HTTP GET 方式不仅是用于表单数据发送,它是指更广泛的以实体的方式得到由请求 URL (浏览器地址)所指定资源的信息。具体参见《XHTML Get与Post》。
利用 HTTP GET 方式还可以向网页传递数据信息,如下面这个地址:
http://www.520mg.com/html/article.php?id=10
在该例子中,就通过地址 GET 方式向 article.php 传递了一个 id=10 的信息。在 article.php 中可以通过 $_GET["id"] 取得数据,其实际作用可能是从数据库中读取 id 为 10 的这篇文章,多个数据以 & 符号来连接:
http://www.520mg.com/html/article.php?type=2&id=10
article.php 中取得 GET 数据:
<?php
echo $_GET["type"]; //输出 2
echo $_GET["id "]; //输出 10
?>
PHP $_REQUEST
在 PHP 中还预定义了 $_REQUEST 变量,它包含了 $_POST 、$_GET 、和 $_COOKIE 。其访问方式同 $_POST 等:
<?php
echo $_REQUEST["nickname"] //输出用户输入的称呼
echo $_REQUEST["id "]; //输出 10
?>
案例
获取的GET参数
q1 默认0 q2默认是q1+100
产生随机一个 q1 到q2的整数
isset($_GET["q1"])?$q1=$_GET["q1"]:$q1=0;
isset($_GET["q2"])?$q2=$_GET["q2"]:$q2=$q1+100;
$num = rand($q1,$q2);
echo "<br/>$num<br/>";
4.PHP $_POST
$_POST 变量用于接收表单 method="post" 方式发送的表单信息。
PHP $_POST
$_POST 变量用于获取由 HTTP POST 方式发送的表单数据。其数据结构是一个关联数组,键名为表单元素的 name ,值为对应的表单取值。
表单 form.html:
<html>
<body>
<form name="commentform" method="post" action="comment.php">
<p>
称呼: <input type="text" name="nickname" />
</p>
<input type="submit" value="提 交" />
</form>
</body>
</html>
在 comment.php 中,打印出 $_POST 信息:
<?php
print_r($_POST);
?>
输出如下:
Array
(
=> 小明
)
访问 $_POST 变量
可以像访问普通数组一样方便的访问 $_POST 变量:
<?php
echo '您的称呼是:',$_POST["nickname"];
?>
POST 方法发送的数据对任何人都是不可视的,且对发送信息的量几乎无限制,对于敏感数据(如密码)或者大容量的数据信息提交,通常采用的是 POST 方式。
5.PHP 表单
PHP 预定义了 $_POST 和 $_GET 变量来接收表单信息。
HTML 表单
表单例子,form.html:
<html>
<body>
<form name="commentform" method="post" action="comment.php">
<p>
称呼: <input type="text" name="nickname" />
</p>
<input type="submit" value="提 交" />
</form>
</body>
</html>
上面的例子中,表单信息包含了一个(称呼)输入框和 提交 按钮。当点击 提交 按钮时,网页就会把表单信息(用户输入的称呼)以 POST 方式提交给 comment.php 文件处理。
comment.php 文件:
<html>
<body>
<p>您的称呼是:<?php echo $_POST["nickname"]; ?></p>
</body>
</html>
当我们在 form.html 输入框里输出称呼:小明,点击 提交 按钮,comment.php 页面显示:
您的称呼是:小明
上面就是一个简单的表单处理过程,PHP 预定义了 $_POST 和 $_GET 变量来接收表单信息
HTML 表单验证
表单用于收集客户的输入信息时,不要想当然的以为客户会按照设想中的输入符合规定的内容。任何时刻都要对客户的输入做严格检查。
客户端验证
客户端表单验证一般是基于 Javascript 脚本的验证方式,这种验证方式能有效减少服务器的负担,也能即时提醒客户输入的错误之处。
服务器端验证
在某些情况下,除了进行客户端的验证外,可能还需要进行服务器端的验证(如访问数据库)。这时候需要在 PHP 程序里做好逻辑上的验证。
6.PHP Session
PHP Session 概述
您在计算机上操作某个应用程序时,您打开它,做些更改,然后关闭它。这很像一次对话(Session)。计算机知道您是谁。它清楚您在何时打开和关闭应用程序。然而,在因特网上问题出现了:由于 HTTP 地址无法保持状态,Web 服务器并不知道您是谁以及您做了什么。
PHP session 解决了这个问题,它通过在服务器上存储用户信息以便随后使用(比如用户名称、购买商品等)。然而,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久存储信息,可以把数据存储在数据库中。
Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导
session 是一种客户与网站(服务器)更为安全的对话方式。一旦开启了 session 会话,便可以在网站的任何页面使用(保持)这个会话,从而让访问者与网站之间建立了一种“对话”机制。
session 会话会为每一个开启了 session 会话的访问者建立一个唯一的会话 ID ,用于识别用户。该会话 ID 可能存储于用户电脑的 cookie 内,也可能通过 URL 来传递。而对应的具体 session 值会存储于服务器端,这也是与 cookie 的主要区别,并且安全性相对较高。
创建 session
要创建 session ,必须先使用 session_start() 函数开启一个 session 会话,系统会分配一个会话 ID:
<?php
session_start();
?>
存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量:
语法:
$_SESSION['views']=1;
读取 session
PHP 内置的 $_SESSION 变量可以很方便的访问设置的 session 变量。
例子:
<?php
// 检索 session 数据
echo "浏览量:". $_SESSION['views'];
?>
销毁 session
如果您希望删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。
unset() 函数用于释放指定的 session 变量:
例子:
<?php
session_start();
if(isset($_SESSION['views']))
{
unset($_SESSION['views']);
}
?>
另一种方式
您也可以通过调用 session_destroy() 函数彻底销毁 session:
<?php
session_destroy();
?>
案例
当前用户浏览页面的次数
!isset($_SESSION["view"])?$_SESSION["view"]=1:$_SESSION["view"]=$_SESSION["view"]+1;
echo "页面的浏览次数为",$_SESSION["view"],"<br>";
7.PHP 文件上传
文件上传概述
文件上传功能是网络生活中经常使用的一个功能。使用 PHP 可以很方便的实现文件上传,其具体流程如下:
表单选择文件 -> 检查文件大小及类型 -> 生成临时文件 -> 移动临时文件至文件存储目录 -> 记录文件信息以便于管理。
在文件上传功能中,需要考虑以下几个问题:
- 限定上传文件的大小
- 限定上传文件的类型
- 只允许可信任的用户上传文件,防止远程提交
- 服务器端文件存储目录
- 对文件上传后的管理
HTML 表单
在文件上传表单中,需要将表单的 ENCTYPE 属性设置为 multipart/form-data :
<form enctype="multipart/form-data" action="upload.php" method="post">
<label for="file">请选择上传的文件</label>
<input type="file" name="file" size="40" />
<br />
<input type="submit" name="submit" value="确定" />
</form>
在 <input> 标签里, type="file" 表示应该把输入作为文件来处理,这时候会出现选择文件的浏览按钮,点击该按钮即可选择本地电脑里的文件。
PHP 文件上传处理
PHP 提供了内置变量 $_FILES 来处理上传的文件。
$_FILES 变量说明(设定表单 name 属性为 file ): $_FILES 变量 | 说明 |
---|---|
$_FILES["file"]["name"] | 客户端提交文件的原名称 |
$_FILES["file"]["type"] | 浏览器提供的文件的 MIME 类型,如 gif 图片为 image/gif 。不过此类型在 PHP端并不检查,因此不要想当然认为有这个值 |
$_FILES["file"]["size"] | 已上传文件的大小,单位为字节 |
$_FILES["file"]["tmp_name"] | 文件被上传后在服务端储存的临时文件名 |
$_FILES["file"]["error"] | 和该文件上传相关的错误代码,为0则表示上传成功 |
当点击“确定”按钮提交表单至 upload.php 后,可以利用 $_FILES 变量来处理提交的文件。
文件处理例子:
<?php
//文件存储路径
$file_path="upload/";
//664权限为文件属主和属组用户可读和写,其他用户只读。
if(is_dir($file_path)!=TRUE) mkdir($file_path,0664) ;
//定义允许上传的文件扩展名
$ext_arr = array("gif", "jpg", "jpeg", "png", "bmp", "txt", "zip", "rar");
if (empty($_FILES) === false) {
//判断检查
if($photo_up_size > 2097152){
exit("对不起,您上传的照片超过了2M。");
}
if($_FILES["file"]["error"] > 0){
exit("文件上传发生错误:".$_FILES["file"]["error"]);
}
//获得文件扩展名
$temp_arr = explode(".", $_FILES["file"]["name"]);
$file_ext = array_pop($temp_arr);
$file_ext = trim($file_ext);
$file_ext = strtolower($file_ext);
//检查扩展名
if (in_array($file_ext, $ext_arr) === false) {
exit("上传文件扩展名是不允许的扩展名。");
}
//以时间戳重命名文件
$new_name = time().".".$file_ext;
//将文件移动到存储目录下
move_uploaded_file($_FILES["file"]["tmp_name"],"$file_path" . $new_name);
//向数据表写入文件存储信息以便管理
//*********** 代码略 ***********//
echo "文件上传成功!";
exit;
} else {
echo "无正确的文件上传";
}
?>
例子说明:
- 该例子只是简单演示了文件上传的流程,请勿直接用于实际项目
- 该例子中缺少对用户权限的检查
- 如果上传后的文件没有做重命名,则需要做文件重名时的逻辑处理
- 写入数据表文件信息由于涉及到数据库操作,暂略。写入数据表的信息应该包括文件上传的时间,上传的用户ID以及存储的位置,以便清理上传无效的文件以及文件过期管理等
- 无提交校验,要防止远程提交,可以在表单生成页面产生一个会话ID,然后在upload.php页面做校验以防止远程提交
案例分解
最简单的文件上传
知识点:
- move_uploaded_file(old,new)移动上传的文件
- ($_FILES["file"]["tmp_name"]临时文件名
- ,$_FILES["file"]["name"] 文件名
up.html
<form method="POST" enctype="multipart/form-data" action="file.php">
<input type="file" name="file">
<input type="submit" type="提交">
</form>
file.php
<?php
move_uploaded_file($_FILES["file"]["tmp_name"],$_FILES["file"]["name"]);
echo "<h1>上传成功</h1>";
echo '<img src="/homework/day2/',$_FILES["file"]["name"],'">';
?>
判断与路径
- empty() 判断是否为空
- mk_dir() 创建文件夹
- is_dir() 判断是否为文件夹地址
if(!empty($_FILES["file"]["tmp_name"])){
$path = "upload/";
!is_dir($path)?mkdir($path):'';
move_uploaded_file($_FILES["file"]["tmp_name"],$path.$_FILES["file"]["name"]);
echo "<h1>上传成功</h1>";
}else{
exit ("没有任何文件");
}
判断与大小
- $_FILES["file"]["size"] 文件大小字节
<?php
if(!empty($_FILES["file"]["tmp_name"])){
if($_FILES["file"]["size"]>1024*1024*2){
exit("文件大小超过2M!");
}
$path = "upload/";
!is_dir($path)?mkdir($path):'';
move_uploaded_file($_FILES["file"]["tmp_name"],$path.$_FILES["file"]["name"]);
echo "<h1>上传成功</h1>";
}else{
exit ("没有任何文件");
}
?>
文件类型检测
- explode(分隔符,字符串) 字符串转换为数组
- array_pop(数组) 删除并返回数组最后一个元素
- in_array(值,数组) 检测值是否在数组里面
<?php
if(!empty($_FILES["file"]["tmp_name"])){
if($_FILES["file"]["size"]>1024*1024*2){
exit("文件大小超过2M!");
}
$typeArr = array("jpg", "png", "gif","jpeg","svg","webp");//允许上传文件格式
$extArr = explode(".",$_FILES["file"]["name"]);
$ext=array_pop($extArr);
if(!in_array($ext,$typeArr)){
exit("文件文件非法");
}
$path = "upload/";
!is_dir($path)?mkdir($path):'';
move_uploaded_file($_FILES["file"]["tmp_name"],$path.$_FILES["file"]["name"]);
echo "<h1>上传成功</h1>";
}else{
exit ("没有任何文件");
}
?>
8.验证码
1.验证码为全自动区分计算机和人类的图灵测试的缩写。是一种区分用户是计算机和人的公共全自动程序。
2.验证码主要应用场景:登录、注册确定前,发布、回复信息前,疑似机器请求时,做人/机器校验。
3.实现步骤:
(1)生成底图;依赖php图片处理库GD
(2)生成验证内容;产生随机数,使用php函数rand()
(3)生成验证码图片;
(4)校验验证内容 将用户的的输入的验证码
与存入session的 验证码
比对
创建图片
$image = imagecreatetruecolor(宽,高);
创建图片颜色
$bg = imagecolorallocate(图片,R,G,B);
// RGB是0-255的取值
$bg = imagecolorallocate($image,255,255,255);
// 创建白色的背景
图片区域填充
imagefill(图片,x,y,颜色)
imagefill($image,0,0,$bgcolor);
内容生成
$data='abcdefghijkmnpqrstuvwxy3456789';
$f=substr($data,rand(0,strlen($data)),1);
从data中随机取出一个字符串
图片上绘制字符
imagestring(图片,字体大小,x,y,字符,字符颜色)
session存储
$_SESSION["code"] = $code;
输出图片*
header("content-type:image/png");
imagepng($image);
完整代码
<?php
session_start();
// 开启session
$image = imagecreatetruecolor(100,30);
$bgcolor = imagecolorallocate($image,255,255,255);
imagefill($image,0,0,$bgcolor);
$code="";
for($i=0;$i<4;$i++){
// $f = rand(0,9);
$data='abcdefghijkmnpqrstuvwxy3456789';
$f=substr($data,rand(0,strlen($data)),1);
$code.=$f;
$x = $i*25+rand(5,10);
$y = rand(5,10);
$fcolor = imagecolorallocate($image,0,0,0);
imagestring($image,20,$x,$y,$f,$fcolor);
}
$_SESSION["code"] = $code;
header("content-type:image/png");
imagepng($image);
?>
添加干扰线与点后的完整代码
<?php
//必须至于顶部,多服务器端记录验证码信息,便于用户输入后做校验
session_start();
//默认返回的是黑色的照片
$image = imagecreatetruecolor(100, 30);
//将背景设置为白色的
$bgcolor = imagecolorallocate($image, 255, 255, 255);
//将白色铺满地图
imagefill($image, 0, 0, $bgcolor);
//空字符串,每循环一次,追加到字符串后面
$captch_code='';
//验证码为随机四个数字
for ($i=0; $i < 4; $i++) {
$fontsize=6;
$fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
//产生随机数字0-9
$fontcontent = rand(0,9);
$captch_code.= $fontcontent;
//数字的位置,0,0是左上角。不能重合显示不完全
$x=($i*100/4)+rand(5,10);
$y=rand(5,10);
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
$_SESSION['authcode'] = $captch_code;
//为验证码增加干扰元素,控制好颜色,
//点
for ($i=0; $i < 200; $i++) {
$pointcolor = imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));
imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor);
}
//为验证码增加干扰元素
//线
for ($i=0; $i < 3; $i++) {
$linecolor = imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));
imageline($image, rand(1,99), rand(1,29),rand(1,99), rand(1,29) ,$linecolor);
}
header('content-type:image/png');
imagepng($image);
//销毁
imagedestroy($image);
?>