当前位置:首页>python>一键检测海量图片是否含文字!Python + OpenCV 实现递归目录扫描 + HTML 可视化报告(无需 OCR 引擎)速度快

一键检测海量图片是否含文字!Python + OpenCV 实现递归目录扫描 + HTML 可视化报告(无需 OCR 引擎)速度快

  • 2026-02-18 13:31:14
一键检测海量图片是否含文字!Python + OpenCV 实现递归目录扫描 + HTML 可视化报告(无需 OCR 引擎)速度快

在做文档智能、内容审核、数据清洗的时候,经常需要快速判断一张图片里有没有文字。
如果图片数量成百上千甚至上万,手动看显然不现实;用 PaddleOCR / EasyOCR 虽然准确,但对 GPU/CPU 消耗大、速度慢、部署麻烦,尤其在离线批量处理场景下很不友好。

今天分享一个纯 OpenCV + 简单图像特征分析的方案:

  • 支持递归扫描整个目录及其所有子目录的所有图片

  • 不依赖任何深度学习 OCR 库(零额外安装)
  • 生成美观的 HTML 交互式报告(带缩略图、相对路径、置信度着色)

  • 假阳性大幅降低(对 UI 图标、风景照、纯色图误判率显著下降)

实测在几千张混合图片上,速度比 OCR 快 5~20 倍(视图片大小而定)。初步过滤无用的图片

一、核心思路

不识别具体文字内容,只判断“有没有文字的视觉特征”:

  1. 自适应二值化 → 提取潜在文字区域
  2. 连通组件分析 → 筛选形状、面积、填充率像“文字笔画”的小块
  3. 估算平均笔画宽度 → 过滤掉大图标、实心 logo
  4. 综合边缘密度、区域数量、面积占比、局部对比度 → 计算置信度
  5. 阈值严格把控 → 显著降低把“树叶/草地/电路板/花纹”判成有文字的假阳性

二、功能亮点

  • 递归目录扫描(rglob)
  • 支持常见图片格式(jpg/jpeg/png/bmp/tiff/webp)
  • HTML 报告:缩略图预览 + 鼠标悬停放大 + 相对路径显示 + 状态颜色区分
  • 双模式:simple(快速无依赖) / ocr(PaddleOCR 准确模式)

  • 进度打印 + 最终统计汇总

三、完整代码

#!/usr/bin/env python3
"""
图片文字检测 Demo - 生成 HTML 报告(支持递归子目录)
检查目录及其所有子目录中的图片是否包含文字,结果以表格形式展示

用法:
    python check_image_has_text.py [图片目录] [方法]

示例:
    python check_image_has_text.py /path/to/images simple    # 简单方法(快速)
"""


import sys
import cv2
import numpy as np
from pathlib import Path
import base64
from datetime import datetime


defimage_to_base64(image_path: Path) -> str:
"""将图片转为 base64,用于 HTML 显示"""
try:
withopen(image_path, "rb"as f:
return base64.b64encode(f.read()).decode()
except:
return""


defcheck_text_by_simple_analysis(image_path: Path) -> dict:
"""改进版 - 更严格的文字检测(尽量降低假阳性)"""
try:
        img = cv2.imread(str(image_path))
if img isNone:
return {"has_text"False"confidence"0"detail""无法读取图片"}

# ── 预处理 ────────────────────────────────────────
if img.shape[0] * img.shape[1] > 4000 * 4000:  # 太大就缩小加快速度
            scale = 2000 / max(img.shape[:2])
            img = cv2.resize(img, None, fx=scale, fy=scale)

        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 尝试局部自适应二值化(对光照不均更鲁棒)
        binary = cv2.adaptiveThreshold(
            gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
            cv2.THRESH_BINARY_INV, 519
        )

# 轻度去噪
        kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))
        binary = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel, iterations=1)

# ── 连通区域分析 ─────────────────────────────────
        num_labels, labels, stats, _ = cv2.connectedComponentsWithStats(
            binary, connectivity=8
        )

        text_like_count = 0
        total_text_area = 0
        stroke_widths = []

        h, w = gray.shape

for i inrange(1, num_labels):
            x, y, bw, bh, area = stats[i]

