betway官网

betway官网无聊之星期五晚。php笔记(进阶3)

九月 24th, 2018  |  betway体育网站

  hi

cookie

Cookie是储存于客户端浏览器被的数量,通过Cookie来跟以及存储用户数据。一般景象下,Cookie通过HTTP
headers从服务器返回到客户端

php通过setcookie函数进行Cookie的装置,任何从浏览器发回之Cookie,php都见面拿他存储于$_COOKIE的全局变量之中,因此可以通过$_COOKIE[‘key’]的形式来读取某个Cookie的值

Cookie具备有效期,当有效期截止以后,Cookie会自定的起客户端删除

setcookie函数有7只可选取参数常用的吗眼前5个

name(Cookie名) 可以透过$_COOKIE[‘name’] 进行访问

value(Cookie值)

expire(过期时间) Unix时间戳格式,默认为0,表示浏览器关闭就是失效

path(有效途径)如果路径也’/’,则通网站都灵验

domain(有效域)
默认域名都有效,如果安了’www.imooc.com’,则单纯在www子域有效

setcookie(“TestCookie”,$value,time()+3600,”/path/”,”imooc.com”);

//删除cookie
将cookie的过时设置及眼前时空前,则cookie会自动失效,也就算上了抹cookie的目的

setcookie(‘test’,”,time()-1);

setcookie(‘test’, time(), 0, ‘/path’);

面的安会如test在/path以及子路径/path/doc下还使得,但是于彻底目录下就算读取不交test的cookie值

今凡是周五,的夜,因为回寝室也似没什么事情做,不如在教研室水同道。

session和cookie的异同

cookie将数据存储到客户端,建立从用户以及服务器之间的联络,通常可以解决广大题目。但是cookie仍然有部分受制

①cookie相对不是安全的,容易被盗用导致cookie欺骗

②但个cookie的值做深不得不存储4k

③老是要都如开展网络传输,占用带富

session是拿用户的对话数据存储于服务器,没有大小限制,通过一个session_id进行用户识别,php默认情况下session
id是透过cookie来保存的,因此自某种程度上吧,session依赖让cookie,但眼看不是绝对的,session
id也得经过参数来贯彻,只要能以session
id传递及服务端进行辨认的编制还可以动用session.

<?php

//开始用session

session_start();

//设置一个session

$_SESSION[‘test’] = time();

// 显示当前底session_id

echo “session_id:”.session_id();

读取session值

echo $_SESSION[‘test’];

// 销毁一个session

unset($_SESSION[‘test’]);

var_dump($_SESSION);

session会自动的对要设置的值进行encode和decode,因此session可以支持任意数据类型,包括数据与目标等

session_start();

$_SESSION[‘arry’] = array(‘name’ => ‘jobs’);

$_SESSION[‘obj’] = new Car();

默认情况下,session是盖文件形式储存于服务器上的,因此当一个页面打开了session之后,会独占此session文件,这样见面促成当前用户的任何并发访问无法尽要待。可以下缓存或者数据库的样式储存来缓解者问题

1、PHP

除去与销毁session

抹某个session值可以应用php的unset函数,删除后就是会由全局变量$_SESSION中错过除,无法访问

假若一旦抹所有的session,可以行使session_destory函数销毁当前session,session_destroy会删除所有数据,但是session_id仍然存在

session_destroy并无会见即刻的绝迹全局变量$_SESSION中的价,只有当下次走访的早晚,$_SESSION才为空,因此若需要马上销毁$_SESSION,可以利用unset函数

万一欲同时灭绝cookie中的session_id,通常以用户退的时候可能会见就此到,则还用出示的调用setcookie方法去session_id的cookie值‘

—Cookie—

采用session来存储用户的报到信息

用户以签到成功以后,通常可以用用户之音讯存储于session中,一般的会见独自的将片生死攸关之字段单独存储,然后有的用户信息独立存储

$_SESSION[‘uid’] = $userinfo[‘uid’];

$_SESSION[‘userinfo’] = $userinfo;

报到信息既可储存在session中,也得储存于cookie中,他们中间的别在于session可以好之存取多种数码列,而cookie只支持字符串类型,同时对于一些安全性比较高之多少,coolie需要展开格式化与加密存储,而session存储于服务端则安全性比较高

