4_PHP基础学习笔记(Web安全方向)

PHP基础学习笔记(Web安全方向)

目录

  1. PHP概述与基础语法
  2. 变量与数据类型
  3. 常量与预定义常量
  4. 运算符
  5. 控制流程语句
  6. 数组
  7. 函数
  8. 变量作用域
  9. 面向对象编程(OOP)
  10. 超级全局变量
  11. 文件包含(Include/Require)
  12. 文件与目录操作
  13. 命名空间
  14. 正则表达式
  15. PHP与MySQL交互
  16. 附录:常用函数速查

1. PHP概述与基础语法

1.1 PHP简介

PHP(Hypertext Preprocessor,超文本预处理器)是一种通用开源脚本语言,主要在服务器端执行。

PHP文件特点

  • 可包含文本、HTML、JavaScript代码和PHP代码
  • PHP代码在服务器上执行,结果以纯HTML返回浏览器
  • 默认文件扩展名为 .php

PHP主要用途

功能 说明
生成动态页面 根据用户请求生成不同内容
文件操作 创建、读取、写入、关闭服务器文件
表单处理 收集并处理表单提交的数据
Cookie/Session 发送和接收Cookies,管理会话
数据库交互 增删改查数据库中的数据
访问控制 限制用户对页面的访问
数据加密 支持多种加密方式

1.2 基本语法格式

PHP代码标记

<?php
    // PHP代码写在这里
?>

注释方式

// 单行注释(C++风格)

# 单行注释(Shell风格)

/*
   多行注释
   (C语言风格)
*/

2. 变量与数据类型

2.1 变量命名规则

  • $ 符号开头,后跟变量名
  • 变量名必须以字母或下划线开头
  • 只能包含字母、数字、下划线(A-z、0-9、_)
  • 变量名不能包含空格
  • 区分大小写
$name = "暗月";      // 合法
$_age = 25;          // 合法
$123abc = "test";    // 非法(数字开头)
$user-name = "test"; // 非法(包含连字符)

2.2 八大数据类型

数据类型 说明 示例
String(字符串) 文本数据 "hello"
Integer(整型) 整数 123
Float(浮点型) 小数 3.14
Boolean(布尔型) true/false true
Array(数组) 多个值的集合 array(1,2,3)
Object(对象) 类的实例 new User()
NULL(空值) 无值 null
Resource(资源) 外部资源(文件、数据库连接等) fopen()
<?php
$a = "字符串类型";
$b = 1234;           // 整型
$c = -3.1415;        // 浮点型
$d = 8E-3;           // 科学计数法
$e = true;           // 布尔型
$f = array("A","B","C"); // 数组
$g = NULL;           // 空值

// var_dump() 查看变量类型和值
var_dump($a);
var_dump($b);
?>

2.3 整型进制表示

$a = 120;      // 十进制
$a = 0b110;    // 二进制
$a = 0120;     // 八进制
$a = 0x120;    // 十六进制

// 进制转换函数
decbin(10);    // 十进制转二进制
decoct(10);    // 十进制转八进制
dechex(10);    // 十进制转十六进制
bindec('1010');// 二进制转十进制

2.4 字符串

<?php
$name = '暗月';

// 双引号:解析变量
$str1 = "这是 $name 的全栈渗透测试培训";
// 输出:这是 暗月 的全栈渗透测试培训

// 单引号:不解析变量,原样输出
$str2 = '这是 $name 的全栈渗透测试培训';
// 输出:这是 $name 的全栈渗透测试培训

// 字符串连接(并置运算符 .)
echo $str1 . " " . $str2;

// 字符串函数示例
echo strlen($str1);          // 获取长度
echo strpos($str1, "渗透");   // 查找子串位置
echo md5("123456");          // MD5加密
?>

字符串截取注意事项(中文UTF-8)

// 普通方式截取中文会乱码
for($i=0; $i<strlen($str); $i++) {
    echo $str[$i]; // 乱码
}

// 使用正则分割处理中文
function mb_str_split($string) {
    return preg_split('/(?<!\^)(?!$)/u', $string);
}

foreach(mb_str_split($str) as $c) {
    echo $c; // 正常输出中文
}

3. 常量与预定义常量

3.1 自定义常量

