网络安全&PHP语法

1.1·php发展历史

1.2·快速入门php

1.3·常量·变量

1.4·表达式

1.5·函数应用

1.6·类定义

1.7·php数据库与前端连接实战

1.1·php发展历史

PHP作为广泛应用于Web开发的脚本语言,其发展历程可分为以下关键阶段:

一、初创时期(1994-1997)

1994年由Rasmus Lerdorf创建,最初称为"Personal Home Page Tools",用于管理个人网页。1995年发布PHP 2.0(FI:Forms Interpreter),新增表单处理功能。

核心特性:

  • 基础模板引擎
  • 数据库连接支持
  • 简单变量处理(如$$var语法)

二、标准化发展(1997-2000)

1997年Zeev Suraski和Andi Gutmans重写核心代码,1998年发布PHP 3.0:

  1. 正式更名为"PHP: Hypertext Preprocessor"
  2. 支持模块化扩展
  3. 实现基础面向对象编程
  4. 兼容主流操作系统
// PHP 3示例代码
class SimpleClass {
    var $var = 'default';
    function displayVar() {
        echo $this->var;
    }
}

三、性能飞跃(2000-2004)

2000年推出PHP 4.0:

  • 引入Zend引擎1.0
  • 支持会话管理(session_start())
  • 输出缓冲控制(ob_start())
  • 新增Superglobals($_GET/$_POST等)

$$ \text{性能提升} = \frac{T_{PHP3}}{T_{PHP4}} \approx 2.5 \quad (基准测试数据) $$

四、现代编程范式(2004-2015)

2004年PHP 5.0发布重大改进:

  1. 完整面向对象支持(访问控制、接口、抽象类)
  2. 异常处理机制(try/catch)
  3. SimpleXML与PDO扩展
  4. 改进内存管理
// PHP 5特征示例
interface Logger {
    public function log($message);
}

class FileLogger implements Logger {
    public function log($message) {
        file_put_contents('log.txt', $message, FILE_APPEND);
    }
}

2009年PHP 5.3引入:

  • 命名空间(namespace)
  • 匿名函数(闭包)
  • 延迟静态绑定

五、性能革命(2015-2020)

2015年PHP 7.0发布:

  • Zend引擎3.0带来100%性能提升
  • 类型声明(function foo(int $bar): string)
  • 太空船操作符(<=>)
  • 空合并运算符(??)

$$ \text{内存消耗减少} = \frac{M_{PHP5}}{M_{PHP7}} \approx 0.5 $$

六、前沿发展(2020至今)