–设置Cookie:

文件操作

PHP设置Cookie最常用的道就是是利用setcookie函数,setcookie具有7个可选取参数,我们常因此到之也罢眼前5只:

读取文件内容

file_get_contents
 读取文件之函数,可以以全部文件全部读取到一个字符串中

$content = file_get_contents(‘./test.txt’);

$content = file_get_contents(‘./test.txt,null,null,100,500’);
 //通过参数控制读取内容的始接触与长

fgets 可以自文本指针中读取一行
 使用fopen打开文件,最好以fclose关闭文件指针,以避免文件句柄被挤占

freads可以读取指定长度的字符串

$fp = fopen(‘./text.txt’,’rb’);

while(!feof($fp)){

ehco fgets($fp);  //读取一行

}

fclose($fp);

name( Cookie名)可以透过$_COOKIE[‘name’] 进行访问
value(Cookie的值)
expire(过期时光)Unix时间戳格式,默认为0,表示浏览器关闭就是失效
path(有效途径)如果路径设置为’/’,则遍网站都有效
domain(有效域)默认整个域名都有效,如果设置了’www.imooc.com’,则仅仅以www子域中行之有效

判断文件是否留存

is_file与file_exists  判断文件是的函数

file_exists不仅可判明文件是否有,同时为堪判目录是否是。

is_readable与is_writeable 判断文件是否只是读与可写

$filename = ‘./test.txt’;

if(is_writeable($filename)){file_put_contents($filename,’test’);}

if(is_readable($filename)){echo file_get_contents($filename);}

PHP中还有一个安Cookie的函数setrawcookie,setrawcookie跟setcookie基本等同,唯一的不比便是value值不会见自行的进行urlencode,因此在用之上要手动的进展urlencode。

形容副内容到文件

file_put_contents  和fwrite

$filename = ‘./test.txt’;

$data = ‘test’;

file_put_contents($filename,$data);

==========================================

$fp = fopen(‘./test.txt’,’w’);

fwrite($fp,’hello’);

fwrite($fp,’world’);

fclose($fp);

坐Cookie是通过HTTP标头进行安装的,所以也可一直使用header方法进行安装。

得文件之习性

fileowner:获的文件的持有者

filectime:获取文件之创造时间

filemtime:获取文件的改时

fileatime:访问文件的访问时间

filesize:取得文件之尺寸,文件大小以字节数表示

unlink:文件去

rmdir:文件夹去,如果非也空或没有权力则会提醒失败

若果文件夹着有文件,可以先循环删除目录中之具有文件,然后再次删除该目录,循环去可以采取glob函数遍历所有文件

foreach(glob(“*”) as $filename){

       unlink($filename);

}

<?php
$value = time();
//在这边设置一个名也test的Cookie
setcookie(“test”,$value);
if (isset($_COOKIE[‘test’])) {
echo ‘success’;
}

–删除cookie

透过前的章节,我们询问了安装cookie的函数,但是咱却发现php中并未删Cookie的函数,在PHP中剔除cookie也是动setcookie函数来落实。

setcookie(‘test’, ”, time()-1);

好观看将cookie的过时设置到当前光阴之前,则该cookie会自动失效,也就算上了删cookie的目的。之所以如此设计是以cookie是经HTTP的标头来传递的,客户端根据服务端返回的Set-Cookie段来拓展cookie的安装,如果剔除cookie需要使用新的Del-Cookie来兑现,则HTTP头就会见变得复杂,实际上只有透过Set-Cookie就好简单明了的落实Cookie的装、更新和删除。

摸底原理以后,我们吧足以直接通过header来删除cookie。

测试删除成功后,输出为

array(0) {
}

–cookie的有效路径

cookie中之门路用来决定装置的cookie在谁路径下中,默认为’/’,在装有路线下还出,当设定了任何路线下,则只以设定的途径和子路径下有效,例如:

setcookie(‘test’, time(), 0, ‘/path’);

面的安会使test在/path以及子路径/path/abc下都使得,但是以彻底目录下就算读取不顶test的cookie值。

诚如情形下,大多是用具有途径的,只有以极少数有异需要的时光,会设置路径,这种状况下单当指定的门径中才会传递cookie值,可节约多少的传,增强安全性及加强性能

