赞
踩
服务器(提供服务)指的就是一台安装特定的软件的计算机,用于专门用于提供特定的服务。
按照服务类型的不同,又划分为:Web 服务器、数据库服务器、文件服务器等等。
客户端(使用服务)指的是在一次服务过程中使用这个服务的设备(网络端点)。
目前最常见的客户端就是浏览器。
B/S 架构:Browser(浏览器) ←→ Server(服务器),这种软件都是通过浏览器访问一个网站使用,服务器提供数据存储等服务。
优点:部署方便(不用安装),可维护性强。
缺点:用户体验不好,不能针对每一个用户的不同特点进行设置;
C/S 架构:Client(客户端) ←→ Server(服务器),这种软件通过安装一个软件到电脑,然后使用服务器提供数据存储等服务。
优点:用户体验好;
缺点:部署不方便(需要安装),可维护性弱;
IP 地址 Internet Protocol Address:标识一个网络设备的地址。八位的二进制数;
域名:方便用户记住ip地址起的名字
特殊域名:127.0.0.1 是本地回环地址 localhost:用来测试本机服务器是否连通;
DNS:接收用户域名解析为IP地址返回;
端口:用来标记各个软件;
hosts 文件:先找本地的host,如果有域名,直接返回,如果没有去dns找;
本机的 hosts 文件配置只能到影响本机的 DNS 寻址,只有以管理员权限运行的编辑器才有权利修改 hosts 文件;(Windows:C:\Windows\System32\drivers\etc\hosts)
端口:http 默认的端口 80; https 默认的端口是 443;
URL(Uniform Resource Locator),统一资源定位符,就是表示网络当中某一个网页的完整访问地址;格式: 协议名称://域名:端口/文件目录(文件名称)?key=value&key2=value2;
请求响应流程:
1. 用户打开浏览器
2. 地址栏输入我们需要访问的网站网址(URL)
3. 浏览器通过 DNS 服务器 获取即将访问的网站 IP 地址
4. 浏览器发起一个对这个 IP地址的 请求
5. 服务端监听指定的 端口 的服务器软件接收到这个请求,进行相应的处理
6. 服务端将处理完的结果返回给客户端浏览器(响应)
7. 浏览器将服务端返回的结果呈现到界面上
√ echo :echo可以输出字符串,它可以同时输出多个字符串,以,分隔;
print (): 可以输出字符串,只能输出一个值 ;print('abc');
print_r(): 可以输出复杂数据的key和值(复杂数据类型);
√ var_dump():可以输出复杂类型,它可以输出复杂类型数据的key和value,同时还可以获取value的长度;
声明变量:
特点:
1.所有变量的声明必须以$符号做为前缀;
2.变量名区分大小写;
3.变量名的组成由字符,数字,下划线构成;
4.PHP 中变量无需声明类型,变量的类型根据值的类型来推断。
5.在php中如果声明变量没有赋值,那么这个值默认为null;
6.在php代码的语句需要添加分号,如果不加,除非是最后一行,否则就会报错;
相关函数:用var_dump() 来打印;
输出结果的细节:在php中如果输出true,那么结果为1,如果输出false,输出结果为null;
isset():判断变量是否存在,判断变量是否定义了返回true 1和false 0,还可以判断变量的值是否为null;
empty():判断变量是否为空值,为空的值有:"" 0 "0",null,false,array().为空返回true,否则返回false;
unset():删除变量:
1.如果删除一个变量,那么变量的值会置为null;
2.可以同时删除多个变量;
3.如果在函数中删除全局变量,那么并不会真正的将全局变量删除;
数据类型:
- 基本数据类型:string(字符串) integer(整型) float(浮点型) boolean(布尔型);
- 复合数据类型: array(数组) object(对象);
- 特殊数据类型:NULL(空) 资源;
判断数据类型:
√ - is_string():判断当前变量是否是字符串类型;
- is_bool():判断当前变量是否是布尔类型;
- is_int():判断当前变量是否是整形类型;
- is_float():判断当前变量是否是浮点类型;
√ - is_array():判断当前变量是否是数组类型;
- is_object():判断当前变量是否是对象类型;
注意:
1:+ 只能运算符,意味着当出现+的时候,系统会自动的将+两边的数据转换为数值;
2:字符串连接符使用 . ;
3:’’ 的特点
1.它不能解析变量,如果在’'中包含的变量,变量会被当成普通字符串原样输出
2.它支持转义,如\ ’ ;
"“的特点:
1.”“中可以来解析变量。
a.如果在变量名后面紧接着其它的合法字符(中文,a-z A-Z 0-9 _),那么系统会将整个变量及后面的字符串当成一个变量进行解析;
b.如果需要在这种情况下正确的解析变量,可以将变量包含在{}中;
2.支持的转义字符:” \ \n \t $;
数组:(所有数组都是关联数组)
索引数组:通过索引操作数组
创建方式:array(添加数组的成员,成员类型不作要求) [数组成员]
$arr = [1,2,3,true,“abc”];
打印:echo
a
r
r
[
3
]
;
遍
历
:
在
p
h
p
中
需
要
使
用
c
o
u
n
t
(
数
组
对
象
)
来
获
取
数
组
的
长
度
f
o
r
(
arr[3]; 遍历:在php中需要使用count(数组对象)来获取数组的长度 for(
arr[3];遍历:在php中需要使用count(数组对象)来获取数组的长度for(i =0;
i
<
c
o
u
n
t
(
i < count(
i<count(arr);$i++){
echo
a
r
r
[
arr[
arr[i].’ ';
};
关联数组:以键值对的方式来描述数据,类似于js中的对象 {key:value,key:value...} $arr = array( "name" => "jack", "age" => 20, ); 打印:print_r($arr); var_dump($arr); 遍历: foreach($arr as $key => $value){ echo $key .":".$value.'<br>'; }; foreach($arr as $value){ echo $value.'<br>'; }; 混合数组:综合了索引数组和关联数组的特点,意味着它里面包含索引和关联两种形式; 特点: 1.如果添加元素的时候设置key,那么就没有索引 2.如果没有设置key,那么系统自动生成索引 3.下载索引和key不会互相影响。如果没有指定key,那么索引会取到之前的最大的索引下载+1;
exit();终止
创建数组:
通过[]创建数组:
1.判断当前数组是否已经存在,如果不存在则先创建,再将元素添加到数组第一个元素位置;
2.如果数组已经存在,那么就将当前元素添加到数组中–追加;
3.$arr[10]= a:意思就是添加一两个索引为10的a;
count():获取指定数组的长度;
unset():它也可以用来删除数组中的某个成员。但是删除了数组的元素之后,并不会对数组元素的索引产生影响,元素还会保留之前的索引。意味着它只是删除了索引位置的元素,并没有动态的改变数组的长度。
二维数组:
$arr = array(
“first” => array(
“name” => “jack”,
“age” => 20
),
array(
“name” => “rose”,
“age” => 18
)
);
print_r($arr);
echo '<hr>';
foreach($arr as $key => $value){
// 二维数组的遍历需要考虑使用嵌套循环
foreach($value as $subkey => $subvalue){
echo $subkey .":".$subvalue ."<br>";
}
};
数据类型:
数据有不同的类型,那么在操作数据的时候可能进行类型的转换才能完成对应的操作;
类型转换大致可以分为两种:自动转换 强制类型转换;
在php中大多数情况下都是自动转换;
在php中的强制类型转换,就是在变量前面添加(类型):
var_dump((int)
s
t
r
)
;
v
a
r
d
u
m
p
(
(
a
r
r
a
y
)
str); var_dump((array)
str);vardump((array)str);
(bool)
s
t
r
(
s
t
r
i
n
g
)
str (string)
str(string)str (object)$str;
运算符:
1: +只能是算术运算符,系统会自动的将+两边的变量转换为数组,如果可以转换,就进行转换,否则返回这个数据类型的默认值 int >0 object > null bool>false float:0.0;
2:在php中字符串连接符使用 . ;
语句:
if语句:if(
s
c
o
r
e
>
=
90
)
:
e
c
h
o
′
A
′
;
e
l
s
e
i
f
(
score >= 90): echo 'A'; elseif(
score>=90):echo′A′;elseif(score >= 80):
echo ‘B’
else:
echo ‘E’;
endif;
for语句: for($i=0;$i<10;$i++):
echo '我输出i的值';
echo 'abc<br>';
endfor;
函数:
function 函数名称(参数列表){
函数体
return 返回值;
};
1:在php中函数内部无法使用函数外部的成员;
2:如果一个变量没有赋值或者这个变量不存在,那么转换为int之后的结果默认为0;
3:可以使用关键字:global;声明使用全局变量;
4:声明并修改需要另起一行:
global $num;
$num = 10;
超全局变量:print_r($GLOBALS);
常量(大写):
定义常量的语法:define(常量名称,常量值,标记是否对大小写敏感false);
define(name,value,insensitive):insensitive:不敏感的,麻木不仁的;
默认情况下常量对大小写敏感--区分大小写默认为false区分大小写;
定义常量:一般情况下常量的名称使用大写字符;
define("PI",3.14,false);
__LINE__:可以获取当前的代码行:echo __LINE__;
__FILE__:它可以获取当前文件的路径 :目录+文件名:echo __FILE__;
__DIR__:它可以获取当前文件的目录:echo __DIR__;
载入文件::相当于将被载入的文件的代码在当前位置复制一份
include: 1.如果文件载入失败,也不会影响后续代码的执行 ;
2.如果重复载入文件那么被载入的文件的代码会真正的重复执行;
include_once:
1.如果文件载入失败,也不会影响后续代码的执行 ;
2.如果重复载入文件,最终也只会载入一次;
require:
1.如果文件载入失败,那么后续不再执行;
2.如果重复载入文件那么被载入的文件的代码会真正的重复执行;
require_once:
1.如果文件载入失败,那么后续不再执行 ;
2.如果重复载入文件,最终也只会载入一次;
API:
strlen(): 可以获取指定字符串的长度;无法正确的处理中文字符(宽字符集);
GB2312:每个字符占据的2个字节;
UTF-8:每个字符占据3个字节;
mb_strlen(): 可以获取指定字符串的长度;没有设置编码就使用当前php的默认编码;
time(): 从 Unix 纪元(格林威治时间 1970-01-01 00:00:00)到当前时间的秒数;
echo date("Y-m-d H:i:s");
修改时区:php-ini >date.timezone = PRC|Asia/shanghai|Asia/chongqin;
date();格式化时间戳;
strtotime();
文件操作:
header(“Content-Type:text/html”);
file_get_contents: 读取文件内容,如果读取成功,就会返回一个字符串类型的值(文件内容),如果读取失败,就会返回false;
file_put_contents(文件路径,需要写入的内容,FILE_APPEND ):将指定的内容写入到文件,同时返回当前成功写入的字符的数量;
js中定义常量:const XX = ;
explode():进行字符串的拆分。这个方法可以拆分指定的字符串,并将拆分的结构存储到数组并返回
v
a
l
u
e
=
e
x
p
l
o
d
e
(
"
∣
"
,
value = explode("|",
value=explode("∣",str);
implode():它可以将关联的数据以指定分隔符分隔,转换为字符串;
GET请求:
常见的发起GET请求的方式:
- 地址栏访问;
- src/href(超链接);
- 表单;
格式:index.php?userName=jack&password=123;
特点:速度快,通常用于对安全性要求不高的请求;
缺点: 1:在地址栏显示不安全;
2:传递的数据量小,4KB左右(不同浏览器会有差异)
POST请求:
1-后台传的相对来说比较安全,post 方式 安全性比较高;
2-传递数据量大,请求对数据长度没有要求;
3-请求不会被缓存,也不会保留在浏览器历史记录中;
action: 设置提交数据的处理页面。就是用来设置提交到的目标地址。一般来说它就是一个可以进行后台业务处理的页面 ***.php;如果提交的是当前的页面,可以为空;
method: 如果没有设置默认请求方式为get:
get:一般用来获取数据:特点:参数会在url地址栏中拼接;
post:一般用来发送数据到服务器;
<form action="form-get.php" method="get"></form>
如果想提交表单元素的数据,则必须为表单元素设置name属性;
PHP 中有三个超全局变量专门用来获取表单提交内容:
- $_GET:可以用来接收客户端以get方式传递的参数,注意只能接收以get方式传递的数据; 它的格式是一个关联数组;
- $_POST:用于获取以 POST 方式提交的内容,更标准的说法:接收 请求体 中的数据;
-
R
E
Q
U
E
S
T
:
可
以
接
收
通
过
g
e
t
或
p
o
s
t
方
式
提
交
的
数
据
,
但
是
我
们
不
用
,
为
什
么
,
有
两
个
原
因
;
−
_REQUEST:可以接收通过get或post方式提交的数据,但是我们不用,为什么,有两个原因; -
REQUEST:可以接收通过get或post方式提交的数据,但是我们不用,为什么,有两个原因;−_SERVER: 可以以获取服务器接收请求后的相关数据;
$_SERVER[‘REQUEST_METHOD’]:获取当前的请求方式;
form表单:
$_SERVER[“PHP_SELF”]:可以获取当前文件的路径;
1:默认情况下,会收集当前被选择的单选按钮的值,只不过这个值默认都是on;
2:我们也可能为单选按钮设置value属性,那么在数据收集的时候就会将当前的value属性的值进行提交;
3:对于 复选框,重点掌握传递多个值的情况:
1.如果多个复选框的名称一样,那么就只会默认传递最后一个选项值;
2.如果需要传递所有被选择的复选框的数据,那么可以在name属性值后面添加[],如果添加了[],那么系统会默认收集所有被选择的复选框的值,存储到一个数组中;
4:对于下拉列表,如果没有设置value属性,那么默认会传递当前被选择option的innertext ,但是如果设置了value属性,那么就会传递value属性;
type = “hidden”;
上传文件:
一:客户端:
1、表单的提交的方式设置为post;
2.需要为表单添加enctype:multipart/form-data;
二:服务器端: 1.$_FILES:可以记录上传文件的相关信息; 2.使用move_uploaded_file实现文件的移动; move_uploaded_file(源文件的全路径,目标文件的全路径); move_uploaded_file($_FILES["myfile"]["tmp_name"],"./upload/".$myname); 三: 1.判断用户进行了提交:empty; 2.限制文件类型: a.为表单元素添加属性 accept=".jpg,.png" b.可以在服务器进行判断 [name] => 跨域攻击.png:源文件的名称; [type] => image/png:源文件的类型; [tmp_name] => C:\Windows\phpE412.tmp:这是文件在服务器的临时路径; [error] => 0:错误信息,0代表没有错误; [size] => 256436:文件的大小; $type = $_FILES["myfile"]["type"]; strpos(源字符串,搜索字符串):可以获取指定字符串在源字符串中第一次出现的索引值,索引从0开始; if(strpos($type,"image/") === 0); 3.设置合理的文件名称: 1.生成一个随机的文件名称; $filename = $_FILES["myfile"]["name"]; 2.获取当前文件的扩展名 strrchr(源字符串,指定搜索的字符) $extension = strrchr($filename,"."); 3.生成一个随机的文件名称:获取到一个唯一值 $myname = time().rand(1000,9999).$extension; 4.限制文件上传大小的修改: 1.upload_max_filesize:这是服务器对上传的文件大小做了限制,默认为2mb,你可以修改这个值,但是要记得重启服务器; 2.服务器对每一次post请求传递的数据做了限制,默认为8mb,可以在php.ini配置文件中修改post_max_size属性值; 5.同时上传多个文件: 1.设置多文件选择,但是它只是能够选择多个文件,传递给服务器的文件数据只是后面的那个文件。如果在设置了multiple属性的时候,需要传递多个文件给服务器,那么只需要在name属性值后面添加[]; 2.也可以添加多个表单元素,同时也需要在名称后面添加[]: <input type="file" name="myfile[]"> <input type="file" name="myfile[]">;
1:如果在php结构中直接写return,那么当运行到return代码的时候,整个php文件的执行就结束了
2::如果在方法(function)中写return,那么这个return就只能结束这个方法的执行;
HTTP协议(HyperText Transfer Protocol,超文本传输协议):
一般现在称 HTTP 为端与端之间的通讯协议。
约定形式:
1. 客户端通过随机端口与服务端某个固定端口(一般为80)建立连接 三次握手
1. 客户端向服务器发送一个连接请求
2. 服务器向客户端返回一个确认信息
3. 客户端将请求及这个确认信息发送服务器
2. 客户端通过这个连接发送请求到服务端(这里的请求是名词)
3. 服务端监听端口得到的客户端发送过来的请求
4. 服务端通过连接响应给客户端状态和内容(响应报文)
约定内容:
- 请求 / 响应报文格式
- 请求方式 —— GET / POST / etc.
- 响应状态 —— 200 / 404 / 302 / 304 / etc.
- 预设的请求 / 响应头
请求报文:
get:请求行、请求头;
post:请求行、请求头 (空行隔开) 请求体;
响应报文:
响应行,响应头,(空行隔开) 响应体;
设置响应文件类型:
- header(‘Content-Type: text/css’);
- 常见的 HTTP MIME type:text/css text/html text/plain applcation/javascript
- 重定向(跳转到其他网页)
- header(‘Location: https://www.baidu.com’);
HTTP:超文本传输协议;
HTTP 会话:在计算机术语中,会话是指一个终端用户与交互系统进行通讯的过程。
HTTP无状态:无状态”是指HTTP协议对于事务的处理没有记忆能力。
状态保持:
cookie原理分析:
1. 客户端发送一个http请求到服务器端
2. 服务器端发送一个http响应到客户端,其中包含Set-Cookie头部
3. 客户端发送一个http请求到服务器端,其中包含Cookie头部
4. 服务器端发送一个http响应到客户端 ;
语法:setcookie(name[, value, expire, path, domain]); 有效期: setcookie("username", "jack", time() + 10); 设置永久存储的cookie: setcookie("username","jack",PHP_INT_MAX); path有效路径: 1.设置目录为父级目录,子目录也能访问 2.设置目录为子级目录,父级目录不能访问 /代表整站都能访问 setcookie("username","jack",PHP_INT_MAX,"/"); 86400等于一天; 删除cookie: 第一种:setcookie("username","jack",time()-3600); 第二种:怎么创建就应该怎么删除:方法的参数应该对应: setcookie("username","jack",PHP_INT_MAX,"/"); 删除:setcookie("username","",PHP_INT_MAX,"/"); 缺点: - COOKIE数据储存在浏览器端,不太安全; - COOKIE存储的数据类型,只能是字符串; - COOKIE文件是有容量限制(大约4KB)。4*1024b--> 1个文字大概是2~3b Session:(把数据存在服务器端,id存在浏览器端,依赖于cookie); - 设置session:session_start(); $_SESSION['user'] = array( 'username'=>'lisi',' age'=>'12', ); - 读取session:session_start(); $user = $_SESSION['user']; - 删除一个session信息:session_start(); unset($_SESSION['user']); - 删除所有session信息:session_start(); 1unset($_SESSION); $_SESSION = []; - 销毁session:session_destroy();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。