PHP 8.0主要革新:

  1. JIT编译器(Just-In-Time)
  2. 联合类型(string|int)
  3. 匹配表达式(match)
  4. 属性注解(#[Attribute])
// PHP 8匹配表达式示例
$result = match($statusCode) {
    200, 201 => 'success',
    404 => 'not found',
    500 => 'server error',
    default => 'unknown'
};

后续版本持续增强:

  • 8.1:枚举类型、只读属性
  • 8.2:独立类型null/false/true
  • 8.3:类常量显式类型声明

PHP从简单的模板工具发展为支持函数式、面向对象、命令式编程范式的现代语言,持续在性能优化(JIT)、类型系统(渐进式类型)和开发体验(IDE支持)等方面演进,始终保持着在Web开发领域的重要地位。

1.2·快速入门php

php-好用的web后端语言。语法类似于c语言。我们先从如何下载php说起来。

PHP官方下载地址:PHP: Hypertext Preprocessor

然后有了php,没有IDE可不行,IDE推荐使用jetbrains公司的PhpStorm

官方下载地址:PhpStorm:JetBrains 的 PHP IDE

不过这个IDE好像要钱,当然微软商城里面有一些免费的代码编辑器,可以去下载。

PhpStorm也有破解版(我的就是),不过我是不会给出的,(我也无法保证链接的安全性),所有就不发了。

运行php代码其实也不要那么麻烦,先下载phpstudy。

网站:小皮面板(phpstudy) - 让天下没有难配的服务器环境!

然后下载安装。

安装完之后就是这样。没记错的话是自带php+阿帕奇+myql环境的。

我们可以创建一个网站

在配置网站时,需要注意域名需要把顶级域名带上(可能会出问题--有点玄学),例如exp.com/.net,名字可以随便取(最好不要与你可以访问到的域名重名例如:www.baidu.com)

然后打开图片中根目录的地址。建新文件,main.php(文件名随便,但后缀名要为.php)

然后运行阿帕奇和mysql数据库(不运行数据库也没问题)

然后访问:http://[你的域名]/[文件名].php,就可以看到运行结果了。

例如我的就是:http://aaa.com/main.php

你可以在这之前向你的php文件中写入以下代码查看是否成功运行php

<?php

phpinfo();//查看php相关信息的函数

 ?>

如果运行成功会出现以下结果:

第一个程序--halle,Word

<?php
echo "halle,word";//打印halle,word
  ?>

使用记事本打开并写入。然后访问你写的文件。

运行结果:

 1.3·常量·变量

PHP 变量

定义与特性
  • 使用$符号声明,如$username = "John";
  • 作用域分为局部/全局/静态
  • 支持动态变量名:${$varName} = value;
命名规范
  1. 格式要求:

    • 首字符:字母或下划线
    • 后续字符:字母、数字、下划线
    • 有效示例:$_totalCount, $user2
    • 无效示例:$2ndPlace(数字开头)
  2. 大小写敏感:

    • $Age$age$AGE
取值限制
数据类型存储范围
整型32位系统:$-2^{31}$~$2^{31}-1$<br>64位系统:$-9 \times 10^{18}$~$9 \times 10^{18}$
浮点型约$\pm 1.8 \times 10^{308}$,精度15位
字符串最大2GB内存

PHP 常量

定义方式
// 传统定义(运行时)
define("MAX_FILE_SIZE", 5);

// 类常量定义(编译时)
const MIN_WIDTH = 768;

命名规范
  1. 格式要求:

    • 推荐全大写+下划线:TAX_RATE
    • 允许但应避免小写:define("min_height", 100);
  2. 命名限制:

    • 不可使用保留关键字
    • 不可重复定义
取值特性
  • 仅支持标量类型(布尔/整型/浮点/字符串)
  • 内存限制与变量相同
  • 全局可用(无作用域限制)

对比总结

特性变量常量
声明符号$前缀无符号
可修改性可重复赋值定义后不可变
作用域受限于定义位置全局有效
数据类型支持所有类型仅标量类型
定义方式直接赋值define()/const

应用示例

// 变量动态命名
$dataType = "height";
${$dataType} = 180;

// 常量访问
echo constant("MAX_FILE_SIZE");  // 输出5

1.4·表达式

以下是关于PHP表达式和运算符的详细说明:

一、基本表达式

  1. 变量表达式$username = "张三";
  2. 常量表达式define("MAX_SIZE", 1024);
  3. 数组表达式$colors = ["红", "绿", "蓝"];

二、运算符类型

1. 算术运算符
$a = 10 + 5;   // 加
$b = 20 - 8;   // 减
$c = 6 * 3;    // 乘
$d = 15 / 3;   // 除
$e = 17 % 5;   // 取模

2. 比较运算符
var_dump(5 == "5");   // 等于 → true
var_dump(5 === "5");  // 全等 → false
var_dump(5 != 3);     // 不等于 → true
var_dump(5 > 3);      // 大于 → true

3. 逻辑运算符
$condition = (5 > 3) && (2 < 4);  // 逻辑与 → true
$result = (false) || (5 === 5);   // 逻辑或 → true
$flag = !(5 == 3);                // 逻辑非 → true

三、特殊运算符

1. 三元运算符
$age = 18;
$status = $age >= 18 ? "成年人" : "未成年人";  // 简写形式

2. 空合并运算符(PHP7+)
$username = $_GET['user'] ?? '匿名用户';  // 处理未定义变量

3. 错误控制运算符
$file = @file('不存在的文件.txt');  // 抑制错误提示(慎用)

四、运算符优先级要点

  1. 最高优先级(), [], ->, ::
  2. 算术运算符 > 比较运算符 > 逻辑运算符
  3. 建议使用括号明确运算顺序:
$result = (5 * 3) + (10 / 2);  // 明确优先级

五、组合比较运算符(PHP7+)

echo 1 <=> 1;  // 0(相等)
echo 2 <=> 1;  // 1(左边大)
echo 1 <=> 2;  // -1(右边大)

六、字符串运算符

$greeting = "你好" . "世界";  // 连接 → "你好世界"
$name = "王";
$name .= "小明";             // 追加 → "王小明"

注意:使用运算符时要注意类型转换问题,例如:

var_dump(0 == "0");    // true(类型转换后相等)
var_dump(0 === "0");   // false(严格类型检查)

1.5·函数应用

PHP函数详解与应用

一、函数基础
  1. 定义格式
function 函数名(参数列表) {
    // 执行逻辑
    return 返回值;
}

示例:计算阶乘

function factorial($n) {
    if ($n <= 1) return 1;
    return $n * factorial($n - 1);
}
echo factorial(5); // 输出120

  1. 参数传递
  • 按值传递(默认)
function add($a, $b) {
    return $a + $b;
}

  • 引用传递(使用&)
function doubleValue(&$num) {
    $num *= 2;
}
$x = 5;
doubleValue($x); // $x变为10

二、返回值处理
  1. 多返回值实现
function circleCalc($r) {
    $area = M_PI * $r**2;
    $circumference = 2 * M_PI * $r;
    return [$area, $circumference];
}
list($a, $c) = circleCalc(3);

三、作用域规则
  1. 全局变量访问
$globalVar = 10;
function showGlobal() {
    global $globalVar;
    echo $globalVar; // 输出10
    
    // 或使用$GLOBALS数组
    echo $GLOBALS['globalVar'];
}

四、常用内置函数
  1. 字符串处理
$str = "Hello PHP";
echo strlen($str);      // 10
echo strtoupper($str);  // HELLO PHP
print_r(explode(" ", $str)); // ["Hello", "PHP"]

  1. 数组操作
$nums = [3,1,4,2];
sort($nums);            // [1,2,3,4]
echo array_sum($nums);  // 10
print_r(array_reverse($nums)); // [4,3,2,1]

五、高级特性
  1. 匿名函数(闭包)
$greet = function($name) {
    return "Hello, $name!";
};
echo $greet('John'); // Hello, John!

// 配合array_map使用
$numbers = [1,2,3];
$squared = array_map(function($n) {
    return $n ** 2;
}, $numbers); // [1,4,9]

  1. 可变参数函数
function sum(...$nums) {
    return array_sum($nums);
}
echo sum(1,2,3,4); // 10

六、最佳实践
  1. 参数验证
function divide($a, $b) {
    if (!is_numeric($a) || !is_numeric($b)) {
        throw new InvalidArgumentException("参数必须为数字");
    }
    if ($b == 0) {
        throw new DivisionByZeroError("除数不能为零");
    }
    return $a / $b;
}

  1. 函数缓存
function heavyCalculation($x) {
    static $cache = [];
    if (isset($cache[$x])) {
        return $cache[$x];
    }
    // 复杂计算过程
    $result = $x * 2; // 示例计算
    $cache[$x] = $result;
    return $result;
}

七、典型应用场景
  1. 表单验证函数
function validateEmail($email) {
    return filter_var($email, FILTER_VALIDATE_EMAIL);
}

function sanitizeInput($data) {
    return htmlspecialchars(stripslashes(trim($data)));
}

  1. 数据库操作封装
function queryDB($sql, $params = []) {
    $pdo = new PDO(DSN, USER, PASS);
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

注意事项:

  1. 函数命名推荐使用小驼峰式(如getUserInfo)
  2. 避免函数过长(建议不超过50行)
  3. 合理使用类型声明(PHP7+特性)
function addNumbers(float $a, float $b): float {
    return $a + $b;
}

1.6·类定义

PHP 类定义与教学

一、基础概念
  1. 类(Class):具有相同属性和行为的对象的抽象模板
  2. 对象(Object):类的具体实例
  3. 属性:类的特征变量(成员变量)
  4. 方法:类的功能函数(成员函数)
二、类定义基本结构
<?php
class User {
    // 属性声明
    public $name;
    private $age;
    
    // 构造函数
    public function __construct(string $name, int $age) {
        $this->name = $name;
        $this->age = $age;
    }
    
    // 方法示例
    public function getInfo(): string {
        return "姓名:{$this->name},年龄:{$this->age}";
    }
}
?>

三、核心组件详解
  1. 构造函数与析构函数
public function __construct() { /* 初始化逻辑 */ }
public function __destruct() { /* 清理逻辑 */ }

  1. 访问控制修饰符
  • public:全局可访问
  • protected:仅类内和子类可访问
  • private:仅类内可访问
  1. 继承与多态
class AdminUser extends User {
    private $permissionLevel;
    
    public function setPermission(int $level): void {
        $this->permissionLevel = $level;
    }
}

  1. 静态成员
class Counter {
    public static $count = 0;
    
    public static function increment(): void {
        self::$count++;
    }
}

Counter::increment();

四、实际应用案例

数据库连接类示例

class Database {
    private $connection;
    private static $instance = null;
    
    private function __construct() {
        $this->connection = new PDO(
            'mysql:host=localhost;dbname=test',
            'username',
            'password'
        );
    }
    
    public static function getInstance(): Database {
        if (!self::$instance) {
            self::$instance = new Database();
        }
        return self::$instance;
    }
    
    public function query(string $sql): PDOStatement {
        return $this->connection->query($sql);
    }
}

// 使用示例
$db = Database::getInstance();
$result = $db->query("SELECT * FROM users");

五、最佳实践建议
  1. 命名规范:类名使用大驼峰,方法名使用小驼峰
  2. 单一职责原则:每个类应只负责单一功能
  3. 封装原则:隐藏内部实现细节,通过公共方法暴露功能
  4. 类型声明:PHP7+推荐使用参数和返回类型声明
六、常见问题解答
  1. Q: 类和对象是什么关系? A: 类如同蓝图,对象是根据蓝图建造的实体。例如User类是模板,$user = new User()是具体实例

  2. Q: 什么时候使用静态方法? A: 当方法与类相关但不需要实例数据时使用,如工具类方法

  3. Q: 如何选择访问修饰符? A: 遵循最小权限原则,默认使用private,仅在需要暴露时使用publicprotected

实际开发中可通过IDE的代码提示功能(如PHPStorm)快速查看类结构,使用var_dump($object)可查看对象详细信息。

1.7·php数据库与前端连接实战

PHP数据库与前端连接实战:从数据存储到页面展示

一、环境准备与数据库搭建
  1. 本地服务器配置
  • 推荐使用XAMPP/WAMP集成环境(含Apache+MySQL+PHP)
  • 启动Apache服务与MySQL服务
  1. 创建示例数据库
CREATE DATABASE shop_db;
USE shop_db;

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    price DECIMAL(10,2),
    stock INT
);

二、PHP连接MySQL数据库
<?php
// 数据库连接参数配置
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "shop_db";

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

// 检测连接状态
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
echo "数据库连接成功";
?>

三、数据查询与前端展示
  1. 数据查询处理
<?php
$sql = "SELECT * FROM products";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // 准备数据数组
    $products = array();
    while($row = $result->fetch_assoc()) {
        $products[] = $row;
    }
} else {
    echo "0 条记录";
}
$conn->close();
?>

  1. 前端数据渲染