当我们安了中途径的时刻,不以当下路线的早晚虽然看不到当前cookie。

<?php
//补充路径参数,实现中路径的安
setcookie(‘test’, ‘1’, 0,’/path’);
var_dump($_COOKIE[‘test’]);

输出为NULL

–session(会话)和cookie

cookie将数据存储于客户端,建立由用户与服务器之间的沟通,通常可以缓解过剩题材,但是cookie仍然有着局部受制:

cookie相对不是极端安全,容易受盗用导致cookie欺骗
单个cookie的价值最可怜不得不存储4k
老是要都如拓展网络传输,占用带富

session是将用户之对话数据存储在服务端,没有轻重限制,通过一个session_id进行用户识别,PHP默认情况下session
id是经cookie来保存之,因此自某种程度上的话,seesion依赖让cookie。但当时不是绝的,session
id也得以通过参数来实现,只要会用session
id传递到服务端进行甄别的编制还好下session。

–使用session

以PHP中采用session非常简单,先实行session_start方法被session,然后经过全局变量$_SESSION进行session的读写。

session_start(); $_SESSION[‘test’] = time(); var_dump($_SESSION);

session会自动的对要设置的价值进行encode与decode,因此session可以支撑任意数据类型,包括数据与对象等。

session_start(); $_SESSION[‘ary’] = array(‘name’ => ‘jobs’);
$_SESSION[‘obj’] = new stdClass(); var_dump($_SESSION);

默认情况下,session是盖文件形式储存于服务器上之,因此当一个页面打开了session之后,会独占此session文件,这样会招当前用户的旁并发访问无法尽要待。可以采用缓存或者数据库的样式储存来化解者问题,这个我们会于有的高档的科目被讲到。

注意:session_start是个函数

–删除与销毁session

删去某个session值可以下PHP的unset函数,删除后便会于全局变量$_SESSION中失去除,无法访问。

session_start(); $_SESSION[‘name’] = ‘jobs’;
unset($_SESSION[‘name’]); echo $_SESSION[‘name’]; //提示name不存在

假设要是删减所有的session,可以利用session_destroy函数销毁当前session,session_destroy会删除所有数据,但是session_id仍然存在。

session_start(); $_SESSION[‘name’] = ‘jobs’; $_SESSION[‘time’] =
time(); session_destroy();

值得注意的是,session_destroy并无见面立即的绝迹全局变量$_SESSION中的值,只有当下次再度拜访的上,$_SESSION才为空,因此只要急需这销毁$_SESSION,可以使用unset函数。

session_start(); $_SESSION[‘name’] = ‘jobs’; $_SESSION[‘time’] =
time(); unset($_SESSION); session_destroy(); var_dump($_SESSION);
//此时曾经也空

倘欲以灭绝cookie中之session_id,通常在用户退的时光或会见用到,则还欲显式的调用setcookie方法去session_id的cookie值。

–以session来存储用户的登录信息

session可以为此来囤积多种类型的多寡,因此所有众多底用,常用来存储用户的报到信息,购物车数据,或者有些现用的暂存数据等。

用户在报到成功之后,通常可以用用户之音存储于session中,一般的会面独自的将有些要之字段单独存储,然后有的用户信息独立存储。

$_SESSION['uid'] = $userinfo['uid'];
$_SESSION['userinfo'] = $userinfo;

相似的话,登录信息既好储存于sessioin中,也得以储存在cookie中,他们之间的差距在session可以一本万利之存取多种数量类,而cookie只支持字符串类型,同时于一些安全性比较强的数目,cookie需要进行格式化与加密存储,而session存储于服务端则安全性比较高。

 

<?php
session_start();
//假设用户登录成功获了以下用户数量
$userinfo = array(
‘uid’ => 10000,
‘name’ => ‘spark’,
’email’ => ‘spark@imooc.com’,
‘sex’ => ‘man’,
‘age’ => ’18’
);
header(“content-type:text/html; charset=utf-8”);

/* 将用户信息保存到session中 */
$_SESSION[‘uid’] = $userinfo[‘uid’];
$_SESSION[‘name’] = $userinfo[‘name’];
$_SESSION[‘userinfo’] = $userinfo;
echo “welcome “.$_SESSION[‘name’] . ‘<br>’;

