10.8php续

文件包含:通过一些文件包含的函数将本地挥着远程服务器中文件包含解析到当前中,达到文件读取、代码利用、函数调用等目的

include “文件名” ==include(“文件名”)

include_once

去包含文件时,后者只需要包含一次即可,当找不到要包含的文件,会警告,但后续代码继续执行

require

require_once

包含文件时,后者只需要包含一次即可,当找不到包含的文件时,会直接报错,后续代码不执行

包含过来的文件中,只要文件中代码是标准格式PHP代码就会被解析,如果里面的内容不是PHP代码,就会吧内容显示出来。包含的文件路径写法:可以是相对路径也可是绝对路径

注意:读文件时需要注意当前web服务对应的权限

 

Copy good.png/b+shell.php/a bad.pngwindows本地生成图片木马)

good.png 是一个正常图片 /b表示比特流文件

shell.php这是木马文件或者含有php代码的文件,后缀名不做要求,主要是ascii文件即可,  /a表示ASCII文件

bad.png是生成的图片马

 

会话管理

会话:服务器和用户之间传输数据的方式或者途径,在通道传输数据之前需要建立通道,这个通道可以理解为会话,在客户端通富哦cookie来管理会话,在服务器通过session来管理会话。

Cookiesession区别之前笔记有记录

 

Cookie的管理

首先需要服务器給用户分发cookie数据,setcookienamevalue,表示式,路径,域范围),后三者可以不写,其中表达式主要是用来设置cookie时效性。注意:setcookie需要写在HTML代码前

 

服务器获取cookie$_COOKIE[“cookie的名字”] 注意:需要使用当前打开的浏览器去访问,不能换用其他浏览器

删除cookiesetcookie(“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+aspaspx

Oracle+java

Access+asp

Jsp+oracle

 

数据库模型

关系型数据库(结构化数据库):mysql  mssql  oracle  ab2

非关系型数据库(非结构化数据库):redis  mongodb  nosql  postgresql  Hbase等等

配置mysql的环境变量

管理mysql数据库的方式:

DOS-mysqlmysql -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.15.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  ab均为数字,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;  将查询语句12查询出来的结果放到一张表中显示

他们查询出来的字段个数必须一致,

可以根据语句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:借助平台

方法2mysqldump -uroot -proot 数据库名>./data.sql; 导出整个数据库

mysqldump -uroot -proot 数据库名 表名>./table.sql; 导出某个表

方法3select 字段 from into outfile”文件”;

 

后转10.11

posted @ 2019-10-08 16:17  黑空  阅读(168)  评论(0编辑  收藏  举报