<!DOCTYPE html>
<html>
<head>
    <style>
        .product-table {border-collapse: collapse; width: 80%; margin: 20px auto;}
        .product-table td, .product-table th {border: 1px solid #ddd; padding: 8px;}
    </style>
</head>
<body>
    <table class="product-table">
        <tr>
            <th>ID</th>
            <th>商品名称</th>
            <th>价格</th>
            <th>库存</th>
        </tr>
        <?php foreach ($products as $product): ?>
        <tr>
            <td><?php echo $product['id']; ?></td>
            <td><?php echo htmlspecialchars($product['name']); ?></td>
            <td>¥<?php echo number_format($product['price'], 2); ?></td>
            <td><?php echo $product['stock']; ?></td>
        </tr>
        <?php endforeach; ?>
    </table>
</body>
</html>

四、安全增强措施
  1. 预处理语句防SQL注入
$stmt = $conn->prepare("INSERT INTO products (name, price, stock) VALUES (?, ?, ?)");
$stmt->bind_param("sdi", $name, $price, $stock);

  1. 输入数据过滤
$clean_name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$clean_price = filter_input(INPUT_POST, 'price', FILTER_SANITIZE_NUMBER_FLOAT);

五、完整功能实现示例
  1. 数据添加表单
<form action="add_product.php" method="post">
    <input type="text" name="name" placeholder="商品名称" required>
    <input type="number" step="0.01" name="price" placeholder="价格" required>
    <input type="number" name="stock" placeholder="库存" required>
    <button type="submit">添加商品</button>
</form>

  1. 后端处理脚本(add_product.php)
<?php
include 'db_connect.php';

if($_SERVER["REQUEST_METHOD"] == "POST"){
    $name = $_POST['name'];
    $price = $_POST['price'];
    $stock = $_POST['stock'];
    
    $stmt = $conn->prepare("INSERT INTO products (name, price, stock) VALUES (?, ?, ?)");
    $stmt->bind_param("sdi", $name, $price, $stock);
    
    if($stmt->execute()){
        header("Location: index.php");
    } else {
        echo "添加失败: " . $conn->error;
    }
    
    $stmt->close();
    $conn->close();
}
?>

六、调试技巧
  1. 常见错误排查:
  • 检查MySQL服务是否运行
  • 验证数据库用户权限
  • 查看PHP错误日志(路径:php.ini中error_log配置)
  • 使用var_dump()输出变量值
  1. 连接测试工具
// 临时测试脚本
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "PDO连接成功"; 
} catch(PDOException $e) {
    echo "连接失败: " . $e->getMessage();
}

本教程完整实现了从数据库连接、数据操作到前端展示的全流程,包含安全防护措施和实用调试技巧。建议读者按照步骤实践后,可尝试扩展删除、修改等功能,并探索AJAX异步交互等进阶内容。

好了现在php算是讲完了,其实我php不好,所以建议大家去买一本将php的书,因为php在web安全中是非常重要的,仅靠一两篇博客文章就想学好php很难。

下一篇文章:Python的入门与实战应用(上)

我精通python,所以文章分为上、中、下讲解。主要是干货比较多而且python在网络安全中非常重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李大轩

谢谢打赏,我马上更新,嘿嘿!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值