//* 将用户数据保存至cookie中的一个简短方法 */
$secureKey = ‘imooc’; //加密密钥
$str = serialize($userinfo); //将用户信息序列化
echo “用户信息加密前:”.$str;
$str = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $secureKey,
$str, MCRYPT_MODE_ECB));
echo “用户信息加密后:”.$str;
//将加密后的用户数据存储到cookie中
setcookie(‘userinfo’, $str);

//当用采用时展开解密
$str = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $secureKey,
base64_decode($str), MCRYPT_MODE_ECB);
$uinfo = unserialize($str);
echo “解密后的用户信息:<br>”;
var_dump($uinfo);

–总结

setcookie(),setsession(),unset()

 

—-文件系统—-

–读取文件内容

PHP具有丰富的公文操作函数,最简易的读取文件的函数为file_get_contents,可以拿尽文件全部读取到一个字符串中。

$content = file_get_contents(‘./test.txt’);

file_get_contents也足以经参数控制读取内容之开端接触及长。

$content = file_get_contents(‘./test.txt’, null, null, 100, 500);

PHP也提供类似于C语言操作文件之法子,使用fopen,fgets,fread等措施,fgets可以打文本指针中读取一行,freads可以读取指定长度的字符串。

$fp = fopen(‘./text.txt’, ‘rb’); while(!feof($fp)) { echo fgets($fp);
//读取一行 } fclose($fp);

 

$fp = fopen(‘./text.txt’, ‘rb’); $contents = ”; while(!feof($fp)) {
$contents .= fread($fp, 4096); //一不成读取4096独字符 } fclose($fp);

利用fopen打开的文件,最好用fclose关闭文件指针,以避免文件句柄被挤占。

–判断文件是否存在、可读、可写

一般情况下在针对文本进行操作的时段要事先判断文件是否存在,PHP中不时因此来判定文件是的函数有个别独is_file与file_exists.

$filename = ‘./test.txt’; if (file_exists($filename)) { echo
file_get_contents($filename); }

一经只是一口咬定文件是,使用file_exists就行,file_exists不仅可断定文件是否在,同时为足以判定目录是否有,从函数叫作好看来,is_file是合适的论断给定的门径是否是一个文件。

$filename = ‘./test.txt’; if (is_file($filename)) { echo
file_get_contents($filename); }

进而精确的得用is_readable与is_writeable以文件是否是的根底及,判断文件是否只是读与可写。

$filename = ‘./test.txt’; if (is_writeable($filename)) {
file_put_contents($filename, ‘test’); } if (is_readable($filename)) {
echo file_get_contents($filename); }
–写副内容

及读取文件对应,PHP写文件为装有两栽艺术,最简便易行的法是使用file_put_contents。

$filename = ‘./test.txt’; $data = ‘test’; file_put_contents($filename,
$data);

齐例被,$data参数可以是一个一维数组,当$data是屡屡组的时刻,会活动的将数组连接起来,相当给$data=implode('', $data);

一致的,PHP也支撑类似C语言风格的操作办法,采用fwrite进行文件写入。

$fp = fopen(‘./test.txt’, ‘w’);

fwrite($fp, ‘hello’);

fwrite($fp, ‘world’); fclose($fp);

–获得文件的修改时间

文本来成百上千元属性,包括:文件的持有者、创建时间、修改时、最后之走访时间等于。

fileowner:获得文件的所有者
filectime:获取文件的创建时间
filemtime:获取文件的修改时间
fileatime:获取文件的访问时间

里面最常用的凡文件之改动时,通过文件之改动时间,可以判定文件的时效性,经常用当静态文件要缓存数据的创新。

$mtime = filemtime($filename);
echo '修改时间:'.date('Y-m-d H:i:s', filemtime($filename));

<?php
$filename = ‘/data/webroot/usercode/code/resource/test.txt’;
echo ‘所有者:’.fileowner($filename).'<br>’;
echo ‘创建时间:’.filectime($filename).'<br>’;
echo ‘修改时:’.filemtime($filename).'<br>’;
echo ‘最后访问时:’.fileatime($filename).'<br>’;

//给$mtime赋值为文件之改时
$mtime = filemtime($filename);
//通过测算时差 来判定文件内容是否可行
if (time() – $mtime > 3600) {
echo ‘<br>缓存已过期’;
} else {
echo file_get_contents($filename);
}

–获得文件的轻重缓急

经过filesize函数可以收获文件的分寸,文件大小是坐字节数表示的。

$filename = '/data/webroot/usercode/code/resource/test.txt';
$size = filesize($filename);

一经要更换文件大小的单位,可以友善定义函数来贯彻。

function getsize($size, $format = 'kb') {
    $p = 0;
    if ($format == 'kb') {
        $p = 1;
    } elseif ($format == 'mb') {
        $p = 2;
    } elseif ($format == 'gb') {
        $p = 3;
    }
    $size /= pow(1024, $p);
    return number_format($size, 3);
}

$filename = '/data/webroot/usercode/code/resource/test.txt';
$size = filesize($filename);

$size = getsize($size, 'kb'); //进行单位转换
echo $size.'kb';

值得注意的凡,没法通过简单的函数来得到目录的深浅,目录的深浅是拖欠目录下所有子目录及文件大小的总数,因此需要经过递归的计来循环计算目录的轻重缓急。

–删除文件

和Unix系统命令类似,PHP使用unlink函数进行文件去。

unlink($filename);

除去文件夹使用rmdir函数,文件夹必须也空,如果未为空或没权力则会唤醒失败。

rmdir($dir);

要文件夹着设有文件,可以先循环删除目录中的保有文件,然后又去该目录,循环去可以利用glob函数遍历所有文件。

foreach (glob("*") as $filename) {
   unlink($filename);
}

–总结

file_get_contents(),file_exists(),is_file(),is_writeable(),is_readable()

file_put_contents(),filemtime(),filesize(),unlink()

—日期以及时空—

–获得时之Unix时间穿

UNIX 时间穿(英文名叫:timestamp)是 PHP
中关于时间以及日期的一个坏重要之概念,它代表于 1970年1月1日 00:00:00
到手上日的秒数之同。

PHP提供了放函数 time()
来取得服务器时时刻之时光戳。那么得当前之UNIX时间穿就充分粗略了。

$time = time();

echo $time;//1396193923,这个数字表示从1970年1月1日 00:00:00 到我输出这个脚本时经历了1396193923秒

日子戳,表示时间接触

取时之日期

php内置了date()函数,来取时之日期。

函数说明:date(时间戳的格式, 规定时穿【默认是眼前底日期及日,可选】)

返回值:函数日期和时空

例子://date函数,第二只参数取默认值的图景

*echo date(“Y-m-d”);//2014-03-30 //date函数,第二只参数有值的情状 echo
date(“Y-m-d”,’1396193923′);//2014-03-30,1396193923表示2014-03-30底unix时间戳–


取得日期的Unix时间穿

UNIX 时间穿(英文名叫:timestamp)是 PHP
中关于时间与日期的一个特别重大之概念,它代表从 1970年1月1日 00:00:00
到眼前时空之秒数之同。

PHP提供了安放函数strtotime实现力量:获取有日期的流年穿,或抱有时间的年月穿。例如:

echo strtotime(‘2014-04-29’);//1398700800,这个数字代表于1970年1月1日
00:00:00 到2014年4月29号经历了1398700800秒 echo strtotime(‘2014-04-29
00:00:01’);//1398700801,这个数字代表于1970年1月1日 00:00:00
到2014-04-29 00:00:01时经历了1398700801秒
大家发现点的法则了吗,其实strtotime(‘2014-04-29’)相当给strtotime(‘2014-04-29

00:00:00′)

以格式化的日期字符串转换为Unix时间穿

strtotime函数预期受一个带有美国英语日期格式的字符串并尝试将那个分析为
Unix 时间穿。

函数说明:strtotime(要分析的时日字符串,
计算返回值的时日戳【默认是目前的日子,可卜】)
返回值:成功则赶回时穿,否则回 FALSE

比如

echo
strtotime(“now”);//相当给用英文单词now直接当现在底日子以及时间,并把这个日期时转发为unix时间穿。这个效应跟echo
time();一样。 echo strtotime(“+1
seconds”);//相当给以现的日期和时空长了1秒,并把这个日期时转发为unix时间穿。这个功效跟echo
time()+1;一样。 echo strtotime(“+1
day”);//相当给以现行之日期及时间长了1天。 echo strtotime(“+1
week”);//相当给以本的日期和时长了1周到。 echo strtotime(“+1 week 3
days 7 hours 5

seconds”);//相当给用于今之日子与日累加了1到家3上7小时5秒。