// define(常量名, 常量值, 是否大小写不敏感)
define("SITE_NAME", "暗月安全培训", true);

echo SITE_NAME;    // 输出:暗月安全培训
echo site_name;    // true时也输出:暗月安全培训

3.2 常用预定义常量

常量 说明 示例输出
__FILE__ 当前脚本的完整路径和文件名 /var/www/index.php
__LINE__ 当前行号 10
PHP_VERSION PHP版本号 7.4.33
PHP_OS 操作系统类型 Linux
DIRECTORY_SEPARATOR 目录分隔符 /\
TRUE / FALSE 布尔真/假
NULL 空值
<?php
echo __FILE__;                    // 当前文件路径
echo __LINE__;                    // 当前行号
echo PHP_VERSION;                 // PHP版本
echo PHP_OS;                      // 操作系统
echo DIRECTORY_SEPARATOR;         // 目录分隔符
?>

4. 运算符

4.1 算术运算符

运算符 说明 示例
+ 加法 $a + $b
- 减法 $a - $b
* 乘法 $a * $b
/ 除法 $a / $b
% 取余(模运算) $a % $b

4.2 赋值运算符

运算符 等价于 说明
= 赋值
+= $a = $a + $b 加后赋值
-= $a = $a - $b 减后赋值
*= $a = $a * $b 乘后赋值
/= $a = $a / $b 除后赋值
.= $a = $a . $b 字符串连接赋值

4.3 递增/递减运算符

运算符 说明 示例
++$a 先加1,再返回
$a++ 先返回,再加1
--$a 先减1,再返回
$a-- 先返回,再减1

4.4 比较运算符

运算符 说明 示例
== 等于(值相等) $a == $b
=== 全等(值和类型都相等) $a === $b
!= / <> 不等于 $a != $b
!== 不全等 $a !== $b
> 大于 $a > $b
< 小于 $a < $b
>= 大于等于 $a >= $b
<= 小于等于 $a <= $b

4.5 逻辑运算符

运算符 说明 示例
and / && 逻辑与(都真才真) $a && $b
or / ` `
! 逻辑非(取反) !$a
xor 逻辑异或(一真一假才真) $a xor $b

4.6 三元运算符

// 语法:(条件) ? (真时值) : (假时值)
$result = ($age >= 18) ? "成年" : "未成年";

5. 控制流程语句

5.1 条件控制

if...elseif...else

if ($score >= 90) {
    echo "优秀";
} elseif ($score >= 60) {
    echo "及格";
} else {
    echo "不及格";
}

switch语句

switch ($day) {
    case 1:
        echo "星期一";
        break;
    case 2:
        echo "星期二";
        break;
    default:
        echo "未知";
}

5.2 循环控制

while循环

$i = 1;
while ($i <= 10) {
    echo $i;
    $i++;
}

do...while循环

$i = 1;
do {
    echo $i;
    $i++;
} while ($i <= 10);

for循环

for ($i = 1; $i <= 10; $i++) {
    echo $i;
}

foreach循环(专门用于数组):

$arr = array("a", "b", "c");
foreach ($arr as $value) {
    echo $value;
}

$age = array("Peter"=>"35", "Ben"=>"37");
foreach ($age as $key => $value) {
    echo "Key=" . $key . ", Value=" . $value;
}

break与continue

  • break:终止当前循环
  • continue:跳过本次循环,继续下一次

6. 数组

6.1 数组类型

类型 说明 示例
数值数组 数字索引(从0开始) $arr = array("Volvo","BMW")
关联数组 字符串键名 $age = array("Peter"=>"35","Ben"=>"37")
多维数组 包含一个或多个数组 $arr = array(array(1,2), array(3,4))

6.2 数组操作

// 创建数组
$cars = array("Volvo", "BMW", "Toyota");
$age = array("Peter"=>"35", "Ben"=>"37");

// 获取长度
echo count($cars);

// 访问元素
echo $cars[0];            // Volvo
echo $age["Peter"];       // 35

// 添加元素(尾部)
array_push($cars, "Honda");
$cars[] = "Honda";        // 同样效果

// 添加关联元素
$age["Tony"] = "40";

// 删除元素
unset($cars[1]);          // 删除索引1的元素

// 合并数组
$result = array_merge($cars, $age);

