zoukankan      html  css  js  c++  java
  • PHP中WEB典型应用技术

    主要讲5个方面:

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

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

    1、表单传值

        1.1、单选框

    single.html

     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.php

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

    注意:

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

       1.2、多选框

    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.php

     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() 函数分成一个字符串,再存入数据库中。

    2、文件上传

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

          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 ?>

    3、文件下载

    clipboard

    二、http协议

    1、请求协议

        1.1、组成:请求行、请求头、空行、请求数据

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

        1.1.2、请求头。

        请求头就是所有当前需要用到的协议项的集合!

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

       常见的请求头:

    • 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.3、空行

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

        1.1.4、请求数据

    2、响应协议

        2.1、组成:响应行、响应头、空行、响应主体

    三、会话技术

    1、cookie

        1.1、基本操作

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

       1.2、属性

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

       1.3、注意事项

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

    2、session

        2.1、基本操作

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

        2.2、属性

        session的实现需要cookie的支持,它的属性和cookie的属性一样。

        2.3、注意事项

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

       2.4、session的销毁

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

    3、cookie和session的区别

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

    四、图像技术

    1、GD图片制作

        1.1、创建画布

                imagecreatetruecolor(width,height);

        1.2、创建画笔颜色

                imagecolorallocate(img,red,green,blue);

        1.3、绘制文字(在画布上画画)

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

        1.4、输出或保存图片

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

                输出前要:

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

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

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

    2、实现验证码

    captcha.php

     1 <?php
     2 
     3 # 1、创建画布
     4 
     5 $canWidth = 170; // 画布的宽
     6 
     7 $canHei = 40; // 画布的高
     8 
     9 $img = imagecreatetruecolor($canWidth, $canHei);
    10 
    11 # 2、为画布填充背景色
    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 #/3、定义在画布上的显示文字
    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 // 4、将字符写入到画布
    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 // 5、创建干扰线
    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 // 6、显示图片
    68 
    69 header('content-type:image/png');
    70 
    71 ob_clean();
    72 
    73 imagepng($img);
    74 
    75 ?>

    五、文件操作

    1、目录基本操作

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

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

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

    2、常用目录操作函数

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

    3、递归遍历目录

    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、文件操作

        2.1、文件基本操作

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

        2.2、常用文件函数

    • filetype:获取一个文件的类型。windows下文件类型有三种,dir、file、unknown。
    • file_exists:判断一个文件是否存在;
    • is_dir:判断一个文件是否是dir文件;
    • is_file:判断一个文件是否是file文件; 
    喜欢就给个大拇指吧!
  • 相关阅读:
    java转换CSV文件生成xml格式数据
    HTTP的Form数据的结构
    使用Filter实现静态HTML缓冲(一种折中方法)
    webwork的interceptor来实现ajax功能(buffalo)
    Delphi中DLL的编写和调用(例子)
    用C#实现BHO(Brower Helper Object)
    基于Delphi的VFW视频捕获程序的开发
    关于WebWork2中的中文问题
    tomcat中的几点配置说明
    用Sitemesh控制页面布局
  • 原文地址:https://www.cnblogs.com/BeiGuo-FengGuang/p/5927553.html
Copyright © 2011-2022 走看看