zoukankan      html  css  js  c++  java
  • php基础知识

    因为dvwa打不下去了,有点看不懂,学习一下php再代码审计

    自己用的是phpstrom和xampp,php版本8

    基本用法

    <?php
    echo"chenyouxiu";
    ?>
    结果会chenyouxiu,也可以添加html元素来改变字体
    

    php每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来。

    php注释有两种

    //
    /*
    ...
    */
    

    变量是用来存储数据的容器

    php变量规则

    变量以$开始,后跟变量名称
    变量名必须以字母或下划线字符开始
    变量名只能含有字母数字字符和下划线
    变量名不能含有空格
    区分大小写(php语句和php变量都区分大小写)
    

    php没有声明变量的命令

    第一次复赋值便被创建

    当赋值给一个文本值时,把文本值两侧加引号。

    全局变量

    可在任何脚本中访问

    函数内声明的是局部变量,尽在函数内访问

    global 关键字用于函数内访问全局变量,访问只需要在函数内调用数外定义的全局变量,在函数中的变量前加global关键字

    也可以用php函数里的数据,$GLOBALS['变量']

    例子

    <?php
    $x=5;
    $y=10;
    
    function myTest()
    {
        $GLOBALS['Z']=$GLOBALS['y']+$GLOBALS['x'];
    }
    
    myTest();
    echo $Z;
    ?>
    
    

    static作用域

    希望某个局域变量不要删除

    第一次声明使用static关键字

    但会保留前一次变量的值

    echo PHP_EOL;
    //是一个空格的
    

    参数作用域

    通过调用代码来将值传递给局部变量。

    <?php
    function my($a)
    {
        echo($a);
    }
    my(4)
        ?>
        //输出4
    

    php的echo和print

    echo可以输出一个或多个

    print只能输出一个,返回值总为1

    echo加不加括号都一样

    echo命令中可以使用html的代码

    <?php
    echo "<h2>chenyouxu<br></h2>";
    echo ”gg“
    ?>
    

    在对函数进行arry的取值,发现没法进行用单引号,所以就按照教程的来用给双引号吧

    EOF的使用说明

    必须后接分号,不然不通过

    eof可以用任意其他字符代替,只需要保证结束标志和开始标志一样。

    结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)

    以 <<<EOF 开始标记开始,以 EOF 结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号

    开始标记和结束标记相同,只要不和其他的冲突命名就行

    位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以

    <?php
    $name="chenyoxiu";
    $a= <<<eof
     <h1>my name is $name</h1>
    
    eof;
    echo $a;
    ?>
    

    php数据类型

    字符串

    dddd

    整形

    必须至少有一个数字

    整数不能包含逗号或空格

    可以正数或负数

    三种进制:

    10、16(0x)、8

    在php文件的var_dump函数返回变量的数据类型和值

    浮点型

    dddd

    布尔型

    通常用于判断条件

    php数组

    $变量名字=arry("","","")
    

    php对象

    对象数据类型也可以用于存储数据,且必须声明。

    类似python

    得先使用class关键字声明类对象,类可以是包含属性和方法的结构。

    phpnull

    null表示没有值,可以通过设置变量值为null来清空变量数据

    php类型比较

    ==比较值

    ===除了值,还有类型

    这个方便看

    img

    img

    php常量

    常量不能开头是数字,不需要美元修饰

    常量任何脚本都可使用

    设置php常量、使用define()函数

    bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
    

    但是在php的8版本中,7.多就废除了对大小写的设定。

    image-20210628220717878

    常量是全局的在默认下,在整个脚本下都可运行

    <?php
    define("name","chenyouxiu");
    function mytest()
    {
        echo name;
    }
    mytest();
    ?>
    

    字符串变量

    用于存储并处理文本

    可直接使用、也可存储在变量中

    PHP 并置运算符

    并置运算符 (.) 用于把两个字符串值连接起来。

    <?php
    $txt="hello";
    $tet=" chenyouxiu";
    echo $txt." ".$tet;
    ?>
    

    strlen

    dddd,空格也算

    strpos

    查找文字,没有返回bool的false

    查找字符串在另一字符串中第一次出现的位置

    按从0开始

    <?php 
    echo strpos("Hello world!","world"); 
    ?>
    //返回6
    

    PHP 运算符

    赋值运算符 = 用于给变量赋值

    算术运算符 + 用于把值加在一起

    主要是取反,相反数

    <?php
    $x=2;
    echo -$x;
    ?>
    

    intdiv()

    函数返回值为第一个参数除于第二个参数的值并取整(向下取整)

    赋值运算符

    dddd

    a.=b就是a=a.b连接两个字符串

    <?php
    $a = "Hello";
    
    $b=$a." world!";
    echo $b;
    $x="<br>baby";
    $x.="chenyouxiu";
    echo $x;
    ?>
    //两个方式
    

    递增/递减运算符

    预递增是在$前,后递增是在$后

    比较运算符

    运算符 名称 描述 实例
    x == y 等于 如果 x 等于 y,则返回 true 5==8 返回 false
    x === y 绝对等于 如果 x 等于 y,且它们类型相同,则返回 true 5==="5" 返回 false
    x != y 不等于 如果 x 不等于 y,则返回 true 5!=8 返回 true
    x <> y 不等于 如果 x 不等于 y,则返回 true 5<>8 返回 true
    x !== y 绝对不等于 如果 x 不等于 y,或它们类型不相同,则返回 true 5!=="5" 返回 true
    x > y 大于 如果 x 大于 y,则返回 true 5>8 返回 false
    x < y 小于 如果 x 小于 y,则返回 true 5<8 返回 true
    x >= y 大于等于 如果 x 大于或者等于 y,则返回 true 5>=8 返回 false
    x <= y 小于等于 如果 x 小于或者等于 y,则返回 true 5<=8 返回 true

    PHP 逻辑运算符

    x and y 如果 x 和 y 都为 true,则返回 true x=6 y=3 (x < 10 and y > 1) 返回 true
    x or y 如果 x 和 y 至少有一个为 true,则返回 true x=6 y=3 (x6 or y5) 返回 true
    x xor y 异或 如果 x 和 y 有且仅有一个为 true,则返回 true x=6 y=3 (x6 xor y3) 返回 false
    x && y 如果 x 和 y 都为 true,则返回 true x=6 y=3 (x < 10 && y > 1) 返回 true
    x || y 如果 x 和 y 至少有一个为 true,则返回 true x=6 y=3 (x5 || y5) 返回 false
    ! x 如果 x 不为 true,则返回 true x=6 y=3 !(x==y) 返回 true

    异或,以前python里是^表示异或的符号,但意义不一样。。。

    <?php
    $x=array("a"=>"red","b"=>"green");
    $y=array("c"=>"bule","d"=>"yellow");
    $z=$x+$y;
    var_dump($z);
    ?>
    /*
    结果
    array(4) { ["a"]=> string(3) "red" ["b"]=> string(5) "green" ["c"]=> string(4) "bule" ["d"]=> string(6) "yellow" }
    */
    

    三元运算符

    ?:

    语法格式

    dddd

    三元多了,从左到右运算’

    php不在通过返回的函数语句中起作用

    return $var == 42 ? $a : $b;
    

    当时ture就是本身,是false就是另一个条件

    可以选择

    aaa?:bbb

    NULL 合并运算符

    expr1 为 null,表达式 (expr1) ?? (expr2) 等同于 expr2,否则为 expr1

    issert()监测是否为空,null合并运算符和issert()一样不会产生警告。

    产生的是表达式结果,不是变量,返回函数引用会出现警告

    该运算符可以镶套

    组合比较符

    $c = $a <=> $b;
    
    • 如果 $a > $b, 则 $c 的值为 1
    • 如果 $a == $b, 则 $c 的值为 0
    • 如果 $a < $b, 则 $c 的值为 -1

    优先级

    优先级: && > = > and

    优先级: || > = > or

    换行不仅可以用<br>
    也可以用
    
    
    if else
    
    if elseif else
    //dddd
    

    switch语句

    有选择的执行代码块之一

    switch()
    {
    
    case 条件:
    
    内容;
    
    break;
    
    case 条件:
    
    内容;
    
    break;
    
    default:
    
    内容
    }
    

    数组

    array() 函数用于创建数组

    数组有三种:

    数值数组:带有数字ID键的数组

    关联数组:带有指定的键的数组,每个键关联一个值

    多维数组:包含一个或多个组的数组

    PHP 数值数组

    自动分配,id键从0开始

    获取数组长度

    count

    遍历数值数组

    遍历并打印数组中的所有值,可以使用for循环

    <?php
    $cars=array("Volvo","BMW","Toyota");
    $arrlength=count($cars);
     
    for($x=0;$x<$arrlength;$x++)
    {
        echo $cars[$x];
        echo "<br>";
    }
    ?>
    
    

    php关联数组

    分配给数组的指定的键的数组

    两种创建关联数组的方法

    $age=arrary("peter"=>"22","dad"=>"44");
    or
    $age["peter"]="35";
    ...
    
    <?php
    $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
    echo "Peter is ".$age["Peter"]. " years old.";
    ?>
    
    

    遍历关联打印

    使用foreach循环

    <?php
    $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
    foreach($age as $x=>$x_value)
    {
        echo "key=".$x.",value=".$x_value;
        echo "<br>";
    }
    ?>
    

    数组排序

    • sort() - 对数组进行升序排列
    • rsort() - 对数组进行降序排列
    • asort() - 根据关联数组的值,对数组进行升序排列
    • ksort() - 根据关联数组的键,对数组进行升序排列
    • arsort() - 根据关联数组的值,对数组进行降序排列
    • krsort() - 根据关联数组的键,对数组进行降序排列

    dddd

    超级全局变量

    $GLOBALS

    在脚本的全部作用域种都可以使用

    <?php
    $x=58;
    $y=15;
    function addition()
    {
        $GLOBALS["z"]=$GLOBALS["x"]+$GLOBALS["y"];
    
    }
    addition();
    echo $z;
    ?>
    // z 是一个$GLOBALS数组中的超级全局变量,该变量同样可以在函数外访问
    

    $_SERVER

    这个数组中的项目由 Web 服务器创建

    $_SERVER['PHP_SELF'] 当前执行的文件相对路径
    $_SERVER['GATEWAY_INTERFACE'] 服务器使用的 CGI 规范的版本;例如,"CGI/1.1"。
    $_SERVER['SERVER_ADDR'] 当前运行脚本所在的服务器的 IP 地址。
    $_SERVER['SERVER_NAME'] 当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。(如: www.runoob.com)
    $_SERVER['SERVER_SOFTWARE'] 服务器标识字符串,在响应请求时的头信息中给出。 (如:Apache/2.2.24)
    $_SERVER['SERVER_PROTOCOL'] 请求页面时通信协议的名称和版本。例如,"HTTP/1.0"。
    $_SERVER['REQUEST_METHOD'] 访问页面使用的请求方法;例如,"GET", "HEAD","POST","PUT"。
    $_SERVER['REQUEST_TIME'] 请求开始时的时间戳。从 PHP 5.1.0 起可用。 (如:1377687496)
    $_SERVER['QUERY_STRING'] query string(查询字符串),如果有的话,通过它进行页面访问。
    $_SERVER['HTTP_ACCEPT'] 当前请求头中 Accept: 项的内容,如果存在的话。
    $_SERVER['HTTP_ACCEPT_CHARSET'] 当前请求头中 Accept-Charset: 项的内容,如果存在的话。例如:"iso-8859-1,*,utf-8"。
    $_SERVER['HTTP_HOST'] 当前请求头中 Host: 项的内容,如果存在的话。
    $_SERVER['HTTP_REFERER'] 引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。)
    $_SERVER['HTTPS'] 如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。
    $_SERVER['REMOTE_ADDR'] 浏览当前页面的用户的 IP 地址。
    $_SERVER['REMOTE_HOST'] 浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR。
    $_SERVER['REMOTE_PORT'] 用户机器上连接到 Web 服务器所使用的端口号。
    $_SERVER['SCRIPT_FILENAME'] 当前执行脚本的绝对路径。
    $_SERVER['SERVER_ADMIN'] 该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。(如:someone@runoob.com)
    $_SERVER['SERVER_PORT'] Web 服务器使用的端口。默认值为 "80"。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。
    $_SERVER['SERVER_SIGNATURE'] 包含了服务器版本和虚拟主机名的字符串。
    $_SERVER['PATH_TRANSLATED'] 当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。
    $_SERVER['SCRIPT_NAME'] 包含当前脚本的路径。这在页面需要指向自己时非常有用。FILE 常量包含当前脚本(例如包含文件)的完整路径和文件名。
    $_SERVER['SCRIPT_URI'] URI 用来指定要访问的页面。例如 "/index.html"。

    $_REQUEST

    用于收集HTML表单提交的数据。

    <html>
    <body>
     
    <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
    Name: <input type="text" name="fname">
    <input type="submit">
    </form>
     
    <?php 
    $name = $_REQUEST['fname']; 
    echo $name; 
    ?>
     
    </body>
    </html>
    //当用户点击submit时,会执行表单的action的指定脚本文件
    

    $_POST

    广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"。

    $_GET

    在HTML form标签的指定该属性:"method="get"。

    循环

    while - 只要指定的条件成立,则循环执行代码块

    do...while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环

    <html>
    
    <?php
    $i=1;
    while($i<=5)
    {
        echo "The number is " . $i . "<br>";
        $i++;
    }
    ?>
    </html>
    

    do。。while

    <html>
    <?php
    $i=1;
    do{
        $i++;
        echo "my baby is".$i."<br>";
    }
    while($i<=5);
    ?>
    </html>
    
    

    for循环

    for (初始值; 条件; 增量)
    {
        要执行的代码;
    }
    //初始值和增量参数可为空,或者有多个表达式(用逗号分隔)。
    

    foreach 循环

    用于遍历数组。

    foreach ($array as $value)
    {
        要执行代码;
    }
    //每进行一次循环,就会将数组的值逐一传递
    
    
    <?php
    $x=array("google","chenyouxiu","dating");
    foreach ($x as $value)
    {
        echo $value.PHP_EOL;
    }
    ?>
    
    foreach ($array as $key => $value)
    {
        要执行代码;
    }
    //每进行一次循环,当前数组元素的键与值就会给$key$value变量,逐一移动,
    
    <?php
    $x=array(1=>"Google", 2=>"Runoob", 3=>"Taobao");
    foreach ($x as $key => $value)
    {
        echo "key  为 " . $key . ",对应的 value 为 ". $value . PHP_EOL;
    }
    ?>
    

    php函数

    创建 PHP 函数

    函数通过调用函数来执行的。

    函数的名称应该提示出对应的功能

    命名应以字母或下划线开头

    <?php
    
    function name()
    {
        echo "chenyouxiu";
    }
    echo "ni hao! ";
    name();
    ?>
    

    PHP 函数 - 添加参数

    <?php
    function writename($name)
    {
        echo $name ." 就这些本事?<br>";
    }
    echo "my name is ";
    writename("chenyouxiu");
    writename("chenyouxiu");
    ?>
    

    两个参数

    <?php
    function writename($nname,$lname)
    {
        echo $nname." renens".$lname."<br>";
    
    }
    writename("chenyouxiu","  jiayou");
    ?>
    

    返回值

    <?php
    function add($x,$y)
    {
        $total=$x+$y;
        return $total;
    }
    echo "1+7=".add(1,7)
    ?>
    

    魔术常量

    离谱的常量

    __LINE__显示行数
    echo "this is ".__LINE__."name";
    __FILE__文件的完整路径和文件名,如果用在被包含文件中,则返回被包含的文件名
    __DIR__文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录
    
    __FUNCTION__看函数名的
    实例
    <?php
    function test() {
        echo  '函数名为:' . __FUNCTION__ ;
    }
    test();
    ?>
    
    __CLASS__看类名的
    __TRAIT__
    
    <?php
    class Base {
        public function sayHello() {
            echo 'Hello ';
        }
    }
     
    trait SayWorld {
        public function sayHello() {
            parent::sayHello();
            echo 'World!';
        }
    }
     
    class MyHelloWorld extends Base {
        use SayWorld;
    }
     
    $o = new MyHelloWorld();
    $o->sayHello();
    ?>
    
    __METHOD__返回该方法被定义时的名字
    __NAMESPACE__当前命名空间的名称(区分大小写)
    

    PHP 命名空间

    必须在其它所有代码之前声明命名空间

    可以在同一个文件中定义不同的命名空间代码

    建议使用大括号形式的语法

    namespace Myproject{
    }
    

    声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句

    所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前

    也不可出现html

    也可分层

    namespace MyProjectSubLevel; 
    

    面向对象

    变量 $this 代表自身的对象。

    先定义类---创建对象---调用函数,设置内容----调用函数,获取内容

    <?php 
    class Site { 
     /* 成员变量 */ 
     var $url; 
     var $title; 
    
     /* 成员函数 */ 
     function setUrl($par){ 
       $this->url = $par; 
     } 
    
     function getUrl(){ 
       echo $this->url; 
     } 
    
     function setTitle($par){ 
       $this->title = $par; 
     } 
    
     function getTitle(){ 
       echo $this->title; 
     } 
    } 
    //创建对象
    $runoob = new Site; 
    $taobao = new Site; 
    $google = new Site; 
    
    // 调用成员函数,设置标题和URL 
    $runoob->setTitle( "菜鸟教程" ); 
    $taobao->setTitle( "淘宝" ); 
    $google->setTitle( "Google 搜索" ); 
    
    $runoob->setUrl( 'www.runoob.com' ); 
    $taobao->setUrl( 'www.taobao.com' ); 
    $google->setUrl( 'www.google.com' ); 
    
    // 调用成员函数,获取标题和URL 
    $runoob->getTitle(); 
    $taobao->getTitle(); 
    $google->getTitle(); 
    
    $runoob->getUrl(); 
    $taobao->getUrl(); 
    $google->getUrl(); 
    ?>
    

    构造函数

    function __construct( $par1, $par2 ) {
       $this->url = $par1;
       $this->title = $par2;
    }
    //然后赋值可以一块赋值,
    $runoob = new Site('www.runoob.com', '菜鸟教程'); 
    $runoob->getTitle(); 
    $runoob->getUrl(); 
    

    继承

    使用关键字 extends 来继承一个类,PHP 不支持多继承

    class Child extends Parent {
       // 代码部分
    }
    <?php
    class Child_Site extends Site(){
    var $category;
    function setchile($par){
    $this->$category=$par;
    }
    function getchile(){
    echo $this->category;
    }
    }
    ?>
    

    访问控制

    PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。

    • public(公有):公有的类成员可以在任何地方被访问。
    • protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
    • private(私有):私有的类成员则只能被其定义所在的类访问。

    类属性必须定义为公有,受保护,私有之一。如果用 var 定义,则被视为公有

    类中的方法可以被定义为公有,私有或受保护。如果没有设置这些关键字,则该方法默认为公有

    emmm

    做题

    函数体内引用全局变量,必须在函数内部使用“global”关键字
    <?php
    $a = 1;
    function Test()
    {
        echo "a = $a";
    }
    Test();
    ?>
    
    <?php
    $a = 1;
    function Test()
    {
         echo $GLOBALS["x"]=$GLOBALS["a"];
    }
    Test();
    ?>
    

    在 PHP 中,不区分大小写的关键字 NULL 用于没有定义值的情况。

    声明常量使用关键字 define

    <?php
    $a = array(
        'a',
        3 => 'b',
        1 => 'c',
        'd'
    );
    ?>
    d’ 的值为最大的整数索引+1。
    

    空数组转化为 null

    <?php
    if ('2' == '02') {
        echo 'true';
    } else {
        echo 'false';
    }
    ?>
    //数值字符串作为整数进行比较。所以对。。。。。
    
    <?php
    $a = array(
        null => 'a',
        true => 'b',
        false => 'c',
        0 => 'd',
        1 => 'e',
        '' => 'f'
    );
    echo count($a), "
    ";
    ?>
    就3,键名将被这样转换:null 转为(空字符串),true 转为 1,false 转为 0。
    

    PHP 变量只有一个作用域(函数中除外)

    一个类只能继承一个基类

    headers_list() 函数返回已发送的(或待发送的)响应头部的一个列表,如需确定是否已发送报头,使用 headers_sent() 函数。

    include 文件时,对引入的文件个数没有限制,使用 include_once 则只引入一次文件。

    array_keys() 函数返回包含数组中所有键名的一个新数组,如果提供了第二个参数,则只返回键值为该值的键名。

    别人都在不停的努力,自己又怎么会停
  • 相关阅读:
    Go基础数据类型
    在foreach中使用distinct查找不重复记录
    DataTable,List去重复记录的方法(转载)
    ArcEngine的IMap接口(转载)
    根据Excel表格建立Shp文件(开发详解及源代码)(转载)
    axmapcontrol和mapcontrol有什么区别呢(转发)
    DataSet多表查询操作(转载)
    c#调用DLL(转载)
    wall 系列技术贴
    ArcEngine的IFeaturLayer接口(转载)
  • 原文地址:https://www.cnblogs.com/chenyouxiu/p/14952756.html
Copyright © 2011-2022 走看看