配置虚拟主机
1》站点域名管理
设置结点域名,选定文件的位置,设置结点域名(去掉www),保存
2》在打开配置文件中
打开vhosts-ins设定Option Indexs FollowsymLinks ExecCGl修改保存
3》配置host文件设置结点域名
127.0.0.1 设置的结点域名
127.0.0.1 设置的节点域名(去点www的)
重启phyStudy
第二个虚拟主机
同上
但会影响第一个的vhosts-ins,需要重新设置每一个的vhosts-ins
输出内容方式
echo 可以输出字符串,并且可以同时输出多个字符串,用逗号隔开
print 用来输出字符串,但是只能输出一个
print_r()用来输出复杂类型,可以获取key与value
var_dump()用来输出复杂类型,可以获取key与value,还可以获取value的长度
与html混编
1》<p><?php echo ' abc ' ; ? > </ p > 简单嵌套
2》<?php if(判断条件){ ?>
<h4> 我是大白</h4>
<?php } else { ?>
<h4> 我不是大白 </h4>
<?php } ?>
变量
所有变量的申明必须以$符号作为前缀
变量名区分大小写
变量名的组成有字符,数字,下划线组成
$age = 18,
echo$age;
没有赋值为null,代码的语句必须加分号,除非是最后一行
isset()
判断变量名是否存在,判断变量是否定义,同时判断变量的值是否为null
empty()
判断变量是否为空值,为空的值有 ' 0 ' 0 null false array() ,如果值为以上的
某一个则返回true
unset()
删除变量,如果删除一个变量,那边变量的值会为null
可以同时删除多个变量
如果在函数中删除变量,那么并不会真正的将全局变量删除
php+
php+中至南通运算符,当出现+时,系统会自动将+号两边的数据转换为数值
所以php中拼接连接符使用
''的特点
不能解析变量,如果在''中包含变量,变量回备当作普通字符串输出支持转义符
如 \ \ \'
echo ' 我的名字 ' \' 叫 $name '
"" 的特点
"" 中可以解析变量
如果在变量后面紧接着其他合法的合法字符(中文,a-z A-Z 0-9)
那么系统会将整个变量及后面的字符串当作一个变量进行解析
如果需要在这种情况下的正确的解析变量,可以将变量包含在{}中
支持的转义符有 \' \\ \n \t \$
explode( 分隔符 分隔的字符串)
分割字符,可以用二维数组保存
数组
1》索引数组
通过索引操作刷组,必须使用count(数组对象)来获取数组的长度
2》关联数组,以键值对的方式来描述数据,类使用js的对象(key:value)没有索引
array($key =>$value)
$arr = array (
'name' = ' 大白' ,
'age' = 18
}
echo $aee [ ' name' ] print_r ( $arr )
3》二维数组
以变量名[ ] = 值的方式创建数组
如果数组不存在就创建数组在添加元素
如果数组存在就在当前的数组中添加元素
遍历foreach
foreach(数组对象 as 键 =>值)
foreach ( $arr as $key => $value)
foreach(数组对象 as 值)
foreach($arr as $value)
双重foreach循环
foreach($arr as $key =>$value)
foreach($value as $skey =>$svalue)
数据类型转换
"" + ""
强制转换,变量前加(类型)
( int) 数字 (array)数组
global
添加外部成员的引用,但不能在引用的同时变量赋值,需换行赋值
但会改变后面调用时的值
超全局变量
一个脚本的全部作用域中都可用
$GLABALS 引用全局作用域的可用变量 $GLABALS [ ' 变量名' ]
$_SERVER 获取服务端的相关信息
$_REQVES 获取提交参数
$_POST 获取post提交参数
$_GET 获取get提交参数
$_FILES 获取上位文件
$_ENV 操作环镜变量
$_COOKIE 操作cookie
$_SESSION 操作session
都是数组
php定义常量
1》定义常量 define('常量名', ' 常量值' )
2》使用常量 echo 常量名
注意:常量名大写
常量名不同使用$
不能改变常量值
php魔术常量
1》_LINE_ 获取当前行
2》_FILE_ 获取文件路径
3》_RIR 获取文件目标
4》_FUNCTION_ 获取当前魔术常量所在的函数
载入文件
1》include 文件载入失败,不会影响后续代码,会重复执行代码
2》include_once 文件载入失败,不会影响后续代码,不会重复执行
3》repuire 文件载入失败,后续代码不会执行,会重复后续代码
4》require_once 文件载入失败,后续代码不会执行,不会重复执行
strlen()
获取指定字符串的长度,但无法正确处理宽字符集(中文,日文...)
会根据宽字符集的编码获取这些字符所占的字节数
GB2312 每个字符占据两个字符 UFT-8 每个字符占据三个字符
_mb-mternal-encoding()
获取php环镜中的默认编码
mb_strlen()
没有设置默认编码就使用php的默认编码
默认不可用,需打开php-ini / extension:php_mbstring.dell 这个应用
时间处理
1》time() 时间戳
得到1970-1-1到当前事件的总毫秒数
2》date()格式化时间
得到当前时间
date( ' Y - m - d H : i : s ' ) 当前的年月日时分秒
3》strtotime()
1970-1-1距小括号里输入的时间的总毫秒
文件的路径
1》file-get-contents
读取文件内容,如果读取成功,就会返回一个字符串类型的值
如果返回的false,就代表读取失败(可以读取任意文件)
2》header(countent-type:image / jpeg)
设置当前页面的返回值的类型时图片模式,意味着后期浏览器接受
了返回值之后,会按照图片模式进行解析
3》file-put-contents( '文件路径' 要写入的内容)[FILE-APPEND]
将指定的内容写入到文件,同时返回当前成功写入的字符的数量
FILE-APPEND 追加文件内容,不会覆盖之前的
GET请求
GET通常用于获取服务端的数据
<form action="xxx.php" method="get"> ..... </form>
<a href="xxx.php?id=8&name=jack&age=18" >文字</a>
1》GET提交数据的格式
index.php?user=jack&password=123
后面的以键值对格式显示
参数名与参数值之间没有空格
中间也不需要单引号和双引号
2》GET提交数据的特点
get方式在url后面拼接参数,只能以文本的形式传递参数
传递的数量小,4kb左右(不同浏览器之间会有差异)
安全性低,会将数据显示在地址栏
速度快,通常用于对安全性要求不要的请求
3》判断,用户是否真正发生GET请求
if( isset($_GET['xxx']) ) { .... }
POST请求
post就是指发生,提交,他可以向指定的资源提交要被处理的数据
$_POST['userName']
1》为什么需要POST请求
GET方式提交数据通过URL传递到请求的页面,提交的数据量一般较小
用于请求页面数据,此外,GET方式就是传递的数据安全性第,对于密码
及隐私信息,文件上传必须使用POST方式提交
要求:如果使用表单方式进行提交,表单的method必须设为post
2》POST提交数据的特点
post方式安全性相对较高
传递数据量大,请求对数据长度没有要求
请求不会被缓存,也不会保存在浏览器历史记录中
用于:密码等安全新要求比较高的场合,提交的数据量比较大:发布文章,上传文件
3》判断有没有某个post数据
if( isset($_POST['xxx']) ) { .... }
判断有没有POST请求
if( $_SERVER['REQUEST_METHOD'] ==="POST") { ..... }
表单
1》action 就是提交的目标地址
2》$_SERVER[ ' PHP_SELF' ]
获取当前文件的路径,可以避免由于文件名称或者路径改变带来的手动修理代码的问题
3》系统会自动的收集当前表单元素的value值但默认情况下值都是on
可以设置value,在数据收集的时候就会将当前的value进行提交
4》复选框的多个值的情况
如果每个值的复选框的名称一样,指挥传递最后一个选项值
可以在value后面添加[] ,系统会默认收集所有复选框的值,储存在一个数据中
5》单个复选框
设置value,在数据收集的时候会将当前的value的值进行提交
6》下拉列表
如果没有设置value属性,那么默认就会传递当前被选择option的innerHTML
如果设置了value属性,就会传递value属性
文件上传
选择文件,将文件数据作为参数传递给服务器
1》接收用户数据
2》服务器会自动将文件存储在临时目录,如果没有后续的操作当程序结束的时候
文件会自动被删除
3》将文件从临时目录移动到文件存放目录这一步时真正的将文件永久性的存储在服务器端
在php中,上传文件的请求方式必须时post
在上传的时候必须在表单设置enctype属性
1》application / x- www - form -urlencoded ( UTF-8 GBK GB2312)
将参数编码为键值对的格式,处理字符串,是系统的默认编码
2》multipart / form-date
用来处理特殊字符,如文件
payload 查看浏览器传送的有效数据
3》在php中,文件上传之后的相关信息都储存在$_FILES中
name => 跨域攻击 png:源文件的名称
type => image/png 源文件的类型
tmp-name => 文件在服务器的临时路径
error = > 0 错误信息 0代表没有错误
size => 256436 文件的大小
4》move-uploaded-file(源文件的全路径,目标文件的全路径)
实现文件的移动,否则文件在程序结束后会被删除
5》!isset($_POST["name"]) || trim($_POST[ " "] === ""
判断用户输入的数据是否有空格或者是否为空
限制图片上传格式的属性
1》在html样式中添加eccept 限制属性 .jpg png .gif
2》php中获取信息中的type属性
3》strpos(源字符串,搜索字符串)
获取指定字符串在源字符串第一次出现的索引
4》strrchr(源字符串,指定搜索的字符)
获取指定搜索的所有字符
5》multiple html骨架中在表单文件中设置
接收多个文件,在name后面加 [ ]
6》implode(分隔符,数组名)
将关联的数据以指定分隔符分隔,转换为字符串
7》设置同时间上传(文件)图片设置不同的(文件)图片名
1)获取FILES的name的信息用变量保存
获取该文件最后一个.子后的所有字符串,包括.的本身,正好就是后缀
把当前的时候很具数值格式设置文件格式
变量名 = time().rand(1000,99999).变量名;
文件
1》refresh(时间,跳转地址)
设置时间跳转文件
2》header("Content-type:appliation / octet-stream")
实现当前页面的自动下载
3》header ( "Content-Dispostion:attachment;filenmane: "名字")
自动下载是设置下载文件的名字
4》getallheaders()
获取请求报文数据
5》parse-url()
截取url的各部分
6》图片防盗链
通过判断请求来源 Referer 是否为本网站从而区分是否是合法请求
请求报文
页面请求到的链接发送到服务端
请求行,球球头,请求体
1》请求方式+空格+请求路径+空格+HTTP协议版本
GET /demo.php HTTP/1.1
2》请求头
客户端想要告诉服务端的一些额外信息
键 值
HOST 请求的主机
Cache-Contrlo 控制缓存(例如:max-age = 60 缓存60秒)
Accept 客户端想要接收的文档类型,逗号分隔
User-Agrnt 标识申明客户端帮你发送的这次请求
Referer 这次请求的来源
Accept-Encoding 可以接受二点压缩编码
Cookie 客户端本地的小票信息
3》请求体
这次请求客户端想要发送给服务端的数据正文,一般在GET很少用到,因为
GET的请求主观上都是去拿东西
相应报文
服务器相应到页面的数据
响应行,响应头,响应体
1》转态行
HTTP/1.1 200 OK
HTTP协议版本+空格+状态码+空格+状态描述
2》响应头
服务端想要告诉客户端的一些额外信息
键 值
Date 响应时间
Server 服务器信息
Content-Type 响应体的内容类型
Content-Length 响应的内容大小
Set-Cookie 让客户端设置一个小票
如果需要在程序中设置自定义的响应头(不是预设的),建议使用 X-<Property-Name> 规则
3》相应体
这次请求服务端想要返回给客户端的数据正文,一般返回的都是HTML,也可以
返回JaveScript或者CSS(需要修改响应头的响应类型)
4》应用场景
设置响应文件类型
header('Content-Type: text/css');
常见的 HTTP MIME type:text/css text/html text/plain applcation/javascript application/json
重定向(跳转到其他网页)
header('Location: https://www.baidu.com');`
GET与POST的区别
1》GET
后退按钮 / 刷新 无害
书签 可收藏为书签
缓存 能被缓存
编码类型 application/x-www-form-urlencoded
历史 参数保留在浏览器历史中
对数据长度的限制 当发送数据时,GET方法向URL田间数据
URL的长度是受限制的(URL的限制是2048个字符
对数据类型的限制 只允许ASCII字符
安全性 与POST相比,GET的安全性较差,因为所发送的数据是URL的
一部分,在发送密码或其他敏感信息是绝不要使用GET
可见性 数据在URL中对所有人都是可见的
2》POST
后退按钮 / 刷新 数据会被重新提交(浏览器应该告知用户数据会被重新提交)
书签 不可收藏为书签
缓存 不能缓存
编码历史 application/x-www-form-urlencoded 或 multipart/form-data。
上传文件必须使用后者。
历史 参数不会保存在浏览器历史中
对数据长度的限制 无限制
对书记类型的限制 没有限制,也允许二进制数据
安全性 POST比GET更安全,因为参数不会被保存在浏览器历史
或WEB服务器日志中
可见性 数据不会显示在URL中(地址栏)
HTTP状态
1》HTTP会话
在计算机术语中,会话是指一个终端用户与交互系统进行通讯的过程。比如:在浏览器
中输入一个网址,单击确认,服务器返回相应的页面,你在页面中执行相应的操作,最后
关闭页面 就是一个会话过程
2》HTTP无状态
客户端访问浏览器多次服务端上无记录
“无状态”是指HTTP协议对于事务的处理没有记忆能力。意味着,协议本身不会在处理事
务的过程中针对【之前】的信息进行存储,如果在处理当前步骤的时候需要【之前】的
信息,则必需重传
3》HTTP状态保持
Cookie
HTTP 很重要的一个特点就是无状态(每一次见面都是“初次见面”),如果单纯的希望通
过我们的服务端程序去记住每一个访问者是不可能的,所以必须借助一些手段或者说技巧
让服务端记住客户端, Cookie就可以实现这种操作。
Cookie 就像是在超级市场买东西拿到的小票,由超市(Server)发给消费者(Browser)
超市方面不用记住每一个消费者的脸,但是他们认识消费者手里的小票(Cookie),可
以通过小票知道消费者之前的一些消费信息(在服务端产生的数据)。
Cookie原理分析
一个Cookie的设置以及发送过程
1》客户端发送一个http请求到服务器端
2》服务器端发送一个http响应到客户端,其中包含Set-Cookie头部
3》客户端发送一个http请求到服务器端,其中包含Cookie头部
4》服务器端发送一个http响应到客户端
语法
setcookie(name[, value, expire, path, domain]);
Cookie常用属性
1》设置Cookie(赋值)
setcookie('cookie名','cookie值')
2》获取Cookie(取值)
$_COOKIE [ ' cookie值 ' ]
3》Cookie有效期
单位为秒,参照时间是php默认时间(1970-1-1)time(秒数)
永久缓存Cookie
PHP-INT-MAX
4》path有效路径
默认是只指在当前文件所在文件夹有效
可以设置为指定的文件夹
setcookie("uName","admin",time()+ 3600,"/upload")
也可以设置为全站有效
设置目录为父级目录,子目录也可以访问
设置目录为子级目录,父级目录不能访问
domain域名
域名:顶级baidu.com
二级域名 www.baidu.com
三级域名apa.music.baidu.com
只有在a.com以及它下面的子域名中才能被访问
setcookie("uName","admin",time()+ 3600,"/","a.com")
5》删除Cookie
设置有效时间为过去时间
将Cookie值设为false值或者空字符串
6》Cookie的缺点
1》COOKIE数据不太安全
2》COOKIE储存的数据类型,只能是字符串
3》COOKIE文件是由容量限制(大约4KB)。4*1024b--> 1个文字大概是2~3b
7》登录等能实现流程
Session
由于 Cookie 是服务端下发给客户端由客户端本地保存的。换而言之客户端可以在
本地 对其随意操作,包括删除和修改。如果客户端随意伪造一个 Cookie 的话,对
于服务端是无法辨别的,就会造成服务端被蒙蔽,构成安全隐患。
于是乎就有了另外一种基于 Cookie 基础之上的手段:Session:
Session 区别于 Cookie 一个很大的地方就是:Session 数据存在了服务端,而 Coo
kie 存在了客户端本地,存在服务端最大的优势就是,不是用户想怎么改就怎么改了。
Session 这种机制会更加适合于存放一些属于用户而又不能让用户修改的数据,因为
客户端不再保存具体的数据,只是保存一把“钥匙”,伪造一把可以用的钥匙,可能性
是极低的,所以不需要在意。
Session的优点
1》SECCION也是一种会话技术
2》SECCION数据存在服务器端,相比于比较安全
3》服务器讲SECCION数据保存在服务器上,而将SESSION的用户id存储在客户端电脑上。
4》SESSION存储的数据类型,除了资源外的数据类型都可以;
5》SESSION文件没有大小限制;
Session原理分析
客户端第一次请求服务器时,服务器开启一个session,生成一个唯一标识(sessionid:
储的数据与此sessionid关联),并以响应头的Set-Cookie属性响应到客户端
客户端的后续请求会一直通过请求头的Cookie属性携带sessionid(客户端与服务器通过
此id维持状态)
Session基本操作
1》php默认在情况下不会开启session,则需要手动的添加代码设置
1》动态的生成一个sessionID
2》在服务器端动态的生成一个用于存放本次对话数据的文件,文件名以sessionID
来构成(相当于是一把钥匙)
3》通过响应头动态的设置cookie,在cookie中存放本次会话所产生的sessionOID
在将来返回
2》设置Session
$_SECCION [ " 名称 " ] = 值
3》读取Session
session_start()
4》删除Session
unset($_SESSION['user']); 删除一个session信息
unset($_SESSION); $_SESSION = [] 删除所有session信息
session_destroy(); 销毁session
5》SESSION于COOKIE的区别
session可以借助cookie实现状态维持,也可以不依赖cookie(URL重写)
区别 COOKIE SESSION
存储位置 浏览器 服务器
浏览器携带的数据量 多 少(只携带session-id)
存储的数据类型 只能是字符串 任意类型
安全性 较低 较高
默认的有效路径 当前路径及其子路径 整站有效
数据的传输量 有限制4K,不能超过20个 无限制
MySAQL
数据库就是数据的仓库,用来按照特定的结构去阻止和管理我们的数据,有了数据我们就可以
更加方便,快捷的操作(C / R / U / D)我们需要保存的数据
不管是什么数据库,最终都是将数据保存到文件(硬盘)中,知识存储的格式不同于文本文件
一个EXcel文件就可以当作是一个数据库
1》数据库管理工具
数据库管理工具本质上就是一个使用数据库服务器软件(Server)提供的服务的数据库客
户端(Client)。
2》命令行工具
一般如果只是简单操作数据库,可以使用 MySQL 内置的命令行工具完成:
进入 MySQL 客户端的 REPL 环境过后,可以通过标准的 SQL 语句操作数据库。
常见的操作指令:
主要用于可视化工具
1》数据库 dateabase
一个数据库服务器中可以建立多个数据库,每个数据库通常用于一个项目或产品
2》表 table
就是用来存储某类数据的行列堆积的表格,一个数据库中可以有多个数据表
一个表由若干个列构成,船舰表就是设定表有拿几个列(字段)
3》行 row
就是一个数据表中可以存储的具体数据,一行一行的,一行数据代表某类数据
的多个数据项,,是js里面一个对象,有多个标示名称(属性名)
4》字段-指的就是列 column field
5》字段类型-指的就是列能够存储的数据种类
int 通常用于数字
char 限定字符串(通常用于电话号码和性别)
varchar 可变的字符串(姓名或其他)
decimal 小数
date 日期 (通常用于生日,或者记录日期)
time 时间(同行用于记录当前时间)
6》查询语句
select 字段列表
from 表列表
where 条件
* 代表当前所有表的字段
not and or 连接关键字,拼接多个查询条件
字符串与日期加单引号
7》增加语句
insert into 表单名 (字段一,字段二...) values (值一,值二)
id设为null,系统会自动生成id号
对于为空的字段可以不赋值null
非null字段需要赋值,否则系统也不会为其生成默认值
8》修改语句
updata 表名 字段一 = 值,字段二= 值, where
修改时必须要有条件
9》删除语句
delete from 表名 where in(多个删除条件)
必须加条件,一旦删除无法恢复,除非有备份
10》where 条件常见语法
where id=5
where name='jack'
where age >= 18
where gender = '男'
where birthday = '2000-1-1'
where age >= 18 and gender = '男'
where year % 4 = 0 && year % 100 <> 0 || year % 400 = 0
where age in (18, 27, 36, 45)
字符串日期必须用单引号引起来
中文命名的列,增加数据的时候不需要用引号
统计
1》count()
查询满足条件的记录数(无法对null进行计算,忽略空值)
括号里写查找的字段
2》max()
获取最大值(以字母编码来计算)
3》min()
获取最小值(以数字编码来计算)
4》avg()
获取平均值,一般是数值
5》order by()
排序
asc 升序 desc 降序
6》limit()
获取指定范围的数据,只有一个参数,相当于获得n条记录
limit n (偏移量,从0开始) m (获取的记录数)
7》as ('自定义名字')
可以在查询到的结果上面新增字段(多用评论)添加在语句的后面
在查找的文本中寻找post_id 查询的条件为id
数据表关联
1》join()on
left join() 左连接,获取左表中的所有数据,如果建立关联的数据中
没有存在,相应的字符没有属于空值
right join()右连接,获取右表中的所有数据,如果建立关联的数据中
没有存在,响应的字符没有属于空值
2》连接数据库
$变量名 = mysqli-connect( ' localhost ', ' root ' , ' root ' , ' 连接的数据库名' )
mysqli_set_charset (' 变量名' , ' utf8' )
3》执行查询语句
$变量名 = mysqli_query ('$连接对象','$ sql语句')
1)新增数据,在执行新增语句的时候,mysqli_query的返回值
如果成功就返回true,错误就false
2)空结果集情况,查询不到内容,返货空结果集,但是返回的类型仍然对象本身
3)非空结果集,查询结果集数据类型为对象类型
4》获取数据的函数
1)mysqli_fetch_row() 提取数据生成数组,返回索引数组
2)mysqli_fetch_assoc() 提取数据生成数组,返回关联数组
3)mysqli_fetch_array() 提取数据生成数组,同时返回索引数组
和关联数组两种
读取时有个特点,但是读完这一行,会自动的将指针移动到下一行
如果没有读取到任何数据,则返回NULL
4)mysqli_error()
输出最近一条sql语句在执行时所产生的错误信息
在输出数据库的数据时,只会获取一行数据,但光标会定位在第二行,
如果没有读取到任何数据,则返回NULL
使用while循环
函数的参数必须为查询结果集
及时关闭资源释放
myspli_close( ''变量名 )
同源
同源策略是浏览器的一些安全策略,域名,协议,端口完全相同
跨域
不同的源侧跨域
不允许进行Dom操作
不允许进行ajax请求
服务端跨域
header("Access-Control-Allow-Origin:* ") 允许制指定域访问
* 代表允许所有其他域向当前域发送请求
JSONP (Jsnp with padding)
利用script src 标签具有可跨域的特性,由服务器返回,一个预定于号的Javascript
函数的调用,并且将服务器数据,以该函数参数的形式传递过来,此方法需要前后端配合
.'('. . ')' 调用
数组要json_encode()转换
XMLHttpKequest 2.0
1》设置超时 xhr.timeout
2》FormDate 表单
提交了一个新的内建对象,可用于管理表单数据
首先获取表单元素 form
然后在实例化时 new FromDate(form)将表单元素form传进去
会返回一个对象,此对象可以直接作为xhr.send(form Date)的参数
此时我们的数据就是以2进制形式传递的
只能以post形式传递,会自动设置一个合适的请求头
3》监听进度条
upload.onprogress
current 为当前加载的数据
total 为全部加载好的数据
current / total * 100 + "%" 得到进度条的结果+
|
|