格式化格林威治(GMT)标准日

gmdate 函数能格式化一个GMT的日子与岁月,返回的凡格林威治标准时(GMT)。

推个例子,我们本四处的华时区是东八区,领先格林威治时间8独小时,有时候也吃GMT+8,那么服务器运行以下脚本返回的时日应该是这么的:
当前日子若是是2014-05-01 15:15:22 echo date(‘Y-m-d H:i:s’, time());
//输出为:2014-05-01 15:15:22 echo gmdate(‘Y-m-d H:i:s’, time());
//输出为:2014-05-01 07:15:22
因为格林威治时间是本中国时区的岁月减去8单小时,所以相对于本时刻如丢8独小时

—-图形图像操作—-
–GD库
Graphic
Device,PHP的GD库是故来处理图片的拓展库;常用来拍卖加水印和生成验证码的操作

PHP默认安装了GD库,安装的下需要开启

绘图线条

一旦本着图纸进行操作,首先使新建一个画布,通过imagecreatetruecolor函数可以创建一个当真彩色的空图片:

$img = imagecreatetruecolor(100, 100);

GD库中对此画笔所用底水彩,需要经imagecolorallocate函数进行分红,通过参数设定RGB的颜色值来规定画笔的颜色:

$red = imagecolorallocate($img, 0xFF, 0x00, 0x00);

