H5学习感悟02

1.http 通信过程

客户端 对域名先查找本地hosts文件有没有对应ip,如果没有就去请求DNS服务器,
查找对应域名的ip地址,然后通过ip以及端口与服务端建立通道,收到服务器的'包',根据content-type处理响应的内容,开始界面渲染。

Host: localhost:63343
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: Webstorm-91a8f251=010b5b92-7bda-48b2-a14f-b911fb6350c7; Phpstorm-9bd8916c=1d074b2f-cb88-475b-8ff1-1cc122018191
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
服务端:
根据客户端提交过来的'包',获取请求路径
根据请求路径对应的文件扩展名找到文件的MIME TYPE
判断文件类型是否是静态文件
服务端把要发给客户端的数据打成'包',通过连接通道发回给客户端


HTTP/1.1 200 OK
content-type: text/html
server: PhpStorm 2019.1.1
date: Thu, 6 Jun 2019 06:33:33 GMT
X-Frame-Options: SameOrigin
X-Content-Type-Options: nosniff
x-xss-protection: 1; mode=block
cache-control: private, must-revalidate
last-modified: Thu, 6 Jun 2019 03:30:21 GMT
content-length: 669
三次握手的目的是确保连接时可靠的。



2.页面跳转


header('Location:index.html')  
在响应头中添加一个LOcation的头信息,客户端接收到这个头信息会自动跳转到头信息的地址。不能循环重定向

3.json 数据的表述手段
字面量:是代码中表述数据的一种手段

json与js字面量的区别
1.json  属性要用""
2.json  字符串要用""
3.json  不能有注释
4.json  没有undefined
把json数据转对象的过程称为反序列化

$arr = json_decode($content,true);//对象转关联数组
json_encode();//将数据序列化的时候,必须要UTF-8编码


4.doc+tab 快速在php页面生成html代码



5.多文件上传

  
<!--        multiple可以让一个文件域多选-->
        <div class="form-group">
            <label for="images">海报</label>
            <input type="file" id="images" name="images[]" class="form-control" multiple>

        </div>
var_dump($_FILES['images']);
    //校验文件逻辑
    if (empty($_FILES['images'])) {
        //客户端没提交音乐文件

        $GLOBALS["error_msg"] = '请提交图片文件';
        return;
    }

    $image = $_FILES['images'];

    //多文件长传
    for ($i = 0; $i < count($image['name']); $i++) {
        //校验是否上传成功
        if ($image['error'][$i] !== UPLOAD_ERR_OK) {
            $GLOBALS["error_msg"] = $image['name'][$i] . '文件上传失败';
            return;
        }
        //校验文件类型
        $allowed_type_image = array('image/png');
        if (!in_array($image['type'][$i], $allowed_type_image)) {
            $GLOBALS["error_msg"] = $image['name'][$i] . '文件格式非法,只能上传图片';
            return;
        }
        //校验文件大小

        if ($image['size'][$i] >= 5 * 1024 * 1024) {
            $GLOBALS["error_msg"] = $image['name'][$i] . '文件超出1M';
            return;
        }

        if ($image['size'][$i] <= 1 * 10) {
            $GLOBALS["error_msg"] = $image['name'][$i] . '文件小于10K';
            return;
        }

        //长传了文件,但还在临时目录中,开始移动
        //将上传的文件重新命名
        $source_images[$i] = uniqid() . '-' . $image['name'][$i];
        if (!move_uploaded_file($image['tmp_name'][$i], '../file/' . $source_images[$i])) {

            $GLOBALS["error_msg"] = $image['name'][$i] . '提交图片文件失败';
            return;
        }

    }

6.从数组中删除一条数据

 

foreach ($jsonObj as $key => $obj) {
    if ($obj['id'] !== $needDeleteId) {

        //break;
    } else {
        $index = array_search($obj, $jsonObj);
        //echo "有数据" . $key.'==='.$a['title'].'、、'.$index;
        //从数组中删除
        $delete = array_splice($jsonObj, $index, 1);
        echo '<pre>';
        var_dump($delete);
        echo '</pre>';
        var_dump($delete[0]['id']);

        echo '<pre>';
        var_dump($jsonObj);
        echo '</pre>';

    }
}
6.mysql 数据库操作


