乐于分享
好东西不私藏

AI应用实录3:困扰了十几年的PDF矢量文字无法复制的问题被AI搞清楚了

AI应用实录3:困扰了十几年的PDF矢量文字无法复制的问题被AI搞清楚了

点击上方蓝字⬆,关注我公众号 ! 

起因:看到得不到

PDF 文件加密防复制很常见:

  • • 复制密码很弱,n多工具都可以直接移除,python脚本也可以;
  • • 打开密码好像不好破解,只能上字典,但不给密码也没法传播;
  • • 图片型文件也能阻止复制,但文件体积要么很大,要么文字比较模糊。

除此之外,还有一类文件,少见一些,不是图片PDF:文字是矢量字形,可选中(但选中后复制为乱码)

  • • 视觉显示正常:中文文字清晰可见,放大没问题
  • • 复制时乱码:粘贴出来是 \x01 \x02 !"#$ 等无意义字符
  • 就像下图这样:

资料太少

过去十几年,有时闲了也试着查一下,指向字体问题,但都讲不清楚,一忙就又放下了。

昨天又翻到一份文件,忽然想到应该丢给AI研究一下,就是上面那一份。

AI 直接回:应该先转成图片,然后OCR。

哈哈,想偷懒,不能放过它。提要求:目的不是将其内容提取出来,因为转图片,OCR一定能得到一个结果;

  • • 1、搞清楚其方法实现方法,并且初步实现,例如我这有一个纯文字的PDF,能转成这样的文件就算成功;
  • • 2、讲清楚转换方法,例如其实文件里存的是字体,用字体画出来;
  • • 3、能将这种加密的页面中不使用OCR方法,转成文字txt,或者讲清楚为什么搞不出来;
  • • 4、要把这个工作看做解密,当然也可以搜集网络资料,而不是一定自己傻算;

然后睡觉,睡醒之后结果早就来了:

PDF FakeFont 防复制技术研究报告

研究目标

  1. 1. 搞清楚实现方法:理解FakeFont防复制的技术原理
  2. 2. 正向实现:将普通文字PDF转换为防复制PDF
  3. 3. 逆向恢复:将防复制PDF还原为文字TXT(不直接使用OCR提取,但可用OCR辅助建立映射)

PDF文字的双通道模型

PDF的文字处理有两条完全独立的通道:

| 通道 | 作用 | 依赖的数据 | 破坏影响 ||--### --|------|-----------|---------|视觉渲染通道 | 在屏幕上画出文字像素 | 字形轮廓数据(CFF/FontFile中的贝塞尔曲线) | 破坏→文字看不见 |文字提取通道 | 复制/搜索时获取Unicode文字 | ToUnicode CMap(字形编号→Unicode映射表) | 破坏→复制得到乱码 |

核心洞察:两条通道完全独立。破坏ToUnicode不影响视觉显示,破坏字形轮廓不影响文字提取(但提取到的是原始编码而非汉字)。

FakeFont防复制技术详解

整体架构
原始PDF:                           防复制PDF (FakeFont):┌─────────────────────┐           ┌─────────────────────┐│ 内容流: <4E2D> Tj    │           │ 内容流: <01> Tj      │  ← 编码改为无意义序号│ 字体: SimSun         │           │ 字体: FakeFont-001C9E57 │ ← 每段文字独立字体│ ToUnicode: 4E2D→中   │           │ ToUnicode: 01→(空格)  │ ← 映射被破坏/伪造│ CFF: 字形"中"轮廓    │           │ CFF: 字形"中"轮廓     │ ← 轮廓数据保留(不变)└─────────────────────┘           └─────────────────────┘视觉: "中" ← 靠CFF轮廓画出         视觉: "中" ← 同样靠CFF轮廓画出 ✓复制: "中" ← 靠ToUnicode映射       复制: " " ← ToUnicode被破坏 ✗
三个核心手法

手法1:每字一字体(极端子集化)

  • • 每个文字片段创建独立的FakeFont实例
  • • 每个FakeFont仅包含1~22个字形(平均6.6个)
  • • 即使同一个"的"字出现100次,也会创建100个独立字体
  • • 第1页:197个FakeFont,1301个字形 ≈ 1297个字符

手法2:字形编号重映射

  • • 原始Unicode编码(如0x4E2D)被替换为无意义序号(0x01, 0x02...)
  • • 总共只有22种编号(0x01, 0x02, 0x20~0x33)
  • • 同一编号在不同字体中对应完全不同的汉字
  • • 例:编号0x01在197个不同FakeFont中都使用,每个对应不同的汉字

