PHP实战:从零到一构建企业级应用(五)

简介: 教程来源:https://htnus.cn/category/tech-trends.html 本文详解PHP企业级用户管理系统实战:含操作日志中间件(自动记录请求、脱敏敏感数据)、Docker容器化部署(Nginx+PHP-FPM+Redis多服务集成)及生产级性能优化(OPcache、Redis会话、安全配置),覆盖开发到运维全链路。

第九部分:日志与监控

9.1 操作日志中间件

// app/Middleware/LogMiddleware.php
<?php
namespace App\Middleware;

use App\Models\OperationLog;
use App\Services\AuthService;

class LogMiddleware
{
    private AuthService $auth;

    public function __construct()
    {
        $this->auth = new AuthService();
    }

    public function handle(callable $next)
    {
        $startTime = microtime(true);

        // 执行请求
        $response = $next();

        $responseTime = (microtime(true) - $startTime) * 1000;

        // 记录日志
        $this->log($responseTime);

        return $response;
    }

    private function log(float $responseTime): void
    {
        // 排除健康检查等接口
        $excludePaths = ['/health', '/metrics'];
        if (in_array($_SERVER['REQUEST_URI'], $excludePaths)) {
            return;
        }

        $user = $this->auth->getUser();

        $log = new OperationLog();
        $log->user_id = $user->id ?? null;
        $log->username = $user->username ?? 'guest';
        $log->method = $_SERVER['REQUEST_METHOD'];
        $log->url = $_SERVER['REQUEST_URI'];
        $log->ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
        $log->user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
        $log->request_data = $this->getRequestData();
        $log->response_code = http_response_code();
        $log->response_time = (int) $responseTime;
        $log->save();
    }

    private function getRequestData(): ?array
    {
        $data = [];

        // GET参数
        if (!empty($_GET)) {
            $data['query'] = $_GET;
        }

        // POST数据(排除密码)
        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $input = json_decode(file_get_contents('php://input'), true) ?: $_POST;
            if (isset($input['password'])) {
                $input['password'] = '***';
            }
            $data['body'] = $input;
        }

        return empty($data) ? null : $data;
    }
}

第十部分:部署与运维

10.1 Docker部署配置

# Dockerfile
FROM php:8.2-fpm-alpine

# 安装依赖
RUN apk add --no-cache \
    nginx \
    supervisor \
    redis \
    mysql-client \
    libpng-dev \
    libjpeg-turbo-dev \
    freetype-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd pdo_mysql bcmath opcache

# 安装Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# 复制应用代码
COPY . /var/www/html
WORKDIR /var/www/html

# 安装依赖
RUN composer install --no-dev --optimize-autoloader

# 设置权限
RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/public/uploads
RUN chmod -R 755 /var/www/html/storage /var/www/html/public/uploads

# 复制配置文件
COPY docker/nginx.conf /etc/nginx/nginx.conf
COPY docker/php.ini /usr/local/etc/php/conf.d/app.ini
COPY docker/supervisord.conf /etc/supervisord.conf

EXPOSE 80

CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]

10.2 性能优化配置

; php.ini - 生产环境配置
memory_limit = 256M
upload_max_filesize = 20M
post_max_size = 20M
max_execution_time = 60
max_input_time = 60

; OPcache配置
opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 60
opcache.fast_shutdown = 1

; Session配置
session.save_handler = redis
session.save_path = "tcp://redis:6379"
session.gc_maxlifetime = 86400
session.cookie_httponly = 1
session.cookie_secure = 1
session.cookie_samesite = Strict

本文通过构建一个完整的企业级用户管理系统,全面展示了PHP在实际项目中的应用。从环境搭建、数据库设计、核心架构实现,到业务逻辑、控制器路由、安全防护、性能优化,再到部署运维,涵盖了PHP实战开发的各个方面。
来源:
https://htnus.cn/category/tech-trends.html

相关文章
|
6天前
|
人工智能 JSON 监控
Claude Code 源码泄露:一份价值亿元的 AI 工程公开课
我以为顶级 AI 产品的护城河是模型。读完这 51.2 万行泄露的源码,我发现自己错了。
4310 17
|
16天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
14940 138
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
5天前
|
人工智能 数据可视化 安全
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
本文详解如何用阿里云Lighthouse一键部署OpenClaw,结合飞书CLI等工具,让AI真正“动手”——自动群发、生成科研日报、整理知识库。核心理念:未来软件应为AI而生,CLI即AI的“手脚”,实现高效、安全、可控的智能自动化。
3097 8
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
|
7天前
|
人工智能 自然语言处理 数据挖掘
零基础30分钟搞定 Claude Code,这一步90%的人直接跳过了
本文直击Claude Code使用痛点,提供零基础30分钟上手指南:强调必须配置“工作上下文”(about-me.md+anti-ai-style.md)、采用Cowork/Code模式、建立标准文件结构、用提问式提示词驱动AI理解→规划→执行。附可复制模板与真实项目启动法,助你将Claude从聊天工具升级为高效执行系统。
|
6天前
|
人工智能 定位技术
Claude Code源码泄露:8大隐藏功能曝光
2026年3月,Anthropic因配置失误致Claude Code超51万行源码泄露,意外促成“被动开源”。代码中藏有8大未发布功能,揭示其向“超级智能体”演进的完整蓝图,引发AI编程领域震动。(239字)
2448 9