$connection=@mysqli_connect('127.0.0.1','root','12345679','stus');
@mysqli_connect  //加@忽略错误信息
//基于数据库连接对象,执行一次数据库操作

$query=mysqli_query($connection,'select * from stud');//返回的不是结果,返回的是查询对象

object(mysqli_result)#2 (5) {
  ["current_field"]=>
  int(0)
  ["field_count"]=>
  int(6)
  ["lengths"]=>
  NULL
  ["num_rows"]=>
  int(7)
  ["type"]=>
  int(0)
}
//拿着查询对象,再到数据库中逐行取出数据


mysqli_fetch_assoc($query)//以关联数组的方式从数据库取出数据
A.读取查询到的数据

$query = mysqli_query($connection, 'select * from stud');
toast($query);
$arr = array();
for ($i=0;$i<$query->num_rows;$i++){
    $arr[] = mysqli_fetch_assoc($query);
}
toast($arr);
$query = mysqli_query($connection, 'select * from stud');
  toast($query);
  $arr = array();

  $row=mysqli_fetch_assoc($query);
  while ($row){
      $arr[]=$row;
      $row=mysqli_fetch_assoc($query);
  }
while ($row=mysqli_fetch_assoc($query)){
      $arr[]=$row;
  }

  //用对象的方式操作数据库

   $conenction = new mysqli('127.0.0.1', 'root', '12345678', 'stus');

        if ($conenction->connect_error){
            die("连接失败");
        }
        echo "连接成功";


        $str="insert into users values (null,'$username','$gender','$birthday',null)";

        if ($conenction->query($str)===TRUE){
            echo "插入数据成功";
            header('Location:userlist.php');
        }else{
            echo $conenction->error;
        }


        $conenction->close();

B.释放操作
//释放查询操作

mysqli_free_result($query);
//断开connection连接

mysqli_close($connection);
7.mysql 编码问题

mysqli_set_charset($connection,'utf8');
8.Cookie
从响应报文的响应头里获取,从请求报文的请求头发出去

//如果只传两个参数,不传第三个参数(cookie的过期时间),
//默认cookie的过期时间是会话级别(浏览器的打开到关闭,关闭可浏览器就自动删除)

setcookie('name','hcy');
setcookie('name');//直传键不传值,删除cookie,过期
toast($_COOKIE);//返回的是关联数组
设置cookie的过期时间

//cookie取出来的数据都是字符串类型

//设置cookie 一天后到期

setcookie('name','hcy',time()+1*24*60*60);
cookie的作用范围

//path用于设置cookie的作用范围

setcookie('name','hcy',time()+1*24*60*60,'/');
//domain 用于设置cookie的域名范围

cookie的问题

9.session

使用session
session_start();//给当前用户找属于他的箱子,session_id 通过cookie的方式存到浏览器(客户端)
//session是有类型的,取出来的数据不需要强制转换

//存session

$_SESSION['name']='hcy2019';
//取消session

unset($_SESSION['name']);
//获取session
vardump($_SESSION);


session与cookie的区别

1.cookie是核心,session是基于cookie的,是一种处理cookie的安全性而提出的一种技术手段
2.cookie的值都是字符串,有时需要强制转换,session是有类型的,取出来的数据不需要强制转换
3.cookie数据存于浏览器(客户端),session给当前用户找属于他的箱子,
session_id 通过cookie的方式存到浏览器(客户端),而值存于服务器


10.超全局变量

   $GLOBALS  全局作用域可用的全部变量
   $_SERVER  获取服务端相关信息
   $_REQUEST 获取提交的相关参数
   $_POST    获取post提交的相关参数
   $_GET     获取get提交的相关参数
   $_FILES   获取上传文件
   $_ENV     操作环境变量
   $_COOKIE  操作cookie
   $_SESSION 操作session















猜你喜欢

转载自blog.csdn.net/Coder_Hcy/article/details/93739811