然后我们通过调用绘制线段函数imageline进行线的绘图,通过点名起点和终点来最后得到线条。

imageline($img, 0, 0, 100, 100, $red);

线条绘制好以后,通过header与imagepng进行图像的出口。

header("content-type: image/png");
imagepng($img);

说到底可以调用imagedestroy释放该图形占用的内存。

imagedestroy($img);

通过地方的步子,可以发现PHP绘制图形非常之略,但过多时节我们不但是要输出图片,可能咱们尚待获得一个图片文件,可以由此imagepng函数指定文件将绘制后底图像保存至文件被。

imagepng($img, 'img.png');

<?php
$img = imagecreatetruecolor(100, 100);
$red = imagecolorallocate($img, 0xFF, 0x00, 0x00);
//在此以imageline绘制线条
imageline($img,0,10,90,80,$red);
header(“content-type: image/png”);
imagepng($img);
imagedestroy($img);

以图像中绘制文字

GD库可以拓展多种图的基本操作,常用的发绘制线条,背景填充,画矩形,绘制文字等。

同绘制线条类似,首先得新建一个图和初始化颜色。

$img = imagecreatetruecolor(100, 100);
$red = imagecolorallocate($img, 0xFF, 0x00, 0x00);

下一场运imagestring函数来展开文字的绘图,这个函数的参数很多:imagestring
( resource $image , int $font , int $x , int $y , string $s , int $col
),可以经过$font来装字体的大大小小,x,y设置文字显示的职,$s是如绘制的仿,$col是文的水彩。

imagestring($img, 5, 0, 0, "Hello world", $red);
header("content-type: image/png");
imagepng($img);
imagedestroy($img);
--

输出图像文件

眼前我们已经了解及,通过imagepng可以直接出口图像及浏览器,但是众多上,我们盼望将处理好的图像保存到文件,以便可以频繁采取。通过点名路线参数将图像保存及文件中。

$filename = 'img.png';
imagepng($img, $filename);

动imagepng可以以图像保存成png格式,如果要是封存成另外格式需要采用不同的函数,使用imagejpeg将图纸保存成jpeg格式,imagegif将图片保存成gif格式,需要验证的是,imagejpeg会指向图纸展开压缩,因此还可安装一个品质参数。

$filename = 'img.jpg';
​imagejpeg($img, $filename, 80);

--

变化图像验证码

简易的验证码其实就是是当图片被输出了几个字符,通过我们前章节讲到之imagestring函数就能兑现。

唯独在拍卖上,为了使验证码更加的平安,防止其他程序自动识别,因此经常需要针对验证码进行一些惊动处理,通常会下绘制有噪点,干扰线,对出口的字符进行倾斜、扭曲等操作。

