当前位置:首页>python>用 Python 写了个环境巡检脚本,每天上班前自动检查测试环境是否正常

用 Python 写了个环境巡检脚本,每天上班前自动检查测试环境是否正常

  • 2026-05-05 15:22:07
用 Python 写了个环境巡检脚本,每天上班前自动检查测试环境是否正常

痛点:每天早上的"环境地狱"

你是否有过这样的经历:

早上坐到工位,打开测试环境,准备开始一天的工作,却发现接口调不通、数据库连不上、某个服务直接 502 了……然后花半小时排查,才发现是昨晚部署的同学把某台机器重启了。

这种情况在团队里太常见了。测试环境不像生产环境那样有专人维护,很多公司的测试环境都是"谁用谁管"。结果是:环境问题消耗了大量不必要的调试时间。

我受不了了,花了一个下午写了一个环境巡检脚本,现在每天上班前脚本自动跑,出问题我第一时间就知道,再也不用被动"救火"了。


思路:把重复的事交给程序

我们的问题本质上是一个定时健康检查问题。思路很简单:

  1. 维护一份"要检查什么"的服务清单(配置文件)
  2. 脚本自动逐个检查:HTTP 接口、数据库、Redis……
  3. 检查结果汇总,发通知(邮件/微信/钉钉)
  4. 配合 Windows 任务计划程序,实现上班前自动执行

核心原则:零外部依赖,只用 Python 标准库,requests 那个是我自己加的,如果你连 requests 都不想装,HTTP 检查也能用标准库 urllib 替代。


工具功能一览

功能
说明
HTTP 健康检查
GET 请求,检测接口是否可访问、响应时间是否正常
数据库连通检查
支持 MySQL(pymysql)、PostgreSQL(psycopg2)
结果汇总报告
控制台彩色输出 + 日志文件 + JSON 结果
告警通知
支持邮件通知,可扩展接入钉钉/企业微信 Webhook
定时执行
配合 Windows 任务计划程序,上班前自动运行
配置文件
YAML 配置文件,修改检查项无需改代码

完整代码

① 配置文件 config.yaml

# 环境巡检配置
services:
-name:"测试环境主站
    type: http
    url: "
https://test.example.com/health"
timeout:10
expected_status:200

-name:"用户服务接口"
type:http
url:"https://test.example.com/api/user/health"
timeout:8

-name:"订单服务接口"
type:http
url:"https://test.example.com/api/order/health"
timeout:8

-name:"测试环境 MySQL"
type:mysql
host:"192.168.1.100"
port:3306
user:"test_user"
password:"test_password"
database:"test_db"
timeout:10

# 告警配置(可选,不填则不发通知)
alert:
enabled:true
email:
smtp_server:"smtp.qq.com"
smtp_port:587
sender:"your_email@qq.com"
password:"your_smtp授权码"
receivers:
-"team_lead@company.com"
-"qa_team@company.com"

② 主脚本 env_health_check.py

# -*- coding: utf-8 -*-
"""
环境巡检脚本
每天上班前自动检查测试环境各服务是否正常,发现问题立即告警
依赖:requests, pyyaml(pip install requests pyyaml)
     数据库检查还需:pymysql 或 psycopg2-binary
"""


import os
import sys
import json
import time
import smtplib
import datetime
import sqlite3
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

import requests
import yaml


# ─────────────────────────────────────────────
# 第一部分:各类服务的健康检查函数
# ─────────────────────────────────────────────

defcheck_http_service(name, url, timeout=10, expected_status=None):
"""
    检查 HTTP 服务是否可用
    :param name: 服务名称
    :param url: 健康检查接口 URL
    :param timeout: 超时时间(秒)
    :param expected_status: 期望的 HTTP 状态码,不填则只要能连通即可
    :return: dict,包含 status(ok/fail/error)、message、response_time(ms)
    """

    start = time.time()