// 插入到指定位置
array_splice($array1, 3, 0, $array2); // 位置3插入$array2

6.3 数组排序函数

函数 说明
sort() 升序排序(值)
rsort() 降序排序(值)
asort() 升序排序(保留键值关联)
ksort() 按键名升序排序
arsort() 降序排序(保留键值关联)
krsort() 按键名降序排序

6.4 常用数组函数

函数 说明
is_array($arr) 判断是否为数组
count($arr) 返回元素个数
array_search($value, $arr) 搜索值,返回键名
array_key_exists($key, $arr) 检查键名是否存在
array_unique($arr) 去除重复值
in_array($value, $arr) 检查值是否存在
array_shift($arr) 移除第一个元素并返回
array_unshift($arr, $val) 在开头插入元素
array_pop($arr) 弹出最后一个元素
array_push($arr, $val) 在末尾插入元素

7. 函数

7.1 函数定义与调用

// 定义函数
function sayHi() {
    echo "Hello world!";
}

// 调用函数
sayHi();

7.2 带参数的函数

function familyName($fname, $year = 2000) {
    echo "$fname Zhang, born in $year<br>";
}

familyName("Li");     // 使用默认$year
familyName("Hong", 1995);

7.3 返回值

function sum($x, $y) {
    return $x + $y;
}
echo sum(5, 10); // 15

7.4 匿名函数

// 匿名函数赋值给变量
$greet = function($name) {
    return "Hello, $name";
};
echo $greet('moonsec'); // Hello, moonsec

7.5 回调函数

// 使用 call_user_func_array 调用回调
function Speak($a, $b) {
    echo "He can speak $a, She can speak $b";
}

function Speak_Test() {
    return call_user_func_array('Speak', array('Chinese', 'English'));
}
Speak_Test();

8. 变量作用域

8.1 三种作用域

作用域 说明
local(局部) 函数内部声明的变量,仅函数内可见
global(全局) 函数外部声明的变量,仅函数外可见
static(静态) 函数执行完后不销毁,保留值
$x = 5;  // 全局变量

function myTest() {
    $y = 10;  // 局部变量
    // echo $x; // 错误!无法访问全局变量
}

8.2 global关键字

$x = 5;
$y = 10;

function myTest() {
    global $x, $y;   // 声明使用全局变量
    $y = $x + $y;
}
myTest();
echo $y; // 15

8.3 $GLOBALS数组

$x = 5;
$y = 10;

function myTest() {
    $GLOBALS['y'] = $GLOBALS['x'] + $GLOBALS['y'];
}
myTest();
echo $y; // 15

8.4 static静态变量

function myTest() {
    static $x = 0;   // 首次调用初始化,之后保留值
    echo $x;
    $x++;
}
myTest(); // 0
myTest(); // 1
myTest(); // 2

9. 面向对象编程(OOP)

9.1 类与对象

class Site {
    // 成员变量(属性)
    var $url;
    var $title;

    // 成员函数(方法)
    function setUrl($par) {
        $this->url = $par;   // $this 代表当前对象
    }

    function getUrl() {
        echo $this->url;
    }
}

// 实例化对象
$site = new Site();
$site->setUrl('www.moonsec.com');
$site->getUrl();

9.2 构造函数(__construct)

class Site {
    var $url;
    var $title;

    // 构造函数:对象创建时自动执行
    function __construct($par1, $par2) {
        $this->url = $par1;
        $this->title = $par2;
    }

    function getUrl() {
        echo $this->url;
    }
}

$site = new Site('www.moonsec.com', '暗月安全培训');

9.3 析构函数(__destruct)

class MyClass {
    function __construct() {
        print "对象创建\n";
    }

    function __destruct() {
        print "对象销毁\n";
    }
}

$obj = new MyClass(); // 输出:对象创建
// 脚本结束自动输出:对象销毁

9.4 继承(extends)

class Child_Site extends Site {
    var $category;

    function setCate($par) {
        $this->category = $par;
    }

    function getCate() {
        echo $this->category;
    }

    // 方法重写(覆盖父类方法)
    function getUrl() {
        echo "URL: " . $this->url;
    }
}

9.5 访问控制(可见性)

关键字 访问范围
public 任何地方均可访问
protected 自身、父类、子类可访问
private 仅定义该属性的类自身可访问
class MyClass {
    public $public = 'Public';
    protected $protected = 'Protected';
    private $private = 'Private';

