文件包含:通过一些文件包含的函数将本地挥着远程服务器中文件包含解析到当前中,达到文件读取、代码利用、函数调用等目的
include “文件名” ==include(“文件名”)
include_once
去包含文件时,后者只需要包含一次即可,当找不到要包含的文件,会警告,但后续代码继续执行
require
require_once
包含文件时,后者只需要包含一次即可,当找不到包含的文件时,会直接报错,后续代码不执行
包含过来的文件中,只要文件中代码是标准格式PHP代码就会被解析,如果里面的内容不是PHP代码,就会吧内容显示出来。包含的文件路径写法:可以是相对路径也可是绝对路径
注意:读文件时需要注意当前web服务对应的权限
Copy good.png/b+shell.php/a bad.png(windows本地生成图片木马)
good.png 是一个正常图片 /b表示比特流文件
shell.php这是木马文件或者含有php代码的文件,后缀名不做要求,主要是ascii文件即可, /a表示ASCII文件
bad.png是生成的图片马
会话管理
会话:服务器和用户之间传输数据的方式或者途径,在通道传输数据之前需要建立通道,这个通道可以理解为会话,在客户端通富哦cookie来管理会话,在服务器通过session来管理会话。
Cookie与session区别之前笔记有记录
Cookie的管理
首先需要服务器給用户分发cookie数据,setcookie(name,value,表示式,路径,域范围),后三者可以不写,其中表达式主要是用来设置cookie时效性。注意:setcookie需要写在HTML代码前
服务器获取cookie:$_COOKIE[“cookie的名字”] 注意:需要使用当前打开的浏览器去访问,不能换用其他浏览器
删除cookie:setcookie(“loginInfo”,””,time()-3600),通过服务器去删除
Session的管理:
工作机制:为用户创建唯一的uid,在该uid的基础上存储变量,uid放在cookie或者通过URL去传输(相比较而言后者不安全)
在HTML代码之前通过session_start()开启,开启之后可以通过session[]数组(一个超级全局变量)存储某些变量。
销毁session的方式(和session_start()一起使用):unset() session_destory()后者慎用,会清除所有session数据。
文件上传:
通过代码实现上传文件的功能,
explode(标识,字符串) 按标识将字符串分割成数组
explode(“.”,”test.te.png”) ==arrat(“test”,”te”,”png”)
end(数组) 取出数组中最后一个值
in_array($fileendname, $array) 在数组当中匹配要找的内容,如果有则返回true
echo $_FILES["file"]["tmp_name"] 显示临时文件位置
move_uploaded_file(临时文件位置,目标位置) 将文件从临时文件位置移动到目标位置
file_exists()检测文件或者目录是否存在,如果存在则返回true
文件管理:
文件的打开、关闭、读取、写入
fopen(文件位置~文件路径和文件名~:绝对和相对路径,打开文件的方式)
r 只读的方式打开
r+ 读写
w只写,如果不存在文件 则创建
w+ 读写,不存在则创建
a 文件末尾追加,如果不存在,则创建
a+ 读和追加,如果不存在,则创建
fclose(句柄~打开文件对应的句柄~)关闭
feof() 检测是否到达文件的末尾,如果没有到达文件末尾,则返回值为false
fread(打开的文件句柄,读取大小)读取指定大小的文件内容
fgets() 读取单行数据内容,只有一个参数,如果想读取整个文档内容,则需要使用feof+fgets循环读取
比如while (!feof($file)){
echo fgets($file);
}
fgetc() 读取单个字符,如果想读取全部,同上用while循环
file() 将整个文档中数据读取到数组中,一行对应一个单元
file_get_contents() 将整个文档中数据读取到字符串中
file_put_contents(文件名,数据) 写数据,将指定内容写到指定文件中(没有则创建)
basename() 文件名
copy(源,目的) 拷贝
unlink() unset() 删除文件
命令执行函数,通过php中某些函数去执行系统命令,和系统交互,常用的命令执行函数有:
system()
exec()
shell_exec()
echo’whoami’
passthru()等等
代码执行函数,使用PHP的某些函数去执行字符串类型的PHP代码,注意:PHP代码有要求。
eval()
assert()
preg_repalce() 等等
数据库管理
MYSQL 轻量级数据库,适用于中小型企业,性能好,开源
MSSQL 微软开发,需要安装在NT系统中,不支持跨平台,适用于中大型企业
ACCESS 小巧方便,使用与小型企业,小型项目
ORACLE 甲骨文,收费,适用于大型企业,跨平台,性能高,需要良好底层硬件支持
常用框架组合
Mysql+php
Mssql+asp、aspx
Oracle+java
Access+asp
Jsp+oracle
数据库模型
关系型数据库(结构化数据库):mysql mssql oracle ab2
非关系型数据库(非结构化数据库):redis mongodb nosql postgresql Hbase等等
配置mysql的环境变量
管理mysql数据库的方式:
DOS-mysql:mysql -uroot -proot 需要配置mysql的环境变量
phpmyadmin 基于网页的数据库管理平台
mysql-front 开源的C/S模式的数据库管理平台
Navicat 功能强大的数据库管理平台,收费
Mysql数据库结构:数据库名-->数据库表-->表头(字段名)-->数据内容
表中有几个字段就会有几列数据
一行数据称为记录
管理mysql数据库的常用命令:(在DOS-mysql命令需要加分号“;”)
mysql -uroot -p (二进制方式) 退出:exit
show database; 查看所有数据库
use mysql; 使用mysql,表示进入到选中的数据库中了
show tables; 查看当前数据库中所有的表
select*from user; 查看user表下所有的数据内容
select version(); 查看当前数据库版本
information_schema 是5.0以后的mysql自带的,汇总数据库信息
mysql 存放当前数据库信息,如登录信息、权限设置、安全设置
test 测试数据库
修改密码
知道原密码去修改
Step1:进入数据库,mysql -uroot -p
Step2:
低版本(5.0以下、5.1、5.4):
update mysql.user set password=password(‘新密码’) where uesr=’root’ and host=’127.0.0.1’;
flush privileges; 刷新数据库
高版本(5.7 、8.0版本)
use mysql;
alter user “root”@”localhost”identified by “新密码”;
(等同于update mysql.UESR set authentication_string=Password(“新密码”);)
flush privileges;
在mysql系统之外修改的方法(需要原密码 ):
使用mysqladmin(在mysql文件的bin目录下):
mysqladmin -u root -p password”新密码”;
Step3:使用新密码登录测试
忘记密码去修改(linux中):
step1:
关闭mysql服务,修改my.cnf/my.ini
Step2:
打开mysql配置文件,找到mysqld,加上:skip-grant-tables(跳过密码验证),重启mysql服务
Step3:直接免密码登录mysql数据库,利用之前上面的方法修改密码
Step4:修改配置文件,将刚才添加的命令删除或者注释掉,再次重启服务
Step5:使用新密码登录测试
在mysql数据库中添加帐号并授权
添加帐号:
creat user “用户”@”主机IP” identified by “密码”;
主机IP:允许哪个主机可以登录,(localhost本机可登录 ; %任意用户都可登录 ; 192.168.1.1表示该ip上的用户可登录)
添加权限:
grent 权限 on 库名.表名 to “用户名”@”主机IP”
权限:inset增;drop删;update改;select查;all所有权限
库名.表名:表示能够操作的数据库和表, *.*表示所有的数据库以及所有的表
比如grant all on *.*to”用户名”@”192.168.1.1”;
注意:配置中bind 127.0.0.1需要注释掉,或者根据需求进行修改
数据库外联:(允许远程连接)
Update user set host=”%” where user=”root” and host=”localhost”;
Flush privileges;
注意:配置中127.0.0.1需要注释掉
Msql的常用函数 :
version();
select @@version; (后面不加括号) 同上查看版本
user();
select @@hostname; 当前用户名
select @@tmpdir; 查看临时目录
select @@basedir; 数据库服务所在位置
select @@datadir; 数据库数据存放位置
数据库文件格式:
opt:编码
MYD:存储数据,数据内容
frm:存储表结构
MYI:存储当前数据的配置信息和索引信息
mid(被截取的字符串,开始索引,截取的长度); 截取字符串
ord():显示字符的ascii
concat();拼接字符串 concat(“1”,”2”,”3”); ==123
concat_ws(|,多个参数); 以分隔符分割拼接字符串
group_concat();分组并拼接
sleep(1);让数据库等待1s
SQL语法
创建数据库:
create database 数据库名;(交互模式/命令行模式)
Mysqladmin -uroot -proot creat 数据库名;(在DOS命令中,需要使用mysqladmin.exe)(登录账户root 密码root 创建)
删除数据库:
Drop database 名字;
Mysqladmin -uroot -proot drop 名字;
数据库中的数据类型
int整型
biging 大整型
float 浮点型
date 日期
time 时间
char 字符
varchar 变长字符
text 文本
timestamp 时间戳
double 双进度浮点型 3.00
bit 比特
tinyint 0/1
创建表:use 表;
create table 表名(字段名1 数据类型 primary key auto_increment, 字段名2 数据类型......)DEFAULT CHARSET=utf8(设置编码方式); /*primary key 表示为主键、auto_increment 表示自增(看情况使用)* /
表中需要一个大哥作为代表,该代表是唯一的,能够表示某个人、事物,将该大哥称为主键,通过该主键能够确定一个记录
删除表:
drop table 表名;
查看表中字段:show create table 表名;desc 表名;
后续添加主键:
Alter table 表名 add primary key(字段); 注意:主键字段名不能为空
插入数据:
insert into 表名(字段名1,字段名2) value (值1,值2); 注意:自增的主键可以不插入数据
查询数据:
select 字段1,字段2 from 表名;
Select 字段1,字段2 from 表名 where 字段名1=指定的值 and 字段名2=指定的值;
限制查询:
limit a,b (a、b均为数字,a表示记录的索引,b表示记录的长度)
limit a (从0开始选择a个记录)
更新数据:
update 表名 set 字段1=值1,字段2=值2 where条件(同上);
删除表中数据:delete from 表名;
Like字句:
匹配符:% 任意字符 、 _ 单个字符
Select *from 表名 where name like”shijie%”;(模糊查询)
△重点
Union联合查询:
语法:
查询语句1 union 查询语句2; 将查询语句1与2查询出来的结果放到一张表中显示
他们查询出来的字段个数必须一致,
可以根据语句2的字段数量查询语句1的字段数量
△△
Order by的使用
Order by 条件:根据给定的条件排序,默认是升序asc 降序是desc
Select * from order by 字段名 [asc/desc];
Select * from 表 order by 数字; 表示对第n行的数据进行排序,如果数字超过表格的列数,则会报错,可以根据数字来推断表中列数。
△△△
删除字段:
Alter table 表名 drop 字段名;
添加字段:
Alter table 表名 add 字段名 字段类型;
修改表名:
Alter table 原表名 rename to 新表名;
去重查询:
Select DISTINCT 字段 from 表名;
数据的导入和导出
导入:
方法1
Mysql -uroot -proot <需要带入的数据库文件(data.sql)> 注意:data.sql需要自动创建数据库,并且需要选择该数据库,如果data.sql没有自动创建数据库,则要手动创建
Mysql -uroot -proot
Create database 数据库名
Use 数据库名
Source 数据库文件
方法2:
使用phpmyadmin等平台导入数据,如果导入的文件还是不能自己创建数据库,则需要手动创建
方法3:
Mysqlimport -uroot -proot --local 数据库名 数据库文件;
导出数据:
方法1:借助平台
方法2:mysqldump -uroot -proot 数据库名>./data.sql; 导出整个数据库
mysqldump -uroot -proot 数据库名 表名>./table.sql; 导出某个表
方法3:select 字段 from 表 into outfile”文件”;
后转10.11