if area < 15or area > 8000:
continue

            aspect = bw / max(bh, 1)
            fill_ratio = area / (bw * bh + 1e-6)

ifnot (0.08 < aspect < 8.0):
continue
ifnot (0.25 < fill_ratio < 0.92):
continue
if bw < 5or bh < 5:
continue

            roi = binary[y:y+bh, x:x+bw]
if roi.size == 0:
continue
            dist = cv2.distanceTransform(roi, cv2.DIST_L2, 3)
            max_dist = dist.max()
if max_dist > 0:
                stroke_widths.append(max_dist * 2)

            text_like_count += 1
            total_text_area += area

        edges = cv2.Canny(gray, 60180)
        edge_density = np.mean(edges > 0)

if text_like_count > 0:
            local_std = np.std(gray[binary > 0])
else:
            local_std = np.std(gray)

        score_density   = min(text_like_count / 45.01.0)
        score_area      = min(total_text_area / (w * h * 0.018), 1.0)
        score_aspect    = 1.0if3 <= len(stroke_widths) <= 180else0.2
        score_edge      = min(edge_density * 121.0if edge_density < 0.25else0.0
        score_contrast  = min(local_std / 38.01.0if local_std > 18else0.0

        confidence = (
            score_density   * 0.30 +
            score_area      * 0.25 +
            score_edge      * 0.15 +
            score_contrast  * 0.20 +
            score_aspect    * 0.10
        )

        has_text = (
            confidence > 0.58and
            text_like_count >= 12and
            total_text_area >= w * h * 0.004and
            (np.mean(stroke_widths) < 18if stroke_widths elseTrue)
        )

        detail = (
f"区域:{text_like_count} | 面积比:{total_text_area/(w*h):.4f} | "
f"边缘:{edge_density:.4f} | 对比:{local_std:.1f} | sw:{np.mean(stroke_widths):.1f}"
if stroke_widths else"无有效笔画宽度"
        )

return {
"has_text": has_text,
"confidence"round(float(confidence), 3),
"edge_density"round(float(edge_density), 4),
"contrast"round(float(local_std), 1),
"text_regions": text_like_count,
"text_area_ratio"round(total_text_area / (w * h), 4),
"detail": detail
        }

except Exception as e:
return {"has_text"False"confidence"0"detail"f"错误: {str(e)}"}


defgenerate_html_report(results: list, root_directory: Path, method: str) -> str:
"""生成 HTML 报告 - 支持显示相对路径"""

    has_text_count = sum(1for r in results if r.get("has_text"))
    no_text_count = len(results) - has_text_count

    html = f"""<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>图片文字检测结果(递归)</title>
    <style>
        * {{ margin: 0; padding: 0; box-sizing: border-box; }}
        body {{ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; background: 
#f5f5f5; padding: 20px; line-height: 1.6; }}
        .container {{ max-width: 1400px; margin: 0 auto; background: white; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); padding: 30px; }}
        h1 {{ color: #333; margin-bottom: 10px; font-size: 24px; }}
        .meta {{ color: #666; font-size: 14px; margin-bottom: 20px; padding-bottom: 15px; border-bottom: 1px solid #eee; }}
        .stats {{ display: flex; gap: 20px; margin-bottom: 25px; }}
        .stat-item {{ flex: 1; background: #f8f9fa; padding: 15px 20px; border-radius: 6px; text-align: center; }}
        .stat-number {{ font-size: 32px; font-weight: bold; color: #1890ff; }}
        .stat-label {{ color: #666; font-size: 14px; margin-top: 5px; }}
        .stat-item.success .stat-number {{ color: #52c41a; }}
        .stat-item.error .stat-number {{ color: #ff4d4f; }}
        table {{ width: 100%; border-collapse: collapse; font-size: 14px; }}
        th {{ background: #fafafa; padding: 12px; text-align: left; font-weight: 600; color: #333; border-bottom: 2px solid #e8e8e8; position: sticky; top: 0; }}
        td {{ padding: 12px; border-bottom: 1px solid #e8e8e8; vertical-align: middle; }}
        tr:hover {{ background: #f5f5f5; }}
        .preview-img {{ width: 120px; height: 80px; object-fit: cover; border-radius: 4px; border: 1px solid #d9d9d9; cursor: pointer; transition: transform 0.2s; }}
        .preview-img:hover {{ transform: scale(2); z-index: 100; box-shadow: 0 4px 12px rgba(0,0,0,0.15); }}
        .status {{ display: inline-block; padding: 4px 12px; border-radius: 12px; font-size: 12px; font-weight: 500; }}
        .status-yes {{ background: #f6ffed; color: #52c41a; border: 1px solid #b7eb8f; }}
        .status-no {{ background: #fff2f0; color: #ff4d4f; border: 1px solid #ffccc7; }}
        .confidence {{ font-weight: 600; color: #1890ff; }}
        .confidence-high {{ color: #52c41a; }}
        .confidence-low {{ color: #ff4d4f; }}
        .detail {{ color: #666; font-size: 12px; max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }}
        .detail:hover {{ white-space: normal; word-break: break-all; }}
        .index {{ color: #999; font-size: 12px; }}
        .relpath {{ font-family: monospace; font-size: 12px; color: #333; }}
        @media (max-width: 768px) {{ .container {{ padding: 15px; }} .stats {{ flex-direction: column; }} th, td {{ padding: 8px; font-size: 12px; }} .preview-img {{ width: 80px; height: 60px; }} }}
    </style>
</head>
<body>
    <div class="container">
        <h1>🖼️ 图片文字检测报告(递归子目录)</h1>
        <div class="meta">
            <div>📁 根目录: {root_directory}</div>
            <div>🔍 方法: {method}</div>
            <div>⏰ 生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}</div>
        </div>

        <div class="stats">
            <div class="stat-item"><div class="stat-number">{len(results)}</div><div class="stat-label">总图片数</div></div>
            <div class="stat-item success"><div class="stat-number">{has_text_count}</div><div class="stat-label">有文字</div></div>
            <div class="stat-item error"><div class="stat-number">{no_text_count}</div><div class="stat-label">无文字</div></div>
        </div>

        <table>
            <thead>
                <tr>
                    <th style="width: 50px;">#</th>
                    <th style="width: 140px;">预览</th>
                    <th>相对路径 / 文件名</th>
                    <th style="width: 100px;">结果</th>
                    <th style="width: 100px;">置信度</th>
                    <th>详细信息</th>
                </tr>
            </thead>
            <tbody>
"""

for i, r inenumerate(results, 1):
        img_base64 = image_to_base64(Path(r["path"]))
        img_src = f"data:image/jpeg;base64,{img_base64}"if img_base64 else""

        status_class = "status-yes"if r.get("has_text"else"status-no"
        status_text = "✅ 有文字"if r.get("has_text"else"❌ 无文字"

        conf = r.get("confidence"0)
        conf_class = "confidence-high"if conf > 0.7else ("confidence-low"if conf < 0.3else"")

        rel_path = str(Path(r["path"]).relative_to(root_directory))

        html += f"""
                <tr>
                    <td class="index">{i}</td>
                    <td>{f'<img src="{img_src}" class="preview-img" alt="预览">'if img_src else'N/A'}</td>
                    <td class="relpath" title="{rel_path}">{rel_path}</td>
                    <td><span class="status {status_class}">{status_text}</span></td>
                    <td class="confidence {conf_class}">{conf:.3f}</td>
                    <td class="detail" title="{r.get('detail''')}">{r.get('detail''')}</td>
                </tr>
"""


    html += """
            </tbody>
        </table>
    </div>
</body>
</html>
"""

return html


defprocess_directory(root_dir: Path, method: str = "simple"):
"""递归处理目录及其所有子目录中的图片,并生成 HTML 报告"""

    image_extensions = {'.jpg''.jpeg''.png''.bmp''.tiff''.webp'}

# 递归查找所有图片
    images = [
        p for p in root_dir.rglob("*")
if p.is_file() and p.suffix.lower() in image_extensions
    ]
# 按相对路径排序,便于阅读
    images.sort(key=lambda p: str(p.relative_to(root_dir)))

ifnot images:
print(f"❌ 在 {root_dir} 及其子目录中没有找到任何图片")
return

print(f"📁 根目录: {root_dir}")
print(f"🖼️  找到 {len(images)} 张图片(包含所有子目录)")
print(f"🔍 使用方法: {method}")
print("⏳ 正在处理...")

    results = []

for i, img_path inenumerate(images, 1):
print(f"  [{i}/{len(images)}{img_path.relative_to(root_dir)}", end="\r")

if method == "ocr":
            result = check_text_by_ocr(img_path)
else:
            result = check_text_by_simple_analysis(img_path)

        results.append({
"file"str(img_path.relative_to(root_dir)),  # 相对路径作为标识
"path"str(img_path.absolute()),
"method": method,
            **result
        })

print()  # 换行

# 生成并保存 HTML
    html_content = generate_html_report(results, root_dir, method)

    output_file = root_dir / "text_detection_report_recursive.html"
    output_file.write_text(html_content, encoding='utf-8')

# 统计
    has_text_count = sum(1for r in results if r.get("has_text"))

print("\n" + "=" * 70)
print("📊 检测结果汇总(递归):")
print(f"   有文字: {has_text_count} 张")
print(f"   无文字: {len(images) - has_text_count} 张")
print(f"   总计: {len(images)} 张")
print("-" * 70)
print(f"📄 HTML 报告已生成: {output_file}")
print(f"🌐 请在浏览器中打开查看(表格显示相对路径)")


defmain():
    default_dir = "/home/michah/桌面/nlp/docu_intel/storage/temp"

    directory = Path(sys.argv[1]) iflen(sys.argv) > 1else Path(default_dir)
    method = sys.argv[2iflen(sys.argv) > 2else"simple"

if method notin ["simple"]:
print("用法: python check_image_has_text.py [目录] [simple]")
print("  simple : 简单图像分析(快速,无需额外依赖)")
        sys.exit(1)

ifnot directory.is_dir():
print(f"❌ 路径不是目录或不存在: {directory}")
        sys.exit(1)

    process_directory(directory, method)


if __name__ == "__main__":
    main()

四、使用方法

  1. 保存为 check_images_text.py

  2. 安装依赖(simple 模式只需 opencv)
pip install opencv-python
  1. 运行示例
# 扫描当前目录及其子目录(simple 模式)
python check_images_text.py .

# 指定目录 + ocr 模式
python check_images_text.py /path/to/your/folder ocr

运行结束后会在根目录生成 text_detection_report.html,用浏览器打开即可看到完整报告。

五、适用场景 & 局限性

适合场景

  • 批量清洗数据集(去除纯图片、无文字 meme)
  • 文档/截图/海报快速分类
  • 内容审核前过滤明显无文字的图片
  • 离线、低资源环境

不适合 / 局限

  • 艺术字、极度扭曲文字、极低对比度文字 → 可能漏判
  • 极小字号密集文字 → 可能低估
  • 需要知道具体文字内容时 → 还是要上 OCR

如果你的场景对准确率要求极高,建议把阈值适当下调(0.58 → 0.52)或结合 OCR 做二次确认。

六、欢迎交流 & 优化

欢迎在评论区留言你的使用场景、误判案例或优化建议~
有真实误判图片也可以发,我可以帮忙针对性调整参数。

喜欢的话点个赞 + 收藏,码字不易,感谢支持!

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-28 08:57:30 HTTP/2.0 GET : https://f.mffb.com.cn/a/475679.html
  2. 运行时间 : 0.098854s [ 吞吐率:10.12req/s ] 内存消耗:4,550.60kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=9bb35ab9375d38b1bc53e3f39f72cfe5
  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.000711s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000906s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000332s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000265s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000580s ]
  6. SELECT * FROM `set` [ RunTime:0.000224s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000648s ]
  8. SELECT * FROM `article` WHERE `id` = 475679 LIMIT 1 [ RunTime:0.000523s ]
  9. UPDATE `article` SET `lasttime` = 1772240250 WHERE `id` = 475679 [ RunTime:0.011200s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.001467s ]
  11. SELECT * FROM `article` WHERE `id` < 475679 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000588s ]
  12. SELECT * FROM `article` WHERE `id` > 475679 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.006666s ]
  13. SELECT * FROM `article` WHERE `id` < 475679 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000971s ]
  14. SELECT * FROM `article` WHERE `id` < 475679 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001239s ]
  15. SELECT * FROM `article` WHERE `id` < 475679 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001331s ]
0.101220s