当前位置:首页>php>PHP 数据校验极简方案,防非法请求

PHP 数据校验极简方案,防非法请求

  • 2026-03-26 20:18:47
PHP 数据校验极简方案,防非法请求

大家好,我是专注 PHP 实战干货的博主。

做PHP接口开发,最繁琐、最容易出错的环节,莫过于数据校验。新手常犯的错:每个接口都重复写一堆if判断,校验手机号格式、密码长度、参数是否必填;忽略边界值校验,比如金额传负数、身份证号少一位;过度信任前端传参,直接将参数代入数据库操作,导致SQL异常、业务bug,甚至被恶意攻击。

更头疼的是,冗余的校验代码占了接口代码的一半,后期修改时,要逐个接口调整,效率极低。今天分享一个 PHP 数据校验极简方案,无需任何第三方扩展,1个极简校验类,一行代码实现参数校验,自动收集错误提示,少写80%冗余代码,彻底杜绝非法请求和业务bug。

一、核心痛点(每个PHP开发者都踩过)

  • 参数校验繁琐,每个接口重复写if判断,代码冗余、可读性差;

  • 校验规则不统一,有的接口校验手机号,有的不校验,易遗漏;

  • 忽略边界值校验(如金额≤0、密码长度不足6位),导致业务异常;

  • 过度信任前端传参,未校验的参数代入数据库,引发SQL错误;

  • 错误提示零散,前后端对接时,需反复确认校验规则和错误原因。

二、核心方案:极简校验类(直接复制,无需扩展)

单文件 Validator.php,兼容PHP7+,无需Composer、无需第三方扩展,支持「必填、格式、长度、范围」四大核心校验,自动收集错误提示,直接引入项目即可使用,可根据自己的业务需求灵活扩展。