    function printHello() {
        echo $this->public;     // OK
        echo $this->protected;  // OK
        echo $this->private;    // OK(类内部可访问)
    }
}

$obj = new MyClass();
echo $obj->public;    // OK
// echo $obj->protected; // 错误(类外部不可访问)
// echo $obj->private;   // 错误

9.6 接口(interface)

interface iTemplate {
    public function setVariable($name, $var);
    public function getHtml($template);
}

// 实现接口
class Template implements iTemplate {
    private $vars = array();

    public function setVariable($name, $var) {
        $this->vars[$name] = $var;
    }

    public function getHtml($template) {
        // 实现代码
    }
}

9.7 抽象类(abstract)

abstract class Animal {
    abstract protected function makeSound();
    abstract protected function move($speed);

    public function sleep() {
        echo "Sleeping...";
    }
}

class Dog extends Animal {
    protected function makeSound() {
        echo "Bark!";
    }

    public function move($speed) {
        echo "Running at $speed km/h";
    }
}

9.8 Static(静态)关键字

class Foo {
    public static $my_static = 'foo';

    public function staticValue() {
        return self::$my_static;
    }
}

// 无需实例化直接访问
echo Foo::$my_static; // foo

$foo = new Foo();
echo $foo->staticValue(); // foo

9.9 Final 关键字

class BaseClass {
    final public function moreTesting() {
        // 此方法不能被子类重写
    }
}

// 错误:不能重写 final 方法
class ChildClass extends BaseClass {
    public function moreTesting() {
        // Fatal error
    }
}

9.10 调用父类构造函数

class SubClass extends BaseClass {
    function __construct() {
        parent::__construct();  // 必须手动调用
        print "SubClass 构造方法";
    }
}

10. 超级全局变量

变量 说明
$GLOBALS 所有全局变量的数组
$_SERVER 服务器和执行环境信息
$_REQUEST 收集GET、POST、COOKIE数据
$_POST 收集POST提交的数据
$_GET 收集GET提交的数据
$_FILES 文件上传信息
$_ENV 环境变量
$_COOKIE Cookie数据
$_SESSION Session数据
<?php
// 获取服务器信息
echo $_SERVER['PHP_SELF'];   // 当前脚本文件名
echo $_SERVER['SERVER_NAME']; // 服务器主机名
echo $_SERVER['HTTP_HOST'];   // 请求的Host头
echo $_SERVER['REMOTE_ADDR']; // 客户端IP
echo $_SERVER['REQUEST_METHOD']; // 请求方法(GET/POST)
?>

11. 文件包含(Include/Require)

11.1 include vs require

语句 文件不存在时
include 产生警告(E_WARNING),脚本继续执行
require 产生致命错误(E_COMPILE_ERROR),脚本停止
include 'header.php';
require 'config.php';

11.2 include_once / require_once

确保文件只被包含一次(避免重复定义函数/类错误)。

include_once 'config.php';
require_once 'functions.php';

12. 文件与目录操作

12.1 文件读取

// 读取整个文件(直接输出)
readfile("webdictionary.txt");

// 打开文件
$myfile = fopen("webdictionary.txt", "r") or die("无法打开文件!");

// 读取全部内容
echo fread($myfile, filesize("webdictionary.txt"));

// 读取单行
echo fgets($myfile);

// 读取单个字符
echo fgetc($myfile);

// 检查文件末尾
while(!feof($myfile)) {
    echo fgets($myfile);
}

// 关闭文件
fclose($myfile);

12.2 文件打开模式

模式 说明
r 只读,指针在文件开头
r+ 读写,指针在文件开头
w 只写,清空内容,指针在开头(文件不存在则创建)
w+ 读写,清空内容
a 只写,追加到末尾(文件不存在则创建)
a+ 读写,追加到末尾

12.3 文件写入

$myfile = fopen("newfile.txt", "w") or die("无法打开文件!");
$txt = "Hello World!\n";
fwrite($myfile, $txt);
fclose($myfile);

12.4 文件复制、重命名、删除

copy("source.txt", "dest.txt");   // 复制
rename("old.txt", "new.txt");     // 重命名/移动
unlink("file.txt");               // 删除