好使用imagesetpixel绘制点来贯彻噪点干扰,但是仅仅绘制一个触及的来意不特别,因此此时会以循环进行自由绘制。

<?php
$img = imagecreatetruecolor(100, 40);
$black = imagecolorallocate($img, 0x00, 0x00, 0x00);
$green = imagecolorallocate($img, 0x00, 0xFF, 0x00);
$white = imagecolorallocate($img, 0xFF, 0xFF, 0xFF);
imagefill($img,0,0,$white);
//生成随机的验证码
$code = ”;
for($i = 0; $i < 4; $i++) {
$code .= rand(0, 9);
}
imagestring($img, 5, 10, 10, $code, $black);
//加入噪点干扰
for($i=0;$i<50;$i++) {
imagesetpixel($img, rand(0, 100) , rand(0, 100) , $black);
imagesetpixel($img, rand(0, 100) , rand(0, 100) , $green);
}
//输出验证码
header(“content-type: image/png”);
imagepng($img);
imagedestroy($img);

为图片添加水印

于图片添加水印的章程一般发生半点种,一种是以图纸上面长一个字符串,另一样种植是在图上丰富一个logo或者其他的图。

以此地处理的凡已经存在的图纸,所以可以一直打已经存在的图建立画布,通过imagecreatefromjpeg可以一直由图片文件创建图像。

$im = imagecreatefromjpeg($filename);

创图像对象后,我们虽可以通过前的GD函数,绘制字符串到图像上。如果假定加的水印是一个logo图片,那么就算得再行起一个图像对象,然后通过GD函数imagecopy将logo的图像复制到源图像受。

$logo = imagecreatefrompng($filename);
imagecopy($im, $logo, 15, 15, 0, 0, $width, $height);

当以logo图片复制到原来图片上从此,将加水印后底图片输出保存就好了加水印处理。

imagejpeg($im, $filename);

<?php
//这里仅仅是以案例用预备一些素材图片
$url =
‘http://www.iyi8.com/uploadfile/2014/0521/20140521105216901.jpg’;
$content = file_get_contents($url);
$filename = ‘tmp.jpg’;
file_put_contents($filename, $content);
$url =
‘http://wiki.ubuntu.org.cn/3b/Qref\_Edubuntu\_Logo.png’;
file_put_contents(‘logo.png’, file_get_contents($url));
//开始补充加水印操作
$im = imagecreatefromjpeg($filename);
$logo = imagecreatefrompng(‘logo.png’);
$size = getimagesize(‘logo.png’);
imagecopy($im, $logo, 15, 15, 0, 0, $size[0], $size[1]);

header(“content-type: image/jpeg”);
imagejpeg($im);

—–异常处理—–

摒弃来一个要命

自PHP5开始,PHP支持好处理,异常处理是面向对象一个主要特色,PHP代码中的大通过throw抛来,异常抛出之后,后面的代码用不见面再次吃实践。

既是抛来大会半途而废程序执行,那么为什么还亟需采取非常处理?

那个抛来给用于在遇见未知错误,或者不切合预先设定的尺度时,通知客户程序,以便进行任何连锁处理,不至于使程序直接报错中断。

当代码中使了try
catch的时段,抛来的百般会当catch中捕获,否则会一直中断。

 

1、基本语法
        try{
            //可能出现错误或大的代码
            //catch表示捕获,Exception是php已定义好之不得了类
        } catch(Exception $e){
            //对特别处理,方法:
                //1、自己处理
                //2、不处理,将其重抛出
        }
2、处理处理程序应当包括:
Try – 使用特别的函数应该在 “try”
 代码块内。如果没有碰异常,则代码用照常继续执行。但是倘若那个被点,会丢弃来一个雅。
Throw – 这里规定怎么触发异常。注意:每一个 “throw” 必须呼应至少一个
“catch”,当然好本着承诺多单”catch”
Catch – “catch” 代码块会捕获异常,并创办一个暗含异常信息的靶子。

//创建可抛出一个异常的函数
function checkNum($number){
     if($number>1){
         throw new Exception("异常提示-数字必须小于等于1");
     }
     return true;
 }

