PHP中WEB典型应用技术

主要讲5个方面:

  1. PHP与web页面的交互:表单传值,文件的上传与下载
  2. http协议
  3. PHP的会话技术:cookie和session
  4. PHP的图像技术:GD库,图像的常见的制做和操做,验证码,二维码,水印、缩略图,3D图等等
  5. 文件操做:打开、关闭、读取文件、写入文件,遍历目录等

1、PHP与web页面的交互:表单传值,文件的上传与下载

一、表单传值

    1.一、单选框php

single.htmlhtml

 1 <!DOCTYPE html> 
 2 <html> 
 3 <head> 
 4     <title>单选项传值</title> 
 5     <meta charset="utf-8"> 
 6 </head> 
 7 <body> 
 8     <form method="GET" action="single.php"> 
 9         <p>用户名:<input type="text" name="username" /></p> 
10         <p> 
11            性  别: 
12            <input type="radio" name="gender" value="1" />男 13 <input type="radio" name="gender" value="2" />女 14 <input type="radio" name="gender" value="3" />保密 15 </p> 16 <p>密 码:<input type="password" name="password" /></p> 17 <p><input type="submit" value="提交"></p> 18 </form> 19 </body> 20 </html>

 

single.phpmysql

1 <?php
2 
3 header('Content-type:text/html;charset=utf8'); 4 echo '<pre>'; 5 var_dump($_GET);

 

注意:web

  • 一组选择的name值必须相同;
  • 必需要有value属性,且value属性的值不能相同。

   1.二、多选框sql

muliSelect.html数据库

 1 <!DOCTYPE html> 
 2 <html> 
 3 <head> 
 4     <title>单选项传值</title> 
 5     <meta charset="utf-8"> 
 6 </head> 
 7 <body> 
 8     <form method="POST" action="muliSelect.php"> 
 9         <p>用户名:<input type="text" name="username" /></p> 
10         <p> 
11            爱 好: 
12            <input type="checkbox" name="hobby[]" value="唱歌">唱歌 13 <input type="checkbox" name="hobby[]" value="跳舞">跳舞 14 <input type="checkbox" name="hobby[]" value="电影">电影 15 <input type="checkbox" name="hobby[]" value="篮球">篮球 16 </p> 17 <p><input type="submit" value="提交"></p> 18 </form> 19 </body> 20 </html>

 

muliSelect.phpwindows

 1 <?php
 2 
 3 header('Content-type:text/html;charset=utf8'); 4 /*echo '<pre>'; 5 var_dump($_POST);*/ 6 // 1,链接数据库 7 mysql_connect('localhost:3306','root','aaa'); 8 mysql_query('set names utf8'); 9 mysql_query('use php2018'); 10 // 2,接收数据 11 $user_name = trim($_POST['username']); 12 $user_gender = $_POST['gender']; 13 $hobby = $_POST['hobby']; 14 $user_password = md5(trim($_POST['password'])); 15 16 // 将数组转换成字符串才能写入数据库 17 $user_hobby = implode(',',$hobby); 18 19 // 3,数据入库 20 $sql = "insert into user values 21 (null,'$user_name','$user_gender','$user_hobby','$user_password')"; 22 23 $result = mysql_query($sql); 24 25 if($result) { 26 echo '插入成功'; 27 }else { 28 echo '插入失败'; 29 } 30 31 /*create table user( 32 user_id int primary key auto_increment, 33 user_name varchar(20) not null default '匿名', 34 user_gender enum('1','2','3') comment '1是男2是女3是保密', 35 user_hobby set('唱歌','跳舞','电影','篮球'), 36 user_password char(32) 37 );*/

 

注意:数组

  • 当咱们用PHP获取多选框的值时,会得到一个数组;
  • 当咱们将多选框的值存入数据库时,须要将得到的数组用 implode() 函数分红一个字符串,再存入数据库中。

二、文件上传