try:
        response = requests.get(url, timeout=timeout, verify=False)
        elapsed_ms = round((time.time() - start) * 10002)

if expected_status:
if response.status_code == expected_status:
return {
"status""ok",
"message"f"HTTP {response.status_code},响应时间 {elapsed_ms}ms",
"response_time": elapsed_ms
                }
else:
return {
"status""fail",
"message"f"期望状态码 {expected_status},实际 {response.status_code}",
"response_time": elapsed_ms
                }
else:
# 无法连通时 requests 会抛异常,能到这里说明通了
return {
"status""ok",
"message"f"HTTP {response.status_code},响应时间 {elapsed_ms}ms",
"response_time": elapsed_ms
            }
except requests.exceptions.Timeout:
return {
"status""fail",
"message"f"连接超时({timeout}s)",
"response_time"None
        }
except requests.exceptions.ConnectionError:
return {
"status""error",
"message""连接失败(服务不可达)",
"response_time"None
        }
except Exception as e:
return {
"status""error",
"message"f"检查异常:{str(e)}",
"response_time"None
        }


defcheck_mysql_service(name, host, port, user, password, database, timeout=10):
"""
    检查 MySQL 数据库连通性
    依赖:pip install pymysql
    """

try:
import pymysql
        start = time.time()
        conn = pymysql.connect(
            host=host,
            port=port,
            user=user,
            password=password,
            database=database,
            connect_timeout=timeout
        )
        elapsed_ms = round((time.time() - start) * 10002)
        conn.close()
return {
"status""ok",
"message"f"MySQL 连通正常,耗时 {elapsed_ms}ms",
"response_time": elapsed_ms
        }
except ImportError:
return {
"status""error",
"message""缺少 pymysql 库,请运行: pip install pymysql",
"response_time"None
        }
except Exception as e:
return {
"status""error",
"message"f"MySQL 连接失败:{str(e)}",
"response_time"None
        }


defcheck_redis_service(name, host, port, password=None, timeout=5):
"""
    检查 Redis 连通性
    依赖:pip install redis
    """

try:
import redis
        r = redis.Redis(host=host, port=port, password=password,
                        socket_timeout=timeout, decode_responses=True)
        r.ping()
return {"status""ok""message""Redis 连通正常""response_time"None}
except ImportError:
return {
"status""error",
"message""缺少 redis 库,请运行: pip install redis",
"response_time"None
        }
except Exception as e:
return {
"status""error",
"message"f"Redis 连接失败:{str(e)}",
"response_time"None
        }


# ─────────────────────────────────────────────
# 第二部分:告警通知
# ─────────────────────────────────────────────

defsend_email_alert(subject, body, config):
"""发送邮件告警"""
try:
        msg = MIMEMultipart()
        msg['From'] = Header(config['sender'])
        msg['To'] = ','.join(config['receivers'])
        msg['Subject'] = Header(subject, 'utf-8')
        msg.attach(MIMEText(body, 'html''utf-8'))

        server = smtplib.SMTP(config['smtp_server'], config['smtp_port'])
        server.starttls()
        server.login(config['sender'], config['password'])
        server.sendmail(config['sender'], config['receivers'], msg.as_string())
        server.quit()
print(f"邮件已发送至: {', '.join(config['receivers'])}")
except Exception as e:
print(f"邮件发送失败: {e}")


defbuild_alert_content(results, check_time):
"""构建告警邮件正文(HTML格式)"""
    failed = [r for r in results if r['result']['status'] != 'ok']
    passed = [r for r in results if r['result']['status'] == 'ok']

    html = f"""
    <html>
    <body>
    <h2>🛠️ 测试环境巡检报告</h2>
    <p><b>检查时间:</b> {check_time}</p>
    <p><b>汇总:</b> 正常 {len(passed)} 项 | 异常 {len(failed)} 项</p>

    <h3>异常项目</h3>
    <table border='1' cellpadding='8' cellspacing='0' style='border-collapse:collapse'>
    <tr style='background:
#ffcccc'><th>服务</th><th>类型</th><th>状态</th><th>详情</th></tr>
    """
