-
PHP 学习 PHP 教程 | 菜鸟教程 (runoob.com)
-
PHP,有两种在浏览器输出文本的基础指令:echo 和 print。
-
function 关键字是用来定义函数的
-
echo "
"; 函数换行 -
-
global 在 function 函数定义里引用全局变量
-
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。
-
Static 作用域
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。
要做到这一点,请在您第一次声明变量时使用 static 关键字:static $x=0;
-
array() 创建数组。 eg:cars=array("Volvo","BMW","Toyota"); 则`cars[0]`=Volvo
-
PHP 支持以下几种数据类型:
- String(字符串)
- Integer(整型)
- Float(浮点型)
- Boolean(布尔型)
- Array(数组)
- Object(对象)
- NULL(空值)
- Resource(资源类型)
-
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" }
-
NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。
-
var/public/private/protected 定义变量
--其中 public 可以在全局变量下进行使用
--private 只能在内部类的选择器中进行使用 不允许子类访问
--protected 允许子类访问
-
get_object_vars — 获取指定对象的属性 eg:get_object_vars(object
$object
): array -
PHP __construct():构造函数/方法
#创建构造函数的语法格式如下: public function \_\_construct(参数列表){ ... ... }
#注意:如果显式地声明构造函数,那么它的访问权限必须是 public,而且构造函数是在实例 化时自动调用的,我们不需要手动调用。
-
get_resource_type() 函数可以返回资源(resource)类型:
get_resource_type(resource $handle): string -
PHP 类型比较
虽然 PHP 是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对 PHP 变量进行比较,包含松散和严格比较。
- 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
- 严格比较:用三个等号 === 比较,除了比较值,也比较类型。
例如,"42" 是一个字符串而 42 是一个整数。FALSE 是一个布尔值而 "FALSE" 是一个字符串。
-
Bool 类型 PHP 之 Bool 类型_env bool-CSDN 博客
-
strlen() 函数返回字符串的长度(字节数)。
--echo strlen("Hello world!"); ---12
-
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
-
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) 返回 truex or y 或 如果 x 和 y 至少有一个为 true,则返回 true x=6
y=3
(x==6 or y==5) 返回 truex xor y 异或 如果 x 和 y 有且仅有一个为 true,则返回 true x=6
y=3
(x==6 xor y==3) 返回 falsex && y 与 如果 x 和 y 都为 true,则返回 true x=6
y=3
(x < 10 && y > 1) 返回 truex || 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 <** **b, 则 $c 的值为 -1。
-
date("H") 当前时间
-
PHP - if...elseif....else 语句
在若干条件之一成立时执行一个代码块,请使用 if....elseif...else 语句。.
语法
if (条件) { if 条件成立时执行的代码; } elseif (条件) { elseif 条件成立时执行的代码; } else { 条件不成立时执行的代码; }
-
PHP Switch 语句
如果您希望有选择地执行若干代码块之一,请使用 switch 语句。
语法
参数说明:
-
expression
是要被比较的表达式。 -
case value:
是可能的值,如果expression
的值等于某个case
的值,就执行相应的代码块。 -
break;
用于终止switch
语句,防止继续执行下一个case
。 -
default:
是可选的,用于指定当没有匹配的case
时执行的代码块。
-
-
获取数组的长度 - count() 函数
count() 函数用于返回数组的长度(元素的数量):
实例
运行返值:3
-
遍历关联数组
遍历并打印关联数组中的所有值,您可以使用 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 -
foreach 循环
foreach 循环用于遍历数组。
-
urldecode 函数
url 解码是 % + ascii 的十六进制如:
例一:%25 :25 就是十六进制的 % ,整个解码就是 %
例二:%61 :61 是十六进制的 a : 整个解码就是 a -
id 万能密码
/?id=' or ''='
-
strpos() 函数
echo strpos("I love php, I love php too!","php") -----7
strpos 匹配,若返回位置为 0,不进入 if 语句
-
字符串与数字进行比较,从前往后一个字符一个字符进行比较,当与被比较者(数字)不一致时,后面字符全部舍去。
第五个 0*10 的多少次方,科学计数法,前面都是 0 记为 true
-
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
-
parse_str() 函数
-实例:
"; echo $age; ?>-结果:Peter
43 -
strrev() 函数
-实例:
-结果:!iahgnahS evol I
-
str_rot13() 函数
str_rot13(string): 对字符串执行 ROT13 编码。
-
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
-
chr() 函数
- chr(): 从指定的 ASCII 值返回对应的字符
从不同的 ASCII 值返回字符:
<?php echo chr(61) . "<br>"; // 十进制 = echo chr(061) . "<br>"; // 八进制值 1 echo chr(0x61) . "<br>"; // 十六进制值 a ?>
-
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:
-
-
PHP2 是服务器端脚本语言,主要用于处理和生成网页的内容,当用户访问一个网站时,PHP 脚本会在服务器上执行,生成动态的 HTML 页面,然后将页面发送给用户的浏览器进行显示。
按照这个思路找到 php 脚本的路径,保存在什么文件;
php 文件源代码通常在 phps 文件
常见的 PHP 脚本通常是保存在以
.php
为扩展名的文件上。这些文件可以存储在 web 服务器的文档根目录中,以便通过浏览器访问和执行;经典的示例文件名:可能是 index.php
或script.php
【攻防世界】PHP2_攻防世界 php2-CSDN 博客 url 解码
-
执行文件读取功能
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 -
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~
-
PHP isset() 函数
isset() 函数用于检测变量是否已设置并且非 NULL。
如果已经使用 unset() 释放了一个变量之后,再通过 isset() 判断将返回 FALSE。
若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。
同时要注意的是 null 字符("\0")并不等同于 PHP 的 NULL 常量。
-
PHP intval() 函数
intval() 函数用于获取变量的整数值。
intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。
intval(‘1e5’)就是 10000 ,科学计数法表示的 1e7/8/9 可以满足上述三个条件。
-
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于