实现文件上传,由下面几步:浏览器

      1)、在服务器端要开启文件上传功能;缓存

      2)、在浏览器端提供可以进行文件上传的表单。其实就是给表单添加属性:enctype=”multipart/form-data”;

      3)、使用$_FILES接收上传的文件的相关信息;

      4)、验证文件;

      5)、将文件从临时文件夹移动到指定的目录下。

             其实就是利用一个函数:move_upload_file(临时文件名,目标存放的目录及文件名);有一个返回值,若是上传成功就返回true,不然就返回false;

             PHP默认的上传临时文件夹是在C盘下,有时候由于权限问题会致使上传失败, 所以咱们通常会修改上传的临时文件夹。

             

封装文件上传函数

upload.php

  1 <?php
  2 
  3 # 文件上传函数
  4 
  5 /**
  6 
  7 * 文件上传
  8 
  9 * @param array $file 上传文件的信息(是一个数组,有5个元素)
 10 
 11 * @param array $allow 文件上传的类型
 12 
 13 * @param string & $error 引用类型,用来记录错误信息
 14 
 15 * @param string $path 文件上传的路径
 16 
 17 * @param int $maxsize = 2*1024*1024 容许上传的文件的大小
 18 
 19 * @return false|$newname 若是上传失败就返回false,成功则返回文件的新名字
 20 
 21 */
 22 
 23 function upload($file,$allow,& $error,$path,$maxsize=2097152){ 24 25 # 1,判断系统错误 26 27 switch ($file['error']) { 28 29 case 1: 30 31 $error = '上传错误,超出了文件限制的大小!'; 32 33 return false; 34 35 case 2: 36 37 $error = '上传错误,超出了表单容许的大小!'; 38 39 return false; 40 41 case 3: 42 43 $error = '上传错误,文件上传不完整!'; 44 45 return false; 46 47 case 4: 48 49 $error = '请先选择要上传的文件!'; 50 51 return false; 52 53 case 6: 54 55 case 7: 56 57 $error = '对不起,服务器繁忙,请稍后再试!'; 58 59 return false; 60 61 } 62 63 # 2,判断逻辑错误 64 65 // 2.1,判断文件大小 66 67 if ($file['size'] > $maxsize) { 68 69 $error = '超出文件大小,容许的最大值为:'. $maxsize . '字节'; 70 71 return false; 72 73 } 74 75 // 2.2,判断文件类型 76 77 if (!in_array($file['type'], $allow)) { 78 79 //文件类型非法 80 81 $error = '上传的文件类型不正确,容许的类型有:' . implode(',', $allow); 82 83 return false; 84 85 } 86 87 # 3, 获得文件的新名字 88 89 $newname = randName($file['name']); 90 91 # 4,移动临时文件到指定路径 92 93 $target = $path . '/' . $newname; 94 95 if (move_uploaded_file($file['tmp_name'], $target)) { 96 97 return $newname; 98 99 }else { 100 101 $error = '发生未知错误,上传失败!'; 102 103 return false; 104 105 } 106 107 } 108 109 # 定义一个产生随机名字的函数 110 111 /** 112 113 * @param string $filename 文件的旧名字 114 115 * @param string $newname 文件的新名字 116 117 */ 118 119 function randName($filename) { 120 121 //生成文件名的时间部分 122 123 $newname = date('YmdHis'); 124 125 //加上随机的六位数 126 127 $str = '0123456789'; 128 129 //获得六位随机数 130 131 for ($i=0; $i < 6; $i++) { 132 133 //将每次获得的随机数加到新名字后 134 135 $newname .= $str[mt_rand(0,strlen($str))]; 136 137 } 138 139 // 加上后缀名 140 141 $newname .= strrchr($filename, '.'); 142 143 return $newname; 144 145 } 146 147 ?>

 

三、文件下载

clipboard

2、http协议

一、请求协议

    1.一、组成:请求行、请求头、空行、请求数据

    1.1.一、请求行。分为三个部分:请求方式、请求路径、协议版本

    1.1.二、请求头。

    请求头就是全部当前须要用到的协议项的集合!

    协议项就是浏览器在请求服务器的时候事先告诉服务器的一些信息,并且每个协议项都要单独的占用一行!

   常见的请求头:

  • host:当前url中所要请求的服务器的主机名(域名)
  • accept-encoding:是浏览器发给服务器,声明浏览器支持的压缩编码类型 好比gzip
  • accept_charset:表示,浏览器支持的字符集
  • referer:表示,这次请求来自哪一个网址
  • accept-language:能够接收的语言类型,cn,en等
  • cookie:
  • user-agent:用户代理,当前发起请求的浏览器的内核信息
  • accept:表示浏览器能够接收的数据类型,text/html,image/img
  • content-length(post):只有post提交的时候才会有的请求头,显示当前提交的数据长度(字节)
  • if-modified-since(get):在客户端向服务器请求某个资源文件时,询问此资源文件是否被修改过
  • content-type(post):定义网络文件的类型和网页的编码,决定浏览器将以什么形式、编码读取这个文件

    1.1.三、空行

    用来分离请求头和请求数据,意思就是请求头处处结束!

    1.1.四、请求数据

二、响应协议

    2.一、组成:响应行、响应头、空行、响应主体

3、会话技术

一、cookie

    1.一、基本操做

  • 增删改:setCookie(名,值)
  • 查:$_COOKIE

   1.二、属性

  • 有效期:默认一个会话周期。可经过setCookie第三个参数设置;
  • 有效路径:默认当前目录及其子目录。可经过第四个参数设置;
  • 有效域:默认当前站点(子域),可经过第五个参数设置;
  • 是否仅安全传输:默认否,第六个参数设置;
  • HTTPONLY:默认否,第七个参数设置。

   1.三、注意事项

  • cookie的值,仅仅支持字符串类型;
  • cookie的键(下标),能够写成数组下标的形式。

二、session

    2.一、基本操做

    增删该查都是经过$_SESSION数组来完成的。

    2.二、属性

    session的实现须要cookie的支持,它的属性和cookie的属性同样。

    2.三、注意事项

  • session数据能够是任意类型的数据(cookie只能是字符串类型)
  • $_SESSION数组元素的下标只能是字符串型(关联型),不能是索引数组

   2.四、session的销毁

  • unset():销毁session中某个数据,并无销毁会话数据区;
  • $_SESSION = ARRAY():清空$_SESSION,并无销毁会话数据区;
  • session_desroy(():销毁会话数据区。

三、cookie和session的区别

  cookie session
存储位置 浏览器端 服务器端
数据量
存储的数据类型 只能是字符串 任意类型
安全性 较低 较高
默认的有效路径 只能是当前目录及其子目录 整站有效

 

4、图像技术

一、GD图片制做

    1.一、建立画布

            imagecreatetruecolor(width,height);

    1.二、建立画笔颜色

            imagecolorallocate(img,red,green,blue);

    1.三、绘制文字(在画布上画画)

            imagestring(img,size,x,y,string,color);

    1.四、输出或保存图片

  • 输出:imagepng(图片资源);

            输出前要:

            1)、设置响应头信息:header("content-type:image/png");

            2)、清除缓存区数据:ob_clean();

  • 保存:imagepng(图片资源,路径/图片名称);

