一, 服务器
1.1 什么是服务器, 做什么的?
服务器, 就是放在机房中的电脑, 和我们的电脑的区别在与服务器有固定的 IP, 服务器的安全性和稳定性相当的高; 性能一般就可以了, 但是 CPU 的性能要比普通的客户机高的多.
服务器, 就是给计算机网络提供服务的设备. 服务器要长时间的运行, 所以要求稳定性极强.
服务器的硬件: 处理器, 硬盘, 内存, 系统总线等等和我们的电脑一样. 但是系统架构是服务器级别的. 所有的硬件基础设施都是在处理能力, 稳定性, 可靠性, 安全性, 扩展性, 管理性能都要求高.
1.2 服务器呢是做什么的?
我们看到的网页上所有的信息内容都来源于服务器.
服务器就是存储网站上所有的数据信息的(数据库, 后台的语言, 前端的语言, 服务器环境).
我们通过浏览器发送 HTTP(超文本协议)请求到服务器. 请求的内容(图片, 文字, 视频, 音频等等), 服务器再通过响应把数据发送到客户机上.
1.3 服务的信息从何而来?
通过 FTP(文件传输协议)工具把本地的数据上传到服务器上的.
在公司怎样管理服务器呢? 是运维工程师们 (直接操作服务器环境) 或产品, 运营 (后台的图形页面) 来管理.
1.4 什么是虚拟主机?
简单来说, 就是把一台服务器很具容量的大小, 划分给不同的多个用户使用.
目前的互联网上, 很多都是几百元的虚拟主机. 大多数使用的是低配的服务器, 网速很, 导致的问题很多.
1.5 服务器的分类
根据服务器的用途分类:
国内的服务器: 一般都是电信和网通的机房. 是纯物理服务器. (需要备案)
云服务器: 一般是多线路机房. 采用的是云端的技术, 但是费用高. 一般用于大型的商业项目
免备案的服务器: 一般指的是放置在香港, 韩国, 美国等海外的服务器.
二, 在浏览器地址栏中输入 URL, 按下回车后究竟发生了什么?
答: 当用户在地址栏当中输入网址之后, 它会发起上行请求(get,post,delete,checkout,delete...); 当服务器接收到请求之后做出相应的响应; 客户端就能看见页面(请求回来的数据);
1、在浏览器中输入网址(域名) 2、浏览器会查找对应的服务器 IP 地址(去 DNS 服务器上【域名和 IP 对应的一个关系型服务器】) 3、浏览器打开 TCP 连接(默认端口是 80),向查过来的 IP 服务器发送一条 HTTP 请求,如果浏览器存储了 cookie 的话,那么 cookie 也会放入 HTTP 请求中去。 4、服务器接收 HTTP 请求 解析请求的文件(后台语言的文件),再生成 HTTP 响应,将响应发给客户端。 5、浏览器接收到响应的内容,生成页面的框架,进行渲染。请求的页面中若有 2 级或多级请求(img、CSS、js)再次的向服务器发送 HTTP 请求,直到页面所有的信息接收完成。 6、整个过程结束后,浏览器将关闭 TCP 连接。 |
| 在浏览器里输入要网址: |
| 浏览器查找域名的 IP 地址 |
| 浏览器给 web 服务器发送一个 HTTP 请求 |
| 服务器 “处理” 请求 |
| 服务器发回一个 HTTP 响应 |
| 浏览器开始显示 html |
| 浏览器发送获取嵌入在 HTML 中的对象 |
客户机与服务器断开! | 最后完成 |
DNS(Domain Name server): 域名服务器, 是进行域名和与之对应的 IP 地址转换的一个关系型服务器.
TCP/IP 协议: 是网络层和传输层的协议.(主要是解决数据如何在网络中传输的)
HTTP(HyperText Transfer Protocol): 是超文本协议.(主要是解决数据如何在服务器端和客户机上应用的).
https://www.taobao.com/ :80
1、红色部分:https 超文本传输协议;应用层的一个协议 2、蓝色部分:二级域名的别名 3、黄色部分:域名 4、绿色部分:域名的后缀 5:紫色部分:端口号(port),虚拟短裤、实际端口(USB),虚拟端口一般默认为 80,(0~65535) |
三, PHP 后端语言
3.1 PHP 介绍
所有的后台都要运行在服务器环境上(Java,PHP,node), 在不同的服务器环境运行不同的语言.
PHP 要运行在 Apache 服务器环境上, 而我们之前已经安装过了 PHPnow,PHPnow 集成包已经包含 Apache 服务器环境, 并且还一起安装了 MySQL 数据库.
提示:
1,PHP 文件的文件夹, 文件名都不能是汉字和空格, 就要是英文, 数字
2,PHP 的程序可以嵌套到 HTML 的任意一个位置.[PHP 也称为 "狗皮膏药"]
举个例子, 在 HTML 中写 PHP 语法:
<h1> 我买了一个 iPhone<?php echo 5+3; ?>,花了 & lt;?php echo 1000+7000; ?> 块钱 & lt;/h1> |
提示: 在本地 (没有在服务器上) 运行的时候, 会发现 PHP 代码当做了注释.
将文件放在服务器上运行, 访问, 结果:
通过源代码查看: 没有任何的 PHP 代码, 也就是说, PHP 文件在访问后, 被服务端执行了.
提示:
1,PHP 代码是在服务器上执行的, 将执行完毕的结果返回给客户端
2,HTML,CSS,JS 都在本地执行
3.2 PHP 基本语法
PHP 壳子:
<?php ?> |
所有的 PHP 语句要在壳子里面写, PHP 文件扩展名是. PHP, 壳子可以写在 HTML 的任意位置
echo 输出: 在 PHP 中输出到页面中, echo 是关键字, 所以没有括号.
echo "输出的语句"; |
注意: PHP 的每一条语句必须加分号, 如果没有分号会严重出错.
echo 还可以当函数:
- <p>
- <?PHP
- echo(1+2+3*5);
- ?>
- </p>
页面输出: 18
3.3 PHP 变量
- <p>
- <?PHP
- echo(1+2+3*5);
- $i = 8888;
- ?>
- </p>
- <h1>
- <?PHP
- echo $i;
- ?>
- </h1>
壳子没有闭包的性质, 所以 PHP 所有的壳子其实是一句话.
- <?PHP
- $j = 5;
- $k = 3;
- $str = "abc";
- $boo = true;
- $num = $j + $k;
- echo "结果是:".$num."字符串:".$str."布尔类型:".$boo;
- ?>
PHP 中变量命名: 以 $ 开头, 变量名区分大小写.
PHP 中变量不需要定义, 可以直接使用.
提示:
1、PHP 文件可以没有 HTML 骨架,因为服务器返回的时候已经变为静态页面返回 2、出现乱码使用 & lt;meta charset="UTF-8" /> 标签 3、变量可以进行简单的数学运算(数字与数字) 4、字符串拼接有两种方式 第一种:用 “.” 进行拼接 第二种:{$ 变量名称} |
- <?PHP
- $year = 2018;
- echo "今年是".$year."年";
- echo "今年是 {$year} 年";
- ?>
在花括号中不能有逻辑运算:
echo "a 和 b 的和是:{$a+$b}"; |
解决方案:
- <?PHP
- $a = 1;
- $b = 2;
- //echo "a 和 b 的和是:{$a+$b}";
- $sum = $a + $b; // 先运算, 再输出
- echo "a 和 b 的和是:{$sum}";
- ?>
3.4 PHP 运算符和条件语句
PHP 运算符和 JavaScript 是一样的
PHP 核心语句 (for,if...esle...while,switch,do while) 和 JS 一样.
PHP 运算符和 JavaScript 一样的.
PHP 的核心语句 (for,if......else(),while,switch,do while) 和 JavaScript 一样.
- <p>
- <?PHP
- for ($i=0; $i <100; $i++) {
- echo "<span></span>";
- }
- ?>
- </p>
推荐使用下面的写法: 循环语句是分开的.
- <?PHP
- for ($i=0; $i <100; $i++) {
- ?>
- <span></span>
- <?PHP
- }
- ?>
3.5 PHP 函数
PHP 中的函数和 JS 中一样, 但是 PHP 中的函数不能 new, 只能用 () 执行.
- function fun($a,$b){
- return $a+$b;
- }
- echo fun(1,2);
PHP 的作用域: 在 PHP 当中并没有 JS 世界当中全局变量. if,for 也不产生作用域.
在函数体内部使用 global 关键字声明, 使用的是全局当中变量.
- <?PHP
- $a = 123;
- function fn(){
- global $a; // 声明可以使用全局的 $a 变量
- echo $a; // 默认情况下不能用函数外的全局变量
- }
- fn();
- ?>
找质数:
- <?PHP
- function checkzhishu($num){
- $count = 0;
- for ($i=1; $i <= $num; $i++) {
- if( $num % $i == 0){
- $count++ ;
- };
- };
- if($count == 2){
- return true;
- }else{
- return false;
- };
- };
- if( checkzhishu(88)){
- echo "是质数";
- }else{
- echo "不是质数";
- }
- ?>
3.6 PHP 的数组
概述: PHP 中也有数组, 数组是一个容器, 这个容器可以装任意类型的数据, 也有下标, JS 中数组的下标是 length.
array()函数创建数组.
在 PHP 中, 有三种数组类型:
索引数组 - 带有数字索引的数组
关联数组 - 带有指定键的数组
多维数组 - 包含一个或多个数组的数组
数组方法大全: http://www.w3school.com.cn/php/php_ref_array.asp
数组的声明方式 1:
1 $arr = array('李达康','黄小明','李云龙','曹操','吕布'); 2 print_r($arr); |
结果: Array ( [0] => 李达康[1] => 黄小明[2] => 李云龙[3] => 曹操[4] => 吕布).
数组的声明方式 2, 可以指定键值对:
- <?PHP
- $arr = array("姓名"=>"李达康","年龄"=>88,"性别"=>"不详");
- print_r($arr);
- ?>
- Array( [姓名] =>李达康 [年龄] => 88 [性别] => 不详)
- $arr2= array(1,2,3,4,5,6,7,8);
- $sum = array_sum($arr2);
- echo $sum .'<br />';
结果: 36
array_unique() 删除数组中的重复值, 并返回结果数组:
- $arr3 = array(1,2,3,4,5,6,7,8,8,8,9,9,10,11,11);
- $arr4 = array_unique($arr3);
- print_r($arr4);
数组的声明方式 3: 数组嵌套数组
- <?PHP
- $arr = array("水果"=>array('苹果','香蕉','鸭梨'));
- print_r($arr);
- ?>
提示:
1,PHP 中声明数组的方法 array()内置方法
2, 第一种创建方式, 圆括号里面传递元素, 如果有多个用逗号隔开, 通过枚举索引值从 0 开始
3, 第二种, 键值对用 =>箭头这种形式, 如果要使用数据, 需要[key]
方法:
echo 一般输出的是字符串、变量、数字、布尔值 print_r:也是输出方法,输出的是引用类型(数组) |
四, 前后端数据交互方式
4.1 两种请求方式
概述: GET 和 POST 是两种上行请求的方式.
需求: 写 JS 代码, 用户在浏览器输入年龄和性别, 验证是否可婚.
- var age = document.getElementById('age');
- var sex = document.getElementById('sex');
- var btn = document.getElementsByTagName('button')[0];
- btn.onclick = function(){
- var ageVal = age.value;
- var sexVal = sex.value;
- if(sexVal == "男" && ageVal>= 22 || sexVal == "女" && ageVal>= 20){
- alert('可以领证结婚');
- }else{
- alert('不可以结婚');
- }
- }
提示: 现在这个判断是否可婚的业务, 是在本地浏览器客户端进行处理的.
现在想让服务器给解决出能否可婚, 需要将判断的逻辑放到服务器去执行, 那么需要向服务器传递一些数据(年龄, 性别).
服务器判断的逻辑和 JS 一样, 但是我们遇到一个问题, 用户填写的信息怎么传到后台?
有两种方式: GET 和 POST 上行请求发送 HTTP 到服务器.
1,GET 请求: 通过请求的地址后面追加一些参数
http://127.0.0.1/01.php?user=20&pwd = 男 |
2,POST 请求, 参数不是通过 URL 携带的, 我们请求的数据时, 发送 HTTP 请求, 这个请求里面有报文(包含报文头和报文体), 每次请求都会携带报文. 我们将数据通过报文体携带到服务器中.
4.2 GET 上行请求
通过 GET 请求伪装 URL 网址的形式向服务器传递数据,?k=v&k=v 形式传递数据.
get 请求的信息也就是? 后面一堆参数, 这堆参数有个术语叫 "query string"[查询字符串]
PHP 获取 GET 中的参数:
$_GET["key"] |
请求的服务器地址及参数:
http://127.0.0.1/04-GET.php?age=23&sex = 男 |
服务器的 PHP 语句获取数据的和处理逻辑:
<meta charset="UTF-8" /> <?PHP // 获取 GET 请求的数据 $age = $_GET["age"]; $sex = $_GET["sex"]; if($sex == "男" && $age>= 22 || $sex == "女" && $age>= 20){ echo "可以结婚"; }else{ echo "不可以结婚"; } ?>
现在点击前端的页面验证信息, 会发送 HTTP 请求. 请求的地址是 http://127.0.0.1/04-GET.php. 携带的信息是:?age=23&sex = 男
提示: http://127.0.0.1/?k = v &k = v(红色部分称之为 queryString). 相当于你去淘宝买东西前半部分相当于你家的地址; 问号后面的数据是额外信息(相当于客户端给服务器传递的一些额外数据)
如果客户端发起的是 GET 上行请求, 那么服务器端 (PHP 文件) 接受数据也必须是 GET 方法;
$_GET["key"]后台工程师管它叫'超全局变量'.
form 标签的两个属性:
action 是请求的接口地址, 通常请求的页面以 PHP,aspx,jsp 后缀结尾的文件.
method 是这个表单提交的方式: get 和 post, 小写.
submit 的功能. 本质上不是提交. 就是帮我们生成一个 get 请求的地址, 访问了你的接口页面.
name 值对应是 query string 中的 k.Value 值对应是 query string 中的 v. 没有其中任意一个值, PHP 端无法识别.
GET 请求的优点和缺点:
优点: get 便于分享网址. 网络中 90% 以上请求都是 get 请求.
缺点: 相对而言不安全(见仁见智), 不能提交很多字节.
Http GET 方法提交的数据大小长度并没有限制, HTTP 协议规范没有对 URL 长度进行限制. 这个限制是特定的浏览器及服务器对它的限制.
IE 浏览器对 URL 的最大限制为 2083 个字符, 超过这个数字, 提交按钮没有任何反应.
Firefox 浏览器: URL 的长度限制为 65536 个字符.
Safari 浏览器: URL 最大长度限制为 80000 个字符.
Opera 浏览器: URL 最大长度限制为 190000 个字符.
Chrome 浏览器: URL 最大长度限制为 8182 个字符.
Apache 服务器: 能接受最大 url 长度为 8192 个字符.
IIS 服务器: 能接受最大 url 的长度为 16384 个字符.
通过上面的数据可知, 为了让所有的用户都能正常浏览, URL 最好不要超过 IE 的最大长度限制(2083 个字符), 当然, 如果 URL 不直接提供给用户, 而是提供给程序调用, 这时的长度就只受 Web 服务器影响了.
理论上讲, POST 是没有大小限制的. HTTP 协议规范也没有进行大小限制, 起限制作用的是服务器的处理程序的处理能力.
GET 请求超出最大长度, 报错:
4.2.1 学习小调查 - GET 请求
案例: 需要有一些调查的数据; 学习的情况, 留言部分这些是需要用户端提交的数据
将这些数据写入一个文件, 保存'我'服务器这里.
HTML:
<form action="06.php" method="get"> <p>
学习情况:
<label><input type="radio" name="qingkuang" value="一脸懵逼"/>一脸懵逼</label> <label><input type="radio" name="qingkuang" value="有点懵逼"/>有点懵逼</label> <label><input type="radio" name="qingkuang" value="还行还行"/>还行还行</label> <label><input type="radio" name="qingkuang" value="还跟得上"/>还跟得上</label> <label><input type="radio" name="qingkuang" value="很好很好"/>很好很好</label> </p> <p>
晚上回家干什么?
<label><input type="radio" name="huijia" value="玩游戏"/>玩游戏</label> <label><input type="radio" name="huijia" value="电视剧"/>电视剧</label> <label><input type="radio" name="huijia" value="发呆"/>发呆</label> <label><input type="radio" name="huijia" value="学习"/>学习</label> <label><input type="radio" name="huijia" value="其它"/>其它</label> </p> <p>
留言?
<textarea name="liuyan" cols="30" rows="5"></textarea> </p> <p><input type="submit" /></p> </form>
PHP:
<?PHP $qingkuang = $_GET["qingkuang"]; $huijia = $_GET["huijia"]; $liuyan = $_GET["liuyan"];
$myfile = fopen("result/jieguo.txt","a");1创建文件对象, a 代表追加
2写入文件
fwrite($myfile,"情况:".$qingkuang ."---"."回家做:".$huijia."留言:".$liuyan."\r\n");
fclose($myfile); 3关闭文件
echo "提交成功"; ?>
4.2.1 新闻 - GET 请求
http://127.0.0.1/0_9.php?id=2 |
<?PHP $array = array( array("title"=>"标题 1","content"=>"内容 1"), array("title"=>"标题 2","content"=>"内容 2"), array("title"=>"标题 3","content"=>"内容 3") ); ?> <h1><?PHP echo $arr[0]["title"];?></h1> <h1><?PHP echo $arr[$_GET["id"]]["title"];?></h1> <p><?PHP echo $arr[$_GET["id"]]["content"];?></p>
4.3 POST 上行请求
Post 请求不多见, POST 请求发送信息的时候很复杂. 携带的信息将在发送的报文体中.
Post 请求一般发送 form 表单.(保密的数据, 大文件[图片, doc 文件] , 长文本, 视频, 音频), 信息量比较大的内容用 post 请求. 因为 post 不限制字节数.
概述: GET 向服务器传递数据是以伪装 URL 形式上传数据. 但是 POST 就不一样了, POST 用的是报文的报文体上传数据.
报文: 报文头 + 报文体
报文头:一般装载的是浏览器的信息 报文体:一般是空的 |
报文:
1, 客户端与服务器端传递数据的基本(报文体和报文头), 不管是上行请求, 还是下行响应都有报文
2,GET,POST 请求都有报文, 只不过 GET 伪装 URL 形式报文体为空, POST 请求向服务器传递数据用报文体.
3, 客户端发起的是 GET 服务器端就用 GET, 客户端发起的是 POST 服务端就用 POST
当你点击 submit 时候, 浏览器会帮你组件报文中的信息, 在报文体中插入有关 post 请求的信息.
4.4 GET 和 POST 的区别
概述: 市场上几乎都是 GET 请求; 登录, 注册等可以用 POST 请求
Accept:text/HTML,application/xhtml+xml (告诉服务器浏览器所接收的文本, 网页的图片, 视频) Accept-Encoding:gzip, deflate, br (可以接收 gzip,deflate 压缩后的数据) Accept-Language:zh-CN,zh;q=0.9 (浏览器支持的语言) Cache-Control:max-age=0 (浏览器的缓存) Connection:keep-alive (请求数据后, 保持连接) Cookie: (身份验证信息) Host:mbd.baidu.com (浏览器要找的主机) User-Agent: (浏览器内核)
来源: https://www.cnblogs.com/rope/p/10696568.html