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 :不允许通过include、require等函数包含远程 URL 文件。
  • arg_separator.input: "&"指定了在 PHP 中解析输入变量时使用的参数分隔符。
  • arg_separator.output:&,用于设置输出变量时的参数分隔符。
  • auto_append_file:这表示每个 PHP 脚本执行结束后,会自动包含名为 "d0g3_f1ag.php" 的文件。【这个用的好像还挺多的】
  • auto_globals_jit:本地值和主值均为 "On",开启了自动全局变量即时编译功能。
相关推荐
文丑颜不良啊几秒前
LeetCode1481~1500题目解析
java·leetcode
2601_962885722 分钟前
quotes 字段全解:涨跌幅、振幅、换手率的口径与单位
java·前端·spring
前端精髓27 分钟前
调用openrouter的免费API模型
java·前端·javascript
步行cgn44 分钟前
Spring MVC 拦截器 Interceptor 详解:从执行流程到实战应用
java·spring·mvc
文丑颜不良啊1 小时前
LeetCode1381~1400题目解析
java·leetcode
开开心心_Every1 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
Nuanyt1 小时前
Agent 学习笔记(下篇三):上线工程、进阶选择与操作界面(Stage 7 / 7.5 / 8 + 延伸路线)
笔记·python·学习·memory·aiagent·harness
萧瑟余晖2 小时前
Spring Batch核心模型与快速上手详解
java·spring·batch
缓慢更新2 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
叼烟扛炮3 小时前
Linux 学习笔记(四十一):TCP 并发演进——从单进程到多线程服务器
linux·运维·服务器·网络·笔记·学习·tcp/ip