二、实现验证码

captcha.php

 1 <?php
 2 
 3 # 一、建立画布
 4 
 5 $canWidth = 170; // 画布的宽
 6 
 7 $canHei = 40; // 画布的高
 8 
 9 $img = imagecreatetruecolor($canWidth, $canHei); 10 11 # 二、为画布填充背景色 12 13 $bgColor = imagecolorallocate($img, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120)); 14 15 imagefill($img, 1, 1, $bgColor); 16 17 #/三、定义在画布上的显示文字 18 19 // 显示随机字符的范围 20 21 $arr = array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9)); 22 23 // 获得指定位数的随机字符 24 25 $str = ''; 26 27 shuffle($arr); 28 29 $charNum = 4; //验证码个数 30 31 $keyArr = array_rand($arr,$charNum); 32 33 foreach ($keyArr as $value) { 34 35 $str .= $arr[$value]; 36 37 } 38 39 // 四、将字符写入到画布 40 41 $span = ceil($canWidth/($charNum+1)); 42 43 for ($i=1; $i <= $charNum; $i++) { 44 45 // 为画布建立画笔色 46 47 $charColor = imagecolorallocate($img, mt_rand(120,255), mt_rand(120,255), mt_rand(120,255)); 48 49 imagestring($img, 5, $span*$i, 12, $str[$i-1], $charColor); 50 51 } 52 53 // 五、建立干扰线 54 55 for ($i=0; $i < 8; $i++) { 56 57 //建立干扰线颜色 58 59 $linColor = imagecolorallocate($img, mt_rand(75,150), mt_rand(75,150), mt_rand(75,150)); 60 61 //建立干扰线 62 63 imageline($img, mt_rand(0,$canWidth-1), mt_rand(0,$canHei-1), mt_rand(0,$canWidth-1), mt_rand(0,$canHei-1), $linColor); 64 65 } 66 67 // 六、显示图片 68 69 header('content-type:image/png'); 70 71 ob_clean(); 72 73 imagepng($img); 74 75 ?>

 

