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() 函数返回包含数组中所有键名的一个新数组,如果提供了第二个参数,则只返回键值为该值的键名。

    别人都在不停的努力,自己又怎么会停
  • 相关阅读:
    iSCSI又称为IPSAN
    文档类型定义DTD
    HDU 2971 Tower
    HDU 1588 Gauss Fibonacci
    URAL 1005 Stone Pile
    URAL 1003 Parity
    URAL 1002 Phone Numbers
    URAL 1007 Code Words
    HDU 3306 Another kind of Fibonacci
    FZU 1683 纪念SlingShot
  • 原文地址:https://www.cnblogs.com/chenyouxiu/p/14952756.html
Copyright © 2011-2022 走看看