Web---PHP

  1. PHP 学习 PHP 教程 | 菜鸟教程 (runoob.com)

  2. PHP,有两种在浏览器输出文本的基础指令:echo 和 print。

  3. function 关键字是用来定义函数的

  4. echo "
    "; 函数换行

  5. image

  6. global 在 function 函数定义里引用全局变量

  7. PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。

  8. Static 作用域

    当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。

    要做到这一点,请在您第一次声明变量时使用 static 关键字:static $x=0;

  9. array() 创建数组。 eg:cars=array("Volvo","BMW","Toyota"); 则`cars[0]`​=Volvo

  10. PHP 支持以下几种数据类型:

    • String(字符串)
    • Integer(整型)
    • Float(浮点型)
    • Boolean(布尔型)
    • Array(数组)
    • Object(对象)
    • NULL(空值)
    • Resource(资源类型)
  11. var_dump() 函数用于输出变量的相关信息。

    --$x = 5985; int(5985)

    --$b = 3.1; float(3.1)

    --cars=array("Volvo","BMW","Toyota"); var_dump(cars); array(3) { [0]=> string(5) "Volvo" [1]=> string(3) "BMW" [2]=> string(6) "Toyota" }

  12. NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。

  13. var/public/private/protected 定义变量

    --其中 public 可以在全局变量下进行使用

    --private 只能在内部类的选择器中进行使用 不允许子类访问

    --protected 允许子类访问

  14. get_object_vars — 获取指定对象的属性 eg:get_object_vars(object $object​): array

  15. PHP __construct():构造函数/方法

    #创建构造函数的语法格式如下:  
                 public function \_\_construct(参数列表){  
    				... ...  
    						}
    

    #注意:如果显式地声明构造函数,那么它的访问权限必须是 public,而且构造函数是在实例 化时自动调用的,我们不需要手动调用。

  16. get_resource_type() 函数可以返回资源(resource)类型:
    get_resource_type(resource $handle): string

  17. PHP 类型比较

    虽然 PHP 是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对 PHP 变量进行比较,包含松散和严格比较。

    • 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
    • 严格比较:用三个等号 === 比较,除了比较值,也比较类型。

    例如,"42" 是一个字符串而 42 是一个整数。FALSE 是一个布尔值而 "FALSE" 是一个字符串。

  18. Bool 类型 PHP 之 Bool 类型_env bool-CSDN 博客

  19. strlen() 函数返回字符串的长度(字节数)。

    --echo strlen("Hello world!"); ---12

  20. strpos() 函数用于在字符串内查找一个字符或一段指定的文本。

    image

  21. PHP 运算符

    ---- ~x 取反

    ~1=-2;   
    ~0=-1;
    
    <?php
    $x = 2;
    echo ~$x;
    ?>
    

    -3(结果)

    a . b 并置 连接两个字符串 " Hi" . "Ha" HiHa

    ---- 整除运算符 intdiv(),该函数返回值为第一个参数除于第二个参数的值并取整(向下取整)

    PHP 递增/递减运算符

    运算符 名称 描述
    ++ x 预递增 x 加 1,然后返回 x
    x ++ 后递增 返回 x,然后 x 加 1
    -- x 预递减 x 减 1,然后返回 x
    x -- 后递减 返回 x,然后 x 减 1

    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
    (x==6 or y==5) 返回 true
    x xor y 异或 如果 x 和 y 有且仅有一个为 true,则返回 true x=6
    y=3
    (x==6 xor y==3) 返回 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
    (x==5 || y==5) 返回 false
    ! x 如果 x 不为 true,则返回 true x=6
    y=3
    !(x==y) 返回 true

    PHP 数组运算符

    运算符 名称 描述
    x + y 集合 x 和 y 的集合
    x == y 相等 如果 x 和 y 具有相同的键/值对,则返回 true
    x === y 恒等 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true
    x != y 不相等 如果 x 不等于 y,则返回 true
    x <> y 不相等 如果 x 不等于 y,则返回 true
    x !== y 不恒等 如果 x 不等于 y,则返回 true

    组合比较符(PHP7+)

    格式如下:

                \$c \= \$a <\=> \$b;
    

    解析如下:

    • 如果** a > b , 则 $c 的值为 1。
    • 如果 a == b, 则 $c 的值为 0
    • 如果 a &lt;** **b, 则 $c 的值为 -1
  22. date("H") 当前时间

  23. PHP - if...elseif....else 语句

    在若干条件之一成立时执行一个代码块,请使用 if....elseif...else 语句。.

    语法

    if (条件)
    {
        if 条件成立时执行的代码;
    }
    elseif (条件)
    {
        elseif 条件成立时执行的代码;
    }
    else
    {
        条件不成立时执行的代码;
    }
    
  24. PHP Switch 语句

    如果您希望有选择地执行若干代码块之一,请使用 switch 语句。

    语法

    参数说明:

    • expression​ 是要被比较的表达式。
    • case value:​ 是可能的值,如果 expression​ 的值等于某个 case​ 的值,就执行相应的代码块。
    • break;​ 用于终止 switch​ 语句,防止继续执行下一个 case​。
    • default:​ 是可选的,用于指定当没有匹配的 case​ 时执行的代码块。
  25. 获取数组的长度 - count() 函数

    count() 函数用于返回数组的长度(元素的数量):

    实例

    运行返值:3

  26. 遍历关联数组

    遍历并打印关联数组中的所有值,您可以使用 foreach 循环,如下所示:

    实例

    "35","Ben"=>"37","Joe"=>"43"); foreach($age as $x=>$x_value) { echo "Key=" . $x . ", Value=" . $x_value; echo "
    "; } ?>

    运行结果:

    Key=Peter, Value=35
    Key=Ben, Value=37
    Key=Joe, Value=43

  27. foreach 循环

    foreach 循环用于遍历数组。

  28. urldecode 函数
    url 解码是 % + ascii 的十六进制如:
    例一:%25 :25 就是十六进制的 % ,整个解码就是 %
    例二:%61 :61 是十六进制的 a : 整个解码就是 a

  29. id 万能密码

      /?id=' or ''='
    
  30. strpos() 函数

    echo strpos("I love php, I love php too!","php") -----7

    strpos 匹配,若返回位置为 0,不进入 if 语句

  31. image

    字符串与数字进行比较,从前往后一个字符一个字符进行比较,当与被比较者(数字)不一致时,后面字符全部舍去。

    第五个 0*10 的多少次方,科学计数法,前面都是 0 记为 true

  32. PHP extract() 函数

    -实例

    将键值 "Cat"、"Dog" 和 "Horse" 赋值给变量 a、b 和 $c:

    "Cat","b" => "Dog", "c" => "Horse"); extract($my_array); echo "\$a = $a; \$b = $b; \$c = $c"; ?>

    -结果a = Cat; b = Dog; $c = Horse

  33. parse_str() 函数

    -实例

    "; echo $age; ?>

    -结果:Peter
    43

  34. strrev() 函数

    -实例

    -结果:!iahgnahS evol I

  35. str_rot13() 函数

    str_rot13(string): 对字符串执行 ROT13 编码。

  36. ord() 函数

    ord() 函数是 chr() 函数(对于 8 位的 ASCII 字符串)或 unichr() 函数(对于 Unicode 对象)的配对函数,它以一个字符(长度为 1 的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。

    • ord(string): 返回字符串首个字符的 ASCII 值

    语法

    以下是 ord() 方法的语法:

    ord(c)
    

    参数

    • c -- 字符。

    返回值

    返回值是对应的十进制整数。


    实例

    以下展示了使用 ord() 方法的实例:

    ord('a')97>>> ord('b')98>>> ord('c')99

  37. chr() 函数

    • chr(): 从指定的 ASCII 值返回对应的字符

    从不同的 ASCII 值返回字符:

    <?php
    echo chr(61) . "<br>"; // 十进制                    =
    echo chr(061) . "<br>"; // 八进制值                 1
    echo chr(0x61) . "<br>"; // 十六进制值              a
    ?>
    
  38. PHP 序列化和反序列化

    CTF 题目时绕过的方法就是:先序列化字符串,然后使序列化后字符串中属性的个数大于真实对象中属性的个数,即可绕过

    1、序列化
    将一个对象转换为字符串
    2、反序列化
    将一个字符串恢复成对象

    深度剖析 PHP 序列化和反序列化 - 悠悠 uusama - 博客园 (cnblogs.com)

    PHP 序列化与反序列化(__sleep 与__wakeup)_php7.4.33 反序列化 wakeup-CSDN 博客

    $number = 34;
    $str = 'uusama';
    $bool = true;
    $null = NULL;
    $arr = array('a' => 1, 'b' => 2);
    $cc = new CC('uu', true);
    
    var_dump(serialize($number));
    var_dump(serialize($str));
    var_dump(serialize($bool));
    var_dump(serialize($null));
    var_dump(serialize($arr));
    var_dump(serialize($cc));
    

    输出结果为:

    string(5) "i:34;"
    string(13) "s:6:"uusama";"
    string(4) "b:1;"
    string(2) "N;"
    string(30) "a:2:{s:1:"a";i:1;s:1:"b";i:2;}"
    string(52) "O:2:"CC":2:{s:4:"data";s:2:"uu";s:8:" CC pass";b:1;}"
    

    所以序列化对于不同类型得到的字符串格式为:

    • String​ : s:size:value;
    • Integer​ : i:value;
    • Boolean​ : b:value;(保存 1 或 0)
    • Null​ : N;
    • Array​ : a:size:
    • Object​ : O:strlen(object name):object name:object size:
  39. PHP2 是服务器端脚本语言,主要用于处理和生成网页的内容,当用户访问一个网站时,PHP 脚本会在服务器上执行,生成动态的 HTML 页面,然后将页面发送给用户的浏览器进行显示。

    按照这个思路找到 php 脚本的路径,保存在什么文件;

    php 文件源代码通常在 phps 文件

    常见的 PHP 脚本通常是保存在以 .php为扩展名的文件上。这些文件可以存储在 web 服务器的文档根目录中,以便通过浏览器访问和执行;经典的示例文件名:可能是 index.php script.php

    【攻防世界】PHP2_攻防世界 php2-CSDN 博客 url 解码

  40. 执行文件读取功能

    https://www.php.net/manual/zh/wrappers.php.php

    convert.base64-encode 执行 Base64 编码功能~

    /resource=/var/www/html/flag 填写 flag.php 所在的地址,本题在源码的第 5 行有提示地址为 language in /var/www/html/index.php on line ;且需要注意注意源码第 23 行的内容(@include($lan.".php"); ),在上传参数时代码会附带后缀.php,所以此处不需要写为 '/var/www/html/flag.php'~
    https://blog.csdn.net/weixin_42789937/article/details/127956777

  41. lan =** **_COOKIE['language'];

    在 cookie 中的内容 language 会被传到变量[lan](https://so.csdn.net/so/search?q=lan&spm=1001.2101.3001.7020),继而在第23行 **@include(lan.".php");** 被调用与执行,因此 cookie 变量中很适合写入读取 flag.php 的 payload~

  42. PHP isset() 函数

    isset() 函数用于检测变量是否已设置并且非 NULL。

    如果已经使用 unset() 释放了一个变量之后,再通过 isset() 判断将返回 FALSE。

    若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。

    同时要注意的是 null 字符("\0")并不等同于 PHP 的 NULL 常量。

    Web 安全攻防世界 02 fileclude(ctf)_fileinclude 攻防世界-CSDN 博客

  43. PHP intval() 函数

    intval() 函数用于获取变量的整数值。

    intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。

    intval(‘1e5’)就是 10000 ,科学计数法表示的 1e7/8/9 可以满足上述三个条件。

  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    179 引用 • 407 回帖 • 494 关注

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    178 引用 • 997 回帖
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    131 引用 • 795 回帖
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 324 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    62 引用 • 289 回帖 • 2 关注
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 3 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    209 引用 • 2031 回帖
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖 • 4 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 50 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 667 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 438 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 63 关注
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    80 引用 • 439 回帖
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3453 回帖 • 192 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    334 引用 • 323 回帖
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖 • 1 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    5 引用 • 26 回帖 • 529 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    132 引用 • 1114 回帖 • 126 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 3 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 699 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    691 引用 • 535 回帖
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 108 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖 • 3 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 588 回帖 • 4 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    16 引用 • 126 回帖
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 688 关注