for r in failed:
        html += f"<tr><td>{r['name']}</td><td>{r['type']}</td>"
        html += f"<td style='color:red'>{r['result']['status']}</td>"
        html += f"<td>{r['result']['message']}</td></tr>"

    html += "</table>"

if passed:
        html += "<h3>正常项目</h3><table border='1' cellpadding='8' cellspacing='0'><tr style='background:#ccffcc'>"
        html += "<th>服务</th><th>类型</th><th>状态</th><th>详情</th></tr>"
for r in passed:
            html += f"<tr><td>{r['name']}</td><td>{r['type']}</td>"
            html += f"<td style='color:green'>{r['result']['status']}</td>"
            html += f"<td>{r['result']['message']}</td></tr>"
        html += "</table>"

    html += "<p><i>本报告由 Python 环境巡检脚本自动生成</i></p></body></html>"
return html


# ─────────────────────────────────────────────
# 第三部分:主执行逻辑
# ─────────────────────────────────────────────

defrun_health_check(config_path='config.yaml'):
"""加载配置并执行所有健康检查"""
# 加载配置
withopen(config_path, 'r', encoding='utf-8'as f:
        config = yaml.safe_load(f)

    services = config.get('services', [])
    alert_config = config.get('alert', {})
    check_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')

print(f"\n{'='*60}")
print(f"开始巡检 | {check_time} | 共 {len(services)} 项")
print(f"{'='*60}\n")

    results = []

for svc in services:
        name = svc['name']
        svc_type = svc['type']

print(f"检查: {name} ...", end=' ', flush=True)

if svc_type == 'http':
            result = check_http_service(
                name=name,
                url=svc['url'],
                timeout=svc.get('timeout'10),
                expected_status=svc.get('expected_status')
            )
elif svc_type == 'mysql':
            result = check_mysql_service(
                name=name,
                host=svc['host'],
                port=svc.get('port'3306),
                user=svc['user'],
                password=svc['password'],
                database=svc.get('database'''),
                timeout=svc.get('timeout'10)
            )
elif svc_type == 'redis':
            result = check_redis_service(
                name=name,
                host=svc['host'],
                port=svc.get('port'6379),
                password=svc.get('password')
            )
else:
            result = {'status''error''message'f'未知类型: {svc_type}''response_time'None}

# 输出结果
        status_icon = {'ok''✅''fail''⚠️''error''❌'}.get(result['status'], '❓')
print(f"{status_icon}{result['message']}")

        results.append({
'name': name,
'type': svc_type,
'result': result,
'check_time': check_time
        })

# ── 汇总报告 ──
print(f"\n{'='*60}")
print(f"巡检汇总报告")
print(f"{'='*60}")

    ok_count = sum(1for r in results if r['result']['status'] == 'ok')
    fail_count = sum(1for r in results if r['result']['status'] == 'fail')
    error_count = sum(1for r in results if r['result']['status'] == 'error')

print(f" 正常: {ok_count}")
print(f" 异常: {fail_count}")
print(f" 错误: {error_count}")
print(f"  总计:   {len(results)}")
print(f"{'='*60}\n")

# ── 发送告警 ──
if alert_config.get('enabled'and (fail_count > 0or error_count > 0):
print("正在发送告警通知...")
        html_body = build_alert_content(results, check_time)
        subject = f"测试环境巡检异常 | {fail_count + error_count} 项出问题"
        send_email_alert(subject, html_body, alert_config['email'])

return results


# ─────────────────────────────────────────────
# 第四部分:程序入口 + Windows 任务计划设置说明
# ─────────────────────────────────────────────

if __name__ == '__main__':
import argparse

    parser = argparse.ArgumentParser(description='测试环境健康检查脚本')
    parser.add_argument('--config', default='config.yaml'help='配置文件路径')
    parser.add_argument('--output', default='report.json'help='JSON结果输出路径')
    args = parser.parse_args()

# 忽略 SSL 警告(测试环境常见)
import urllib3
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

    results = run_health_check(args.config)

# 写 JSON 结果文件
withopen(args.output, 'w', encoding='utf-8'as f:
        json.dump(results, f, ensure_ascii=False, indent=2)
print(f"📄 结果已保存至: {args.output}")

# 以退出码告知是否全通过(方便 CI/定时任务判断)
    has_issue = any(r['result']['status'] != 'ok'for r in results)
    sys.exit(1if has_issue else0)

Windows 定时任务设置(上班前自动跑)

不想手动运行?设置好定时任务,每天自动执行:

方法:任务计划程序

  1. 创建基本任务:控制面板 → 管理工具 → 任务计划程序 → 创建基本任务

  2. 设置触发器

    • 触发时间:每天早上 8:30(上班前30分钟)
    • 每天重复:勾选
  3. 设置操作

    • 程序:python.exe 的完整路径(如 C:\Python312\python.exe
    • 参数:env_health_check.py --config config.yaml
    • 起始位置:D:\tools\env_health_check\(脚本所在目录)
  4. 完成,以后每天 8:30 脚本自动运行,有问题直接发邮件通知你。


扩展:接入钉钉/企业微信 Webhook

如果你们用钉钉或企业微信,把通知函数替换成 Webhook 方式更方便:

defsend_dingtalk_alert(message, webhook_url):
"""钉钉群机器人 Webhook 通知"""
    payload = {
"msgtype""text",
"text": {"content"f"【环境巡检告警】\n{message}"}
    }
    resp = requests.post(webhook_url, json=payload)
return resp.json()

defsend_wxwork_alert(message, webhook_url):
"""企业微信群机器人 Webhook 通知"""
    payload = {
"msgtype""markdown",
"markdown": {
"content"f"### 🛠️ 测试环境巡检告警\n>{message}"
        }
    }
    resp = requests.post(webhook_url, json=payload)
return resp.json()

使用建议

建议
说明
先在配置里填内网地址
避免外网访问超时影响判断
数据库检查记得安装驱动
pip install pymysql
 或 psycopg2-binary
第一次用先手动跑一遍
确认所有服务都能正常响应再设置定时任务
告警发给多人
建议同时发给测试负责人 + 相关开发,避免单点遗漏
日志定期清理
JSON 结果文件每天生成,记得定期清理或归档

总结

这个脚本解决的核心问题就一个:把环境检查从"被动发现"变成"主动告知"

成本极低——一个下午写好,配好定时任务,以后每天早上省下 15~30 分钟的"环境排查时间"。工具虽然简单,但实用价值很高,尤其适合测试环境不太稳定的团队。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-05-06 12:34:52 HTTP/2.0 GET : https://f.mffb.com.cn/a/486644.html
  2. 运行时间 : 0.100588s [ 吞吐率:9.94req/s ] 内存消耗:4,447.49kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=caee73f26fa6e2c528b02ad69be813a7
  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.000444s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000518s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000243s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000279s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000485s ]
  6. SELECT * FROM `set` [ RunTime:0.000196s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000526s ]
  8. SELECT * FROM `article` WHERE `id` = 486644 LIMIT 1 [ RunTime:0.000410s ]
  9. UPDATE `article` SET `lasttime` = 1778042092 WHERE `id` = 486644 [ RunTime:0.009281s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000388s ]
  11. SELECT * FROM `article` WHERE `id` < 486644 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000420s ]
  12. SELECT * FROM `article` WHERE `id` > 486644 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000354s ]
  13. SELECT * FROM `article` WHERE `id` < 486644 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.016455s ]
  14. SELECT * FROM `article` WHERE `id` < 486644 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000757s ]
  15. SELECT * FROM `article` WHERE `id` < 486644 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002327s ]
0.102259s