记录学习与后端知识并分享学习代码过程(会飞的鱼Blog)

PHP性能优化与缓存策略

会飞的鱼 0 4 2026年6月12日

PHP性能优化

PHP是最经典的Web开发语言之一,全球数百万网站广泛使用。本文分享3个完整可运行的代码示例,涵盖PHP开发核心技能。

完整表单验证类

安全的表单验证有效防止SQL注入和XSS攻击。

<?php
class FormValidator {
    private $errors = [];
    private $data = [];

    public function required($field, $label, $value) {
        if (empty(trim($value))) {
            $this->errors[$field] = "{$label}不能为空";
            return false;
        }
        $this->data[$field] = trim($value);
        return true;
    }

    public function email($field, $label, $value) {
        if (!filter_var(trim($value), FILTER_VALIDATE_EMAIL)) {
            $this->errors[$field] = "{$label}格式不正确";
            return false;
        }
        $this->data[$field] = strtolower(trim($value));
        return true;
    }

    public static function safeOutput($data) {
        return htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
    }

    public function passes() {
        return empty($this->errors);
    }
}

$v = new FormValidator();
$v->required('username', '用户名', $_POST['username'] ?? '');
$v->email('email', '邮箱', $_POST['email'] ?? '');

if ($v->passes()) {
    echo "验证通过";
} else {
    print_r($v->getErrors());
}
?>

完整PDO数据库类

PDO预处理语句防止SQL注入。

<?php
class Database {
    private $pdo;
    private static $instance = null;

    private function __construct() {
        $dsn = "mysql:host=localhost;dbname=test;charset=utf8mb4";
        $options = [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        ];
        $this->pdo = new PDO($dsn, 'user', 'pass', $options);
    }

    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function fetchOne($sql, $params = []) {
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($params);
        return $stmt->fetch();
    }

    public function insert($table, $data) {
        $columns = implode(', ', array_keys($data));
        $placeholders = ':' . implode(', :', array_keys($data));
        $sql = "INSERT INTO {$table} ({$columns}) VALUES ({$placeholders})";
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($data);
        return $this->pdo->lastInsertId();
    }
}
?>

完整文件上传类

安全文件上传防止恶意文件攻击。

<?php
class FileUploader {
    private $allowedTypes = ['image/jpeg', 'image/png'];
    private $maxSize = 2097152;

    public function upload($fileField) {
        $file = $_FILES[$fileField];
        $finfo = new finfo(FILEINFO_MIME_TYPE);
        $mimeType = $finfo->file($file['tmp_name']);

        if (!in_array($mimeType, $this->allowedTypes)) {
            return false;
        }

        $extension = pathinfo($file['name'], PATHINFO_EXTENSION);
        $filename = uniqid() . '.' . $extension;
        $filepath = 'uploads/' . $filename;

        if (move_uploaded_file($file['tmp_name'], $filepath)) {
            return ['filename' => $filename, 'path' => $filepath];
        }
        return false;
    }
}
?>

PHP最佳实践

  1. 始终验证和过滤用户输入
  2. 使用预处理语句,永不字符串拼接
  3. 开启OPcache获得2-5倍性能提升
  4. 生产环境记录错误日志,不显示错误
  5. 使用Composer自动加载遵循PSR-4规范
  6. 遵循PSR编码标准
  7. 使用Redis/Memcached缓存热点数据

技术分享,欢迎评论区交流讨论。

本文由 @会飞的鱼 于 2026-6-12 发布在 会飞的鱼Blog,如无特别说明,本博文章均为原创,转载请保留出处。

网友评论

    暂无评论

会飞的鱼 在线咨询

在线时间:9:00-22:00
周六、周日:14:00-22:00