12.5 文件判断

file_exists("test.txt");   // 文件是否存在
is_file("test.txt");       // 是否为文件
is_dir("test");            // 是否为目录
is_readable("test.txt");   // 是否可读
is_writable("test.txt");   // 是否可写
is_executable("test.txt"); // 是否可执行

12.6 文件属性

函数 说明
filesize($file) 文件大小(字节)
filectime($file) 创建时间
filemtime($file) 修改时间
fileatime($file) 最后访问时间

12.7 目录操作

// 创建目录
mkdir("new_dir", 0755, true); // true为递归创建

// 删除目录(需为空)
rmdir("new_dir");

// 读取目录内容
$dir = opendir(".");
while (($file = readdir($dir)) !== false) {
    echo $file . "\n";
}
closedir($dir);

12.8 递归遍历目录

function tree($dirfile) {
    $dir = opendir($dirfile);
    while (($file = readdir($dir)) !== false) {
        if (is_dir("$dirfile/$file") && $file != "." && $file != "..") {
            echo "目录: $dirfile/$file\n";
            tree("$dirfile/$file");  // 递归
        } else if ($file != "." && $file != "..") {
            echo "文件: $dirfile/$file\n";
        }
    }
    closedir($dir);
}
tree("./");

13. 命名空间

13.1 命名空间的作用

  1. 解决类/函数/常量名称冲突
  2. 为长名称创建别名,提高可读性

13.2 定义命名空间

// 定义命名空间(类似文件夹)
namespace MyProject;

class User {
    // ...
}

// 子命名空间
namespace MyProject\SubSpace;

13.3 命名空间访问

// 1. 非限定名称(当前空间内)
new User();

// 2. 限定名称(相对路径)
new SubSpace\User();

// 3. 完全限定名称(绝对路径,用\开头)
new \MyProject\User();

13.4 导入命名空间(use)

// 导入类
use MyProject\User;
new User();

// 导入函数
use function MyProject\getUser;

// 导入常量
use const MyProject\VERSION;

// 起别名
use MyProject\User as U;
new U();

14. 正则表达式

14.1 元字符

元字符 说明
* 0次或多次
+ 1次或多次
? 0次或1次
{m} 恰好m次
{m,n} m到n次
{m,} 至少m次
^ 字符串开头
$ 字符串结尾
| 或(选择)
[] 字符类(匹配任意一个)
[^] 排除字符类
() 分组(模式单元)
. 任意字符(除换行)
\d 数字(等价[0-9])
\D 非数字
\w 单词字符(字母数字下划线)
\W 非单词字符
\s 空白字符
\S 非空白字符

14.2 正则示例

// 匹配32位MD5
if (preg_match('/^[a-z0-9]{32}$/', $input)) {
    echo "是MD5格式";
}

// 匹配邮箱
$pattern = '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/';

// 匹配手机号
$pattern = '/^1[3-9]\d{9}$/';

// 匹配URL
$pattern = '/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/';

14.3 POSIX字符类

说明
[[:alnum:]] 字母和数字
[[:alpha:]] 字母
[[:digit:]] 数字
[[:lower:]] 小写字母
[[:upper:]] 大写字母
[[:space:]] 空白字符
[[:punct:]] 标点符号

15. PHP与MySQL交互

15.1 连接方式选择

PHP 5及以上推荐使用:

  • MySQLi(面向对象/面向过程)—— 仅支持MySQL
  • PDO(PHP Data Objects)—— 支持12种数据库

15.2 MySQLi连接数据库

面向对象方式

$servername = "localhost";
$username = "root";
$password = "123456";
$dbname = "myDB";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
echo "连接成功";

// 关闭连接
$conn->close();

面向过程方式

$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
    die("连接失败: " . mysqli_connect_error());
}
mysqli_close($conn);

15.3 PDO连接数据库

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8", 
                    $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "连接成功";
} catch(PDOException $e) {
    echo "连接失败: " . $e->getMessage();
}
$conn = null;

15.4 创建表

$sql = "CREATE TABLE MyGuests (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    firstname VARCHAR(30) NOT NULL,
    lastname VARCHAR(30) NOT NULL,
    email VARCHAR(50),
    reg_date TIMESTAMP
)";