手法3:CFF字形名混淆

  • • 原始字形名(如uni4E2D)被替换为通用占位符(.nullspacenonmarkingreturn
  • • 完全抹除可推断Unicode的命名线索
  • • ToUnicode CMap被删除或伪造(只映射空格0x20)
CFF字体程序深度分析

对前10个FakeFont的CFF数据进行了二进制级解析:

  • CFF Header、Name INDEX、Top DICT INDEX、String INDEX、Global Subr INDEX

  • • 解析Charset(字形名列表)、CharStrings(字形绘图程序)、Encoding(编码映射)
  • • 使用fontTools 4.58.0和手动二进制解析双重验证
关键发现
CFF组件
内容
可恢复性
Charset
全部是.null/space/nonmarkingreturn等通用名
不可恢复
CharStrings
纯Type 2字节码绘图程序(贝塞尔曲线路径)
无语义信息
Encoding
仅1字节码点(0-255),映射到ASCII范围
无法表达CJK Unicode
String INDEX
仅2-3个自定义字符串(.null、字体名)
无Unicode线索
ToUnicode (PDF层)
部分有(只映射空格),部分完全缺失
已被破坏

结论:CFF字体程序内部不包含任何可用的Unicode信息,无法从字体数据直接恢复文字。

字形数量分布
字形数/字体
字体数
字形数/字体
字体数
1
26
9
10
2
12
10
11
3
22
11~14
27
4
13
15~18
10
5
22
21
1
6
14
22
1
7
13
合计197
8
16

总字形数 = 1301(所有FakeFont字形之和),几乎等于页面字符数1297。

正向转换器实现方案

核心原理:对PDF中每个字体对象,添加/替换假的ToUnicode CMap,使文字提取通道失效,同时不触及字形轮廓数据。

关键发现:对于Type0字体(如STSongStd-Light),原本可能没有ToUnicode而是靠/Encoding(如GBK-EUC-H)解码。单纯删除ToUnicode无效,必须添加假的ToUnicode覆盖Encoding回退路径。

正向转换器假ToUnicode CMap设计

FAKE_TO_UNICODE_CMAP = b"""/CIDInit /ProcSet findresource begin12 dict beginbegincmap/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def/CMapName /Adobe-Identity-UCS def/CMapType 2 def2 begincodespacerange<00> <FF>          # 1字节编码空间<0000> <FFFF>      # 2字节编码空间endcodespacerange2 beginbfchar<20> <0020>        # 空格 → 空格<0020> <0020>      # 2字节空格 → 空格endbfcharendcmapCMapName currentdict /CMap defineresource popendend"""

设计要点:

  • • 覆盖1字节和2字节编码空间,确保所有编码都被假CMap接管
  • • 仅映射0x20→空格,其余编码未映射→复制时得到空白/乱码
  • • 使用Adobe-Identity-UCS标准CMap名称,兼容所有PDF阅读器

正向转换器实现代码

正向转换函数forward_convert(input_pdf, output_pdf)

  • • 用pikepdf打开PDF
  • • 遍历所有页面的字体资源
  • • 对每个字体对象设置/ToUnicode为假CMap流
  • • 保存为新PDF

验证函数verify_forward(input_pdf, protected_pdf)

  • • 对比原始和防复制PDF的文字提取结果
  • • 渲染对比验证视觉一致性
  • • 检查中文是否已被破坏

正向转换器测试结果

验证项
原始PDF
防复制PDF
结果
页数
2
2
✓ 一致
渲染尺寸
一致
一致
✓ 视觉不变
文字提取
改变中国影响世界...ֻ两个月ࢃğ༝࣍...
✓ 已乱码
含中文
✓ 已破坏

看看实际效果吧:

正向转换器的局限

  1. 1. 未实现"每字一字体":当前方案只破坏ToUnicode,未做字体子集化重编码
  2. 2. 理论上可被ToUnicode重建工具修复:如PDFontFixer等工具可通过OCR重建映射
  3. 3. 更彻底的方案需要用fontTools做字体子集化+字符编码重映射+重写内容流

逆向恢复为什么不能用纯字体数据分析

CFF分析已证实:

  • • 字形名全部混淆(.null/space),无uniXXXX编码名
  • • 无ToUnicode或ToUnicode被伪造
  • • CharStrings是纯绘图程序,无语义信息
  • • 唯一恢复途径:OCR渲染图 + 位置匹配建立映射表

逆向恢复实现方案

防复制PDF    │    ├── PyMuPDF get_text('rawdict') ──→ 每个字符的(font, code, bbox)    │                                        ↓    ├── PyMuPDF render(2x) ──→ 高清图片    │    │                                        │    └── PaddleOCR ──→ OCR文本行(bbox, text) │                                             │                          bbox位置匹配 ←─────┘                              ↓                   (font, code) → 汉字 映射表                              ↓                   遍历全部字符 → 还原全文TXT

逆向恢复关键技术点

原始字符提取

使用PyMuPDF的get_text('rawdict')而非get_text('dict')

  • • rawdict返回的'c'字段是原始字节按latin1解释的字符
  • • ord(c['c'])得到字形编号(0x01, 0x02等)
  • • 每个字符附带bbox(页面坐标)和font(字体名)
CropBox扩展

测试PDF的页面有rotation=270°且CropBox小于MediaBox:

  • • 默认渲染会裁剪掉CropBox外的文字
  • • 解决方案:临时将CropBox设为MediaBox,渲染后恢复
page.set_cropbox(page.mediabox)pix = page.get_pixmap(matrix=fitz.Matrix(scale, scale))page.set_cropbox(original_cropbox)  # 恢复
PaddleOCR 3.x API适配

PaddleOCR 3.4.0有重大API变更:

  • • show_logcls参数已移除
  • • 使用predict()而非ocr()接口
  • • 返回格式从[bbox, (text, conf)]变为分离字段:
    • • dt_polys: list of np.ndarray shape (4,2),4角点像素坐标
    • • rec_texts: list of str,识别文本
    • • rec_scores: list of float,置信度

初始化参数:

ocr = PaddleOCR(    lang='ch',    use_doc_orientation_classify=False,    use_doc_unwarping=False,    use_textline_orientation=False,)
bbox匹配算法

OCR返回4角点坐标,PyMuPDF返回矩形bbox,需要转换匹配:

  1. 1. 坐标转换:OCR像素坐标 ÷ 缩放倍数 + 渲染区域偏移 = 页面坐标
  2. 2. 匹配条件
    • • 垂直:字符中心在OCR行的垂直范围内(带50%行高容差)
    • • 水平:字符bbox与OCR行bbox有重叠
  3. 3. 对齐策略
    • • 数量一致:1:1逐一对齐
    • • 数量不一致:按比例插值对齐(按x坐标排序)
  4. 4. 投票机制:同一(font, code)可能被多个OCR行匹配,取投票最多的汉字
文本重建
  • • 按字符的(y_center, x_center)排序成阅读顺序
  • • 估算行高(取字符高度中位数)
  • • 相邻字符y差超过0.8倍行高时插入换行
  • • 未映射的字符用标记

逆向恢复测试结果

指标
数值
总字符数
1,334
中文字符(正确恢复)
406
未映射(□)
882
恢复率
31.5%
映射条目数
429
覆盖字体数
73

恢复的部分文字样例:女娲石头宇宙芦柴

实际效果:

网络资料调研

PDFontFixer工具

发现了一个专门工具 PDFontFixer v1.5(52pojie.cn论坛):

  • • 原理与本研究的逆向恢复方案完全一致
  • • 用OCR识别PDF中每个字形的Unicode编码
  • • 将编码做成ToUnicode映射表保存到PDF字体中
  • • 使用轻量OCR小模型,CPU即可快速识别印刷体汉字
  • • 实测准确率接近100%(不含特殊符号)
  • • 人工审核OCR结果并进行个别校正

结论

FakeFont防复制的本质是利用PDF双通道模型的分离性

  • • 视觉通道(字形轮廓)保持完整 → 显示正常
  • • 语义通道(ToUnicode映射)被破坏 → 复制乱码

目标
可行性
方法
正向转换(普通→防复制)
✓ 已实现
破坏/伪造ToUnicode CMap
逆向恢复(不用OCR)
✗ 不可行
CFF内部无Unicode信息
逆向恢复(OCR辅助)
✓ 已实现
OCR渲染图+位置匹配建立映射表
100%恢复率
部分可行
需要更稳定的OCR+多页处理+精确匹配

写在最后

通俗一点说吧就是已有一个PDF文件,将文字以随机长度,嵌入一一个字库,因为只有几个字,所以就可以1,2,3这样排,而字型维持原来的轮廓,所以去复制,无论什么字都是0x01,0x02之类的;加密看起来比较好弄,AI搞出来的脚本,已经勉强可用了;要恢复 ,确实是可行的,只是AI没干到底,但文件如果嵌入字体太多也麻烦的很;PDFontFixer v1.5这个程序做的更好一点,但因为没提供全自动识别功能,所以也不太可用

纯兴趣,到此为止吧

尽信AI不如无AI,不用AI迟早卖白菜。

------------END ------------  

相逢是缘,都看到这里了就关注下再走吧。

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