5、文件操做

一、目录基本操做

  • 建立目录:mkdir(目录地址和名字,权限);
  • 删除删除:rmdir(目录地址);
  • 移动/重命名目录:rename(原始文件路径,新的文件路径);

(此处的移动实质上也是重命名,不过目录的名字不仅仅是文件名,还包括目录的路径,当咱们改变目录的路径时,既是移动目录,也能够说是重命名;)

  • 获取目录内容:
  1. 打开目录,opendir,获得一个目录句柄(目录资源);
  2. 依次读取目录内的文件,readdir;
  3. 关闭目录句柄(closedir);

二、经常使用目录操做函数

  • getcwd:获取当前的工做路径;
  • chdir:改变当前的工做路径;
  • rewinddir:重置资源指针,回到第一个;
  • scandir:浏览某一目录,以索引数组的形式返回目录中内容。

三、递归遍历目录

bianli.php

 1 <?php
 2 
 3 /**
 4 
 5 * 递归遍历文件
 6 
 7 * @param string $path 目录路径(地址)
 8 
 9 * @param int $deep=0 当前目录的深度
10 
11 */
12 
13 function readDirs($path,$deep=0) { 14 15 $dir_handle = openDir($path); //获得$path目录的句柄 16 17 while (false !== $file = readDir($dir_handle)) { 18 19 //筛选掉./和../ 20 21 if ($file == "." || $file == "..") { 22 23 continue; 24 25 } 26 27 //输出文件 28 29 echo str_repeat('-', $deep*3),$file,'<br/>'; 30 31 //进入递归点和递归出口 32 33 if (is_dir($path . '/' .$file)) { 34 35 readDirs($path . '/' .$file,$deep+1); 36 37 } 38 39 } 40 41 } 42 43 $path = './'; 44 45 readDirs($path); 46 47 ?>

 

二、文件操做

    2.一、文件基本操做

    • 读:file_get_contents;读取指定路径的文件内容,以字符串形式返回;
    • 写:file_put_contents;覆盖写,往指定文件写入指定数据,并覆盖之前的内容。若是须要追加数据,则须要设置第三个参数FILE_APPEND;

    2.二、经常使用文件函数

  • filetype:获取一个文件的类型。windows下文件类型有三种,dir、file、unknown。
  • file_exists:判断一个文件是否存在;
  • is_dir:判断一个文件是不是dir文件;
  • is_file:判断一个文件是不是file文件; 
相关文章
相关标签/搜索