if ($conn->query($sql) === TRUE) {
    echo "表创建成功";
} else {
    echo "错误: " . $conn->error;
}

15.5 插入数据

// 单条插入
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
        VALUES ('John', 'Doe', 'john@example.com')";
if ($conn->query($sql) === TRUE) {
    echo "新记录插入成功,ID: " . $conn->insert_id;
}

// 多条插入(mysqli_multi_query)
$sql = "INSERT INTO MyGuests VALUES ('John', 'Doe', 'john@example.com');";
$sql .= "INSERT INTO MyGuests VALUES ('Mary', 'Moe', 'mary@example.com');";
if ($conn->multi_query($sql) === TRUE) {
    echo "多条记录插入成功";
}

15.6 预处理语句(Prepared Statement)

预处理语句的两大优点

  1. 减少解析时间
  2. 有效防止SQL注入(参数与SQL分离)

MySQLi预处理示例

// 准备SQL模板(?为占位符)
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) 
                        VALUES (?, ?, ?)");

// 绑定参数("sss" = 三个字符串)
$stmt->bind_param("sss", $firstname, $lastname, $email);

// 执行
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();

$stmt->close();

参数类型说明

类型 说明
i 整型(integer)
d 双精度浮点(double)
s 字符串(string)
b BLOB(二进制大对象)

PDO预处理示例

$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) 
                        VALUES (:firstname, :lastname, :email)");
$stmt->bindParam(':firstname', $firstname);
$stmt->bindParam(':lastname', $lastname);
$stmt->bindParam(':email', $email);

$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();

15.7 查询数据

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // 逐行获取
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"] . " - Name: " . $row["firstname"] . 
             " " . $row["lastname"] . "<br>";
    }
} else {
    echo "0 条结果";
}

获取方式

方法 返回格式
fetch_assoc() 关联数组(键名为字段名)
fetch_row() 索引数组(键名为数字索引)
fetch_array() 两者混合
fetch_object() 对象

15.8 Where条件查询

$sql = "SELECT * FROM MyGuests WHERE firstname='Peter'";
$result = $conn->query($sql);

15.9 排序(ORDER BY)

$sql = "SELECT * FROM MyGuests ORDER BY reg_date DESC";

15.10 更新数据(UPDATE)

$sql = "UPDATE MyGuests SET lastname='Smith' WHERE id=1";
if ($conn->query($sql) === TRUE) {
    echo "更新成功,受影响行数: " . $conn->affected_rows;
}

15.11 删除数据(DELETE)

$sql = "DELETE FROM MyGuests WHERE id=1";
if ($conn->query($sql) === TRUE) {
    echo "删除成功,受影响行数: " . $conn->affected_rows;
}

16. 附录:常用函数速查

16.1 字符串函数

函数 说明
strlen($str) 获取字符串长度
strpos($str, $needle) 查找子串首次出现位置
strstr($str, $needle) 查找子串首次出现并返回剩余
substr($str, $start, $len) 截取字符串
str_replace($search, $replace, $str) 替换
trim($str) 去除首尾空白
strtolower($str) 转小写
strtoupper($str) 转大写
md5($str) MD5加密
sha1($str) SHA1加密
htmlspecialchars($str) 转义HTML特殊字符
addslashes($str) 转义引号(防SQL注入辅助)

16.2 数组函数

函数 说明
count($arr) 数组长度
array_merge($arr1, $arr2) 合并数组
array_push($arr, $val) 尾部添加
array_pop($arr) 尾部弹出
array_shift($arr) 头部移除
array_unshift($arr, $val) 头部插入
in_array($val, $arr) 检查是否存在
array_search($val, $arr) 搜索并返回键名
array_unique($arr) 去重
array_splice($arr, $start, $len) 删除/替换部分元素

16.3 文件函数

函数 说明
fopen($file, $mode) 打开文件
fclose($handle) 关闭文件
fread($handle, $len) 读取文件
fwrite($handle, $str) 写入文件
fgets($handle) 读取一行
fgetc($handle) 读取一个字符
feof($handle) 检查文件末尾
filesize($file) 文件大小
file_exists($file) 判断文件存在

注意本笔记是源于暗月安全培训 https://edu.moonsec.com 的ai整合版

posted @ 2026-07-07 11:50  新手打怪兽  阅读(1)  评论(0)    收藏  举报