<?php/** * PHP 数据校验极简类(实战版,新增自定义错误消息) * 特性:无需第三方扩展、支持多规则校验、自动收集错误、高频场景内置、自定义错误消息 */classValidator{    // 错误信息集合    private $errors = [];    // 自定义错误消息(可全局配置,也可单字段配置,优先级:单字段 > 全局 > 默认)    private $customMsg = [];    /**     * 构造函数:初始化自定义错误消息(可选)     * @param array $customMsg 全局自定义错误消息     * 格式:['字段名.规则' => '自定义消息',如 'mobile.required' => '请填写手机号']     */    public function __construct(array $customMsg = [])    {        $this->customMsg = $customMsg;    }    /**     * 校验单个参数     * @param mixed $value 待校验值     * @param array $rules 校验规则(可新增msg字段,配置单字段自定义消息)     * 例:['required' => true, 'type' => 'mobile', 'msg' => ['required' => '手机号不能为空']]     * @param string $field 字段名(用于错误提示)     * @return $this     */    public function check($valuearray $rulesstring $field): self    {        // 1. 必填校验        if(isset($rules['required']) && $rules['required']) {            if(empty($value) && $value !== 0 && $value !== '0') {                // 优先级:单字段msg > 全局customMsg > 默认消息                $msg $rules['msg']['required'] ?? $this->customMsg["{$field}.required"] ?? "{$field}不能为空";                $this->errors[] = $msg;                return $this;            }        }        // 空值且非必填,跳过后续校验        if(empty($value) && $value !== 0 && $value !== '0') {            return $this;        }        // 2. 类型/格式校验        if(isset($rules['type'])) {            $type $rules['type'];            $isValid true;            switch($type) {                case 'mobile'// 手机号                    if(!preg_match('/^1[3-9]\d{9}$/'$value)) {                        $isValid false;                    }                    break;                case 'email'// 邮箱                    if(!filter_var($value, FILTER_VALIDATE_EMAIL)) {                        $isValid false;                    }                    break;                case 'idcard'// 身份证(简单校验,可根据需求优化)                    if(!preg_match('/^\d{17}[\dXx]$/'$value)) {                        $isValid false;                    }                    break;                case 'number'// 数字(整数/小数)                    if(!is_numeric($value)) {                        $isValid false;                    }                    break;                case 'integer'// 整数                    if(!is_int($value) && !preg_match('/^\d+$/'$value)) {                        $isValid false;                    }                    break;            }            // 类型校验失败,获取自定义消息            if(!$isValid) {                $defaultMsg = [                    'mobile' => "{$field}格式不正确(需为11位有效手机号)",                    'email' => "{$field}格式不正确",                    'idcard' => "{$field}格式不正确",                    'number' => "{$field}必须为数字",                    'integer' => "{$field}必须为整数"                ];                $msg $rules['msg'][$type] ?? $this->customMsg["{$field}.{$type}"] ?? $defaultMsg[$type];                $this->errors[] = $msg;            }        }        // 3. 长度校验(字符串/数组)        if(isset($rules['length'])) {            $len is_array($value) ? count($value) : mb_strlen($value);            $min $rules['length']['min'] ?? 0;            $max $rules['length']['max'] ?? PHP_INT_MAX;            if($len $min || $len $max) {                $msg $rules['msg']['length'] ?? $this->customMsg["{$field}.length"] ?? "{$field}长度必须在{$min}-{$max}之间";                $this->errors[] = $msg;            }        }        // 4. 范围校验(数字)        if(isset($rules['range']) && is_numeric($value)) {            $min $rules['range']['min'] ?? 0;            $max $rules['range']['max'] ?? PHP_INT_MAX;            if($value $min || $value $max) {                $msg $rules['msg']['range'] ?? $this->customMsg["{$field}.range"] ?? "{$field}必须在{$min}-{$max}之间";                $this->errors[] = $msg;            }        }        // 5. 自定义正则校验(保留原有自定义消息逻辑,兼容新增配置)        if(isset($rules['regex']) && !preg_match($rules['regex'], $value)) {            $msg $rules['regex_msg'] ?? $this->customMsg["{$field}.regex"] ?? "{$field}格式不正确";            $this->errors[] = $msg;        }        return $this;    }    /**     * 批量校验参数     * @param array $data 待校验数据(键为字段名,值为待校验值)     * @param array $rules 批量校验规则(键为字段名,值为校验规则)     * @return $this     */    public function batchCheck(array $dataarray $rules): self    {        foreach($rules as $field => $rule) {            $value $data[$field] ?? '';            $this->check($value$rule$field);        }        return $this;    }    /**     * 判断校验是否通过     * @return bool     */    public function isValid(): bool    {        return empty($this->errors);    }    /**     * 获取错误信息(单个/全部)     * @param bool $first 是否只返回第一个错误     * @return array|string     */    public function getError(bool $first false)    {        if($first) {            return $this->errors[0] ?? '';        }        return $this->errors;    }    /**     * 重置错误信息     * @return $this     */    public function reset(): self    {        $this->errors = [];        return $this;    }    /**     * 动态设置自定义错误消息(支持中途修改)     * @param array $customMsg 格式同构造函数     * @return $this     */    public function setCustomMsg(array $customMsg): self    {        $this->customMsg = array_merge($this->customMsg, $customMsg);        return $this;    }}

三、高频场景实战示例(直接套用)

以下是5个中小项目最常用的校验场景,重点新增「自定义错误消息」实战,支持「单字段自定义」「全局自定义」两种方式,复制代码就能用,无需修改核心逻辑,只需根据自己的字段名和提示需求调整即可。

示例1:用户注册接口校验(手机号+密码+邮箱)

<?phprequire_once 'Validator.php';// 模拟前端传参(实际项目用$_POST/$_GET获取)$params = [    'mobile' => '13800138000'// 待校验手机号    'password' => '123456',    // 待校验密码    'email' => 'test@163.com'// 待校验邮箱    'nickname' => 'PHP干货'    // 待校验昵称];// 方式1:全局自定义错误消息(适合全项目统一提示风格)$globalCustomMsg = [    'mobile.required' => '请填写您的手机号',    'mobile.mobile' => '请输入11位有效手机号',    'password.required' => '请设置登录密码',    'password.length' => '密码长度需6-16位,包含字母和数字更佳',#xA;    'email.required' => '请填写您的邮箱地址',    'email.email' => '邮箱格式不正确,请重新输入',    'nickname.required' => '请设置您的昵称',    'nickname.length' => '昵称长度需2-10位,请勿包含特殊字符'];// 初始化校验器,传入全局自定义消息$validator new Validator($globalCustomMsg);// 方式2:单字段自定义错误消息(优先级高于全局,适合特殊字段提示)$rules = [    'mobile' => [        'required' => true,        'type' => 'mobile',        // 单字段自定义消息(覆盖全局消息)        'msg' => [            'required' => '手机号不能为空,用于接收登录验证码',            'mobile' => '手机号格式错误,请输入正确的11位手机号'        ]    ],    'password' => [        'required' => true,        'length' => ['min' => 6'max' => 16],        // 单字段自定义消息        'msg' => ['length' => '密码需6-16位,建议包含字母、数字和符号,提升安全性']    ],    'email' => [        'required' => true,        'type' => 'email' // 使用全局自定义消息    ],    'nickname' => [        'required' => true,        'length' => ['min' => 2'max' => 10// 使用全局自定义消息    ]];// 方式3:中途动态设置自定义消息(适合临时调整)// $validator->setCustomMsg([//     'nickname.length' => '昵称长度调整为2-8位,请重新设置'// ]);// 3. 执行校验$validator->batchCheck($params$rules);// 4. 校验结果判断if(!$validator->isValid()) {    // 校验失败,返回自定义错误信息(前后端统一格式)    echo json_encode([        'code' => 400,        'msg' => $validator->getError(true), // 只返回第一个错误,更友好        'data' => []    ], JSON_UNESCAPED_UNICODE);    exit;}// 校验通过,执行注册逻辑(省略数据库操作)echo json_encode([    'code' => 200,    'msg' => '注册成功',    'data' => []], JSON_UNESCAPED_UNICODE);

示例2:商品添加接口校验(金额+库存)

示例3:身份证校验(用户实名认证)

<?phprequire_once 'Validator.php';$params = [    'goods_name' => '测试商品',    'price' => 99.9// 商品金额    'stock' => 100   // 商品库存];// 全局自定义错误消息(适配商品管理场景)$customMsg = [    'goods_name.required' => '请填写商品名称',    'goods_name.length' => '商品名称长度需1-50字,简洁明了',    'price.required' => '请设置商品售价',    'price.number' => '商品售价必须为数字',    'price.range' => '商品售价需在0.01-99999.99元之间',    'stock.required' => '请设置商品库存',    'stock.integer' => '商品库存必须为整数',    'stock.range' => '商品库存需在0-10000件之间'];$validator new Validator($customMsg);$rules = [    'goods_name' => [        'required' => true,        'length' => ['min' => 1'max' => 50]    ],    'price' => [        'required' => true,        'type' => 'number',        'range' => ['min' => 0.01'max' => 99999.99]    ],    'stock' => [        'required' => true,        'type' => 'integer',        'range' => ['min' => 0'max' => 10000]    ]];$validator->batchCheck($params$rules);if(!$validator->isValid()) {    echo json_encode([        'code' => 400,        'msg' => $validator->getError(true),        'data' => []    ], JSON_UNESCAPED_UNICODE);    exit;}// 校验通过,执行商品添加逻辑echo json_encode([    'code' => 200,    'msg' => '商品添加成功',    'data' => []], JSON_UNESCAPED_UNICODE);

示例4:自定义正则校验(验证码)

<?phprequire_once 'Validator.php';$params = [    'idcard' => '110101199003071234' // 待校验身份证号];// 单字段自定义错误消息(实名认证场景,提示更精准)$validator new Validator();$rules = [    'idcard' => [        'required' => true,        'type' => 'idcard',        'msg' => [            'required' => '请填写您的身份证号,用于实名认证',            'idcard' => '身份证号格式不正确,请核对后重新输入' // 不暴露具体错误,符合安全要求        ]    ]];$validator->batchCheck($params$rules);if(!$validator->isValid()) {    echo json_encode([        'code' => 400,        'msg' => $validator->getError(true),        'data' => []    ], JSON_UNESCAPED_UNICODE);    exit;}// 校验通过,执行实名认证逻辑echo json_encode([    'code' => 200,    'msg' => '实名认证成功',    'data' => []], JSON_UNESCAPED_UNICODE);
自定义校验
<?phprequire_once 'Validator.php';$params = [    'code' => '123456' // 6位数字验证码];// 结合自定义消息,优化验证码提示$validator new Validator();$rules = [    'code' => [        'required' => true,        'regex' => '/^\d{6}$/',        'regex_msg' => '验证码必须为6位数字,请重新输入'// 自定义正则提示        'msg' => ['required' => '请填写收到的6位验证码'// 自定义必填提示    ]];$validator->batchCheck($params$rules);if(!$validator->isValid()) {    echo json_encode([        'code' => 400,        'msg' => $validator->getError(true),        'data' => []    ], JSON_UNESCAPED_UNICODE);    exit;}// 校验通过,执行验证码验证逻辑echo json_encode([    'code' => 200,    'msg' => '验证码正确',    'data' => []], JSON_UNESCAPED_UNICODE);

四、必看避坑点(生产环境防踩雷)

校验类再好用,忽略以下几点,依然会出现bug和安全隐患,这5个避坑点一定要记牢!

  • 避坑1:不要忽略边界值校验
    比如金额校验,只校验是否为数字,不校验是否≥0.01,会导致用户提交0元订单;库存校验不限制最大值,可能导致库存填错(如1000000),引发业务异常。
  • 避坑2:不要信任前端传参
    前端的校验只是“友好提示”,恶意用户可以绕过前端校验,直接向接口提交非法参数(如手机号填123456)。后端必须做二次校验,这是最后一道防线。
  • 避坑3:敏感参数必须二次校验
    涉及金钱、用户隐私的参数(如金额、身份证、手机号),除了格式校验,还要做业务校验。比如手机号校验通过后,还要校验是否已被注册;金额校验通过后,还要校验是否符合商品定价规则。
  • 避坑4:错误提示不要暴露过多信息
    比如校验身份证时,不要提示“身份证号第18位错误”,只需提示“身份证格式不正确”;避免泄露校验规则,防止恶意用户针对性绕过,自定义消息也需遵循此原则。
  • 避坑5:自定义消息优先级要理清
    单字段配置的msg(如$rules[‘mobile’][‘msg’])> 全局自定义消息(构造函数传入)> 类内默认消息,避免配置冲突导致提示异常;建议全局消息统一风格,特殊字段用单字段消息微调。

校验类再好用,忽略以下几点,依然会出现bug和安全隐患,这4个避坑点一定要记牢!

五、核心价值与落地步骤

核心价值

  1. 少写80%冗余代码:无需重复写if判断,一行代码实现多规则校验;

  2. 杜绝非法请求:从源头拦截非法参数,减少数据库异常和业务bug;

  3. 前后端对接高效:错误提示统一、可自定义,无需反复确认校验规则,提升用户体验;

  4. 灵活扩展:可根据业务需求,新增校验类型(如银行卡、手机号归属地),自定义消息支持多场景适配。

落地步骤(1分钟搞定)

  1. 新建 Validator.php 文件,复制上面的校验类代码;

  2. 在需要校验的接口中,引入 require_once 'Validator.php';

  3. 根据接口参数,定义校验规则,调用 batchCheck 执行校验;

  4. 判断校验结果,校验失败返回错误信息,校验通过执行业务逻辑。

落地步骤(1分钟搞定)

  1. 新建 Validator.php 文件,复制上面的校验类代码;

  2. 在需要校验的接口中,引入 require_once 'Validator.php';

  3. 根据接口参数,定义校验规则,调用 batchCheck 执行校验;

  4. 判断校验结果,校验失败返回错误信息,校验通过执行业务逻辑。

总结

PHP数据校验,核心不是“写得多复杂”,而是“简单、高效、不遗漏”。这个极简校验类,无需第三方扩展,直接复制可用,覆盖中小项目90%的校验场景,既能少写冗余代码,又能杜绝非法请求,新手也能快速上手。

关注我,后续继续分享PHP实战干货,每天3分钟,提升开发效率。

欢迎在留言区告诉我:你项目中遇到过哪些参数校验的坑?比如非法参数导致的bug、前端绕过校验的问题,我们一起交流解决方案!

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 08:11:35 HTTP/2.0 GET : https://f.mffb.com.cn/a/481556.html
  2. 运行时间 : 0.140343s [ 吞吐率:7.13req/s ] 内存消耗:4,911.95kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=4ef941b1f9b28ff06fd6499567bbebb9
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000471s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000545s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000719s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000264s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000494s ]
  6. SELECT * FROM `set` [ RunTime:0.002200s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000573s ]
  8. SELECT * FROM `article` WHERE `id` = 481556 LIMIT 1 [ RunTime:0.001349s ]
  9. UPDATE `article` SET `lasttime` = 1774570295 WHERE `id` = 481556 [ RunTime:0.003892s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000286s ]
  11. SELECT * FROM `article` WHERE `id` < 481556 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000563s ]
  12. SELECT * FROM `article` WHERE `id` > 481556 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000405s ]
  13. SELECT * FROM `article` WHERE `id` < 481556 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001995s ]
  14. SELECT * FROM `article` WHERE `id` < 481556 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001254s ]
  15. SELECT * FROM `article` WHERE `id` < 481556 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002712s ]
0.141897s