CTF 代码学习日记 PHP

基础

2字符串连接可以使用点号(.

3._:在 PHP 中,以`_开头的变量(如_GET`、`_POST$_COOKIE等)是超级全局变量。超级全局变量的特点是它们在 PHP 脚本的任何地方(包括函数内部、类内部等)都可以访问,不需要使用global`关键字来声明其可访问性。这些变量主要用于获取来自不同数据源的用户输入或者服务器环境相关信息。

例如:$_SERVER

  • 用途 :包含了服务器和执行环境相关的信息。例如,$_SERVER['SERVER_NAME']可以获取服务器的名称,$_SERVER['REQUEST_METHOD']可以获取当前请求的方法(如 GET、POST 等),$_SERVER['REMOTE_ADDR']可以获取客户端(用户)的 IP 地址。

$_GET:从GET变量中获取name和age的值

php 复制代码
$name = $_GET['name'];
$age = $_GET['age'];

$_POST : 使用下面语句来获取利用POST方法提交的表单数据

php 复制代码
$username = $_POST['username'];
$password = $_POST['password'];

4.@的用法:

错误抑制运算符

在 PHP 中,@是错误抑制运算符。它用于抑制表达式可能产生的错误信息。当在一个表达式之前放置@时,PHP 会隐藏这个表达式执行过程中产生的大多数错误信息(包括警告、通知和错误),使得脚本能够继续执行,而不会因为这些错误而中断。

使用场景

当调用一个可能会产生错误的函数时,也可以使用@来抑制错误。比如,在使用mysql_connect(旧的 MySQL 函数,不推荐使用,但用于示例)连接数据库时,如果数据库服务器不可用或者连接参数错误,会产生错误信息。

php 复制代码
<?php
$conn = @mysql_connect("wrong_host", "user", "password");
if ($conn) {
    // 连接成功后的操作
    mysql_close($conn);
} else {
    // 连接失败后的操作,没有显示错误信息
    echo "数据库连接失败。";
}
?>

这里使用@抑制了mysql_connect函数可能产生的错误信息,同样可以通过检查$conn的值来判断连接是否成功,然后进行后续操作。

无法抑制所有错误@并不能抑制所有类型的错误。例如,语法错误、致命错误(如内存耗尽等)和解析错误等是无法被@抑制的,因为这些错误会导致 PHP 脚本在执行到这些错误点之前就无法正常解析或者运行。

file_put_contents

1.file_put_contents("./upload".this-\>filename,this->content)

实现文件写入,将content内容写入路径为./upload文件名为filename的文件

路径特殊符号

./ 表示当前目录(相对路径表示方式)-----如果在命令行中执行 ./program.exe,意味着要在当前目录下查找并运行名为 program.exe 的可执行文件。

.. 表示上级目录(相对路径)-----若当前目录是 /home/user/documents,要访问 documents 的上级目录 user 中的某个文件,可以使用 ../file.txt

~ 表示当前用户的主目录-----~/.bashrc表示当前用户主目录下的隐藏文件.bashrc。在命令行中,用户可以直接使用~来进入自己的主目录,而不需要输入完整的路径。

关于phpinfo

做题的时候总是要查看phpinfo里头的内容,每次都不知所云,还是整理一下吧

什么叫本地值和主值:

主值就是全局默认的值,一般在php.ini里面设置,如果没有本地值就默认是主值,本地值就只能适用当前的目录或者文件

这里是php的核心配置:

  • allow_url_fopen :允许使用类似fopen()函数打开 URL 形式的文件路径。
  • allow_url_include :不允许通过includerequire等函数包含远程 URL 文件。
  • arg_separator.input: "&"指定了在 PHP 中解析输入变量时使用的参数分隔符。
  • arg_separator.output:&,用于设置输出变量时的参数分隔符。
  • auto_append_file:这表示每个 PHP 脚本执行结束后,会自动包含名为 "d0g3_f1ag.php" 的文件。【这个用的好像还挺多的】
  • auto_globals_jit:本地值和主值均为 "On",开启了自动全局变量即时编译功能。
相关推荐
天天摸鱼的java工程师8 分钟前
Snowflake 雪花算法优缺点(Java老司机实战总结)
java·后端·面试
Miraitowa_cheems36 分钟前
LeetCode算法日记 - Day 11: 寻找峰值、山脉数组的峰顶索引
java·算法·leetcode
檀越剑指大厂40 分钟前
【Linux系列】如何在 Linux 服务器上快速获取公网
linux·服务器·php
海梨花41 分钟前
【从零开始学习Redis】项目实战-黑马点评D2
java·数据库·redis·后端·缓存
共享家952742 分钟前
linux-高级IO(上)
java·linux·服务器
橘子郡1231 小时前
观察者模式和发布订阅模式对比,Java示例
java
指针满天飞1 小时前
Collections.synchronizedList是如何将List变为线程安全的
java·数据结构·list
Java技术小馆1 小时前
重构 Controller 的 7 个黄金法则
java·后端·面试
金銀銅鐵1 小时前
[Java] 以 IntStream 为例,浅析 Stream 的实现
java·后端
丑小鸭是白天鹅1 小时前
嵌入式C语言学习笔记之枚举、联合体
c语言·笔记·学习