//在 "try" 代码块中触发异常
 try{
     checkNum(2);
     //如果异常被抛出,那么下面一行代码将不会被输出
     echo '如果能看到这个提示,说明你的数字小于等于1';
 }catch(Exception $e){
     //捕获异常
     echo '捕获异常: ' .$e->getMessage();
 }

点代码用取得接近这样一个荒唐:

抓获异常:: 异常提示-数字要低于等于1

事例说:

方的代码抛来了一个不行,并抓获了其:

创造 checkNum() 函数。它检测数字是否超过 1。如果是,则委来一个深。
以 “try” 代码块中调用 checkNum() 函数。
checkNum() 函数惨遭的坏被废除来
“catch” 代码块接收到该生,并创办一个富含异常信息之靶子 ($e)。
由此自夫 exception 对象调用
$e->getMessage(),输出来自该大的错信息

<?php
$filename = ‘test.txt’;
try {
if (!file_exists($filename)) {
throw new Exception(‘文件不有’);
}
} catch(Exception $e) {
echo $e->getMessage();
}

–异常处理类似

PHP具有许多充分处理接近,其中Exception是具有大处理的基类。

Exception有几只为主属性与方法,其中包括了:

message 异常信息内容
code 异常代码
file 抛来非常的文书称
line 抛来特别在该文件的行数

里头常用之法来:

getTrace 获得很追踪信息
getTraceAsString 获取很追踪信息的字符串
getMessage 获得出错信息

假如必要的话,可以透过继承Exception类来起从定义之酷处理类。

//自定义的异常类,继承了PHP的异常基类Exception
class MyException extends Exception {
    function getInfo() {
        return '自定义错误信息';
    }
}

try {
    //使用异常的函数应该位于 "try"  代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
    throw new MyException('error');//这里规定如何触发异常。注意:每一个 "throw" 必须对应至少一个 "catch",当然可以对应多个"catch"
} catch(Exception $e) {//"catch" 代码块会捕获异常,并创建一个包含异常信息的对象
    echo $e->getInfo();//获取自定义的异常信息
    echo $e->getMessage();//获取继承自基类的getMessage信息
}

<?php
class MyException extends Exception {
function getInfo() {
return ‘自定义错误信息’;
}
}

try {
throw new MyException(‘error’);
} catch(Exception $e) {
echo $e->getInfo();
}

破获异常信息

当询问了充分处理的基本原理之后,我们可由此try
catch来捕获异常,我们将行之代码放在try代码块被,一旦中间的代码抛来深,就能于catch中捕获。

此我们只是透过案例来打探try
catch的编制与非常捕获的不二法门,在实际行使中,不见面随机的扔来很,只有在极端气象或好重大的图景下,才见面弃来深,抛来深,可以保持程序的正确与安全,避免造成不可预知的bug。

一般的不得了处理流程代码为:

try {
    throw new Exception('wrong');
} catch(Exception $ex) {
    echo 'Error:'.$ex->getMessage().'<br>';
    echo $ex->getTraceAsString().'<br>';
}
echo '异常处理后,继续执行其他代码';

<?php
try {
throw new Exception(‘wrong’);
} catch(Exception $ex) {
echo ‘Error:’.$ex->getMessage().'<br>’;
echo $ex->getTraceAsString().'<br>’;
}
echo ‘异常处理后,继续执行其他代码’;

收获错误有的所在行

在挺被捕获之后,我们得以经过非常处理对象获得其中的良信息,前面我们曾经了解捕获方式,以及获得基本的错误信息。

当实际上采用被,我们通常会博得足够多的慌信息,然后形容副到错误日志被。

透过我们要用报错的文本称、行号、错误信息、异常追踪信息等记下到日志被,以便调试以及修复问题。

<?php
try {
throw new Exception(‘wrong’);
} catch(Exception $ex) {
$msg = ‘Error:’.$ex->getMessage().”\n”;
$msg.= $ex->getTraceAsString().”\n”;
$msg.= ‘异常行号:’.$ex->getLine().”\n”;
$msg.= ‘所当文书:’.$ex->getFile().”\n”;
//将格外信息记录到日志被
file_put_contents(‘error.log’, $msg);
}

 

 

相关文章

标签:,

Your Comments

近期评论

    功能


    网站地图xml地图