当前位置:首页>python>Python遥感实战1 | 多光谱 + 热红外联用:快速测算区域植被水分胁迫(TVDI 全流程解析)

Python遥感实战1 | 多光谱 + 热红外联用:快速测算区域植被水分胁迫(TVDI 全流程解析)

  • 2026-08-19 16:09:14
Python遥感实战1 | 多光谱 + 热红外联用:快速测算区域植被水分胁迫(TVDI 全流程解析)

在农业灌溉调度、生态干旱监测中,植被水分胁迫程度是核心评估指标。传统定点监测覆盖范围有限、时效性不足,而基于遥感的温度植被干旱指数(TVDI),能快速输出大范围、空间连续的干旱分级结果,是当前高植被覆盖区旱情监测的主流实用方法。

本次我们以研究区多光谱与热红外数据为基础,完整实现从 NDVI 计算、干湿边拟合到 TVDI 干旱分级的全流程,并附上可直接运行的 Python 代码,同时对结果进行空间解读。

最终结果输出

TVDI 连续值遥感图

干旱等级分类图

一、TVDI 的核心逻辑:NDVI+LST 的特征空间法

要理解 TVDI,先要清楚两个基础指标:

NDVI(归一化植被指数)

:通过红光与近红外波段计算,数值越高代表植被覆盖越茂盛、长势越好。

LST(地表温度)

:热红外影像反演得到的地表温度。植被冠层温度直接反映其水分状态 —— 水分充足的植被通过蒸腾散热,冠层温度更低;缺水胁迫的植被气孔关闭,蒸腾减弱,温度显著升高。

当我们把区域内所有像元的 NDVI 作为横轴、LST 作为纵轴绘制散点,会形成近似三角形的特征空间,存在两条关键边界:

干边

:同一 NDVI 水平下的温度上限,代表植被遭受严重水分胁迫、蒸腾作用受抑制的极端干旱状态。

湿边

:同一 NDVI 水平下的温度下限,代表植被水分充足、蒸腾旺盛的最优水分状态。

基于这两条边界,TVDI 的计算公式为:

TVDI = (当前像元 LST - 对应 NDVI 下的湿边温度) / (干边温度 - 湿边温度)

计算结果被归一化到 0~1 区间:

TVDI 越接近 0:水分越充足,胁迫越轻

TVDI 越接近 1:水分胁迫越强,干旱越严重

二、数据处理全流程

输入数据

多光谱影像:包含红光、近红外等波段,用于计算 NDVI

热红外 LST 影像:地表温度反演结果,提供全域温度数据

处理步骤

NDVI 计算

:从多光谱影像提取红光、近红外波段,逐像元计算 NDVI 植被指数

空间对齐

:将热红外 LST 影像重投影、重采样,与多光谱影像的坐标系、像元大小完全匹配

有效像元过滤

:剔除 NDVI 异常值与温度异常值,保留 0.15~0.95 范围内的植被像元用于干湿边拟合

干湿边提取与拟合

:将 NDVI 分为 35 个区间,每个区间取 95% 分位温度作为干边点、5% 分位温度作为湿边点,对两组点分别进行线性拟合,得到干湿边方程

TVDI 计算与分级

:逐像元计算 TVDI 值,并按阈值划分为 5 个干旱等级

结果输出

:生成 TVDI 连续值栅格与干旱等级分类栅格

拟合结果

修改脚本中默认的输入输出路径后直接运行,即可自动完成全部计算。本次研究区拟合得到的干湿边线性方程为:

干边:LST = -285.967 × NDVI + 476.827

湿边:LST = -20.541 × NDVI + 260.147

干边斜率的绝对值远大于湿边,符合植被蒸腾的物理规律:随着植被覆盖度提升,干旱状态下的冠层温度下降幅度更显著。

三、结果解读:空间分布特征

1. TVDI 连续值分布

(配图:TVDI 连续值遥感图)深紫色代表低 TVDI(水分充足),亮黄色代表高 TVDI(严重胁迫)。
从整体分布来看,研究区大部分区域 TVDI 低于 0.2,整体水分条件良好。高值胁迫区集中在研究区北部的建设用地、裸地区域,这类区域植被覆盖低,地表升温快,表现出明显的高温胁迫特征;中南部连片农田区域 TVDI 普遍偏低且空间均匀,说明作物长势一致,水分供应充足。
田埂、道路等线性地物的 TVDI 明显高于周边农田,与实际地物特征高度吻合,也验证了计算结果的可靠性。

2. 干旱等级分级结果

(配图:干旱等级分类图)为了更直观地评估旱情,我们将 TVDI 划分为 5 个干旱等级:
等级
TVDI 区间
干旱程度
1 级
0.0~0.2
无胁迫(水分充足)
2 级
0.2~0.4
轻度胁迫
3 级
0.4~0.6
中度胁迫
4 级
0.6~0.8
重度胁迫
5 级
0.8~1.0
极重度胁迫
从分级结果可以清晰看到:

无胁迫区域(蓝色)

:占比最高,集中在中南部连片农田,是研究区的主体地类,植被生长水分条件优异。

轻度胁迫区域(绿色)

:多分布在田块边缘、植被过渡带,属于农田与非植被的交界区域,胁迫程度轻微。

中度及以上胁迫区域

:集中分布在研究区北部,以居民点、工矿用地和裸地为主,属于非植被的高温区域;农田内部零星分布的小斑块,可作为精准灌溉的重点排查区域,大概率是局部灌溉不均或作物长势差异导致。

四、应用价值与优化方向

核心应用场景

精准农业灌溉

:识别田间缺水斑块,指导差异化变量灌溉,在节约水资源的同时保障作物产量。

生态旱情监测

:大范围评估林草植被的水分胁迫状况,为区域生态保护、旱灾预警提供定量数据支撑。

灾害应急评估

:旱情发生后快速获取受灾范围与严重等级,辅助救灾决策与灾情统计。

完整 Python 实现代码

本次计算基于 Python 开源遥感栈实现,依赖numpy和rasterio库,可通过以下命令安装依赖:
pip install numpy rasterio
完整可运行脚本如下,支持通过命令行参数修改输入输出路径、波段索引、拟合参数等配置:
import argparseimport mathimport osimport numpy as npimport rasteriofrom rasterio.enums import Resamplingfrom rasterio.warp import reprojectdef parse_args():    parser = argparse.ArgumentParser(        description="Compute TVDI / CWSI from multispectral and thermal raster inputs."    )    parser.add_argument(        "--multispectral",        default=r"D:\data\MultiSpectral\0707\result1.tif",        help="Path to multispectral input raster with Red and NIR bands.",    )    parser.add_argument(        "--thermal",        default=r"D:\data\MultiSpectral\0708s\TIR_LST20260708.tif",        help="Path to thermal LST input raster.",    )    parser.add_argument(        "--output-dir",        default=r"D:\data\MultiSpectral\output",        help="Directory where TVDI and drought class outputs will be written.",    )    parser.add_argument(        "--nir-band",        type=int,        default=3,        help="Band index for NIR in the multispectral file (1-based).",    )    parser.add_argument(        "--red-band",        type=int,        default=2,        help="Band index for Red in the multispectral file (1-based).",    )    parser.add_argument(        "--min-ndvi",        type=float,        default=0.15,        help="Minimum NDVI threshold for edge estimation and TVDI calculation.",    )    parser.add_argument(        "--max-ndvi",        type=float,        default=0.95,        help="Maximum NDVI threshold for edge estimation.",    )    parser.add_argument(        "--bin-count",        type=int,        default=35,        help="Number of NDVI bins used for dry/wet edge extraction.",    )    parser.add_argument(        "--dry-threshold",        type=float,        default=0.95,        help="Percentile used to select the dry-edge temperature within each NDVI bin.",    )    parser.add_argument(        "--wet-threshold",        type=float,        default=0.05,        help="Percentile used to select the wet-edge temperature within each NDVI bin.",    )    return parser.parse_args()def reproject_to_match(source_path, target_profile):    with rasterio.open(source_path) as src:        dest = np.full((target_profile["height"], target_profile["width"]), np.nan, dtype=np.float32)        reproject(            source=rasterio.band(src, 1),            destination=dest,            src_transform=src.transform,            src_crs=src.crs,            dst_transform=target_profile["transform"],            dst_crs=target_profile["crs"],            resampling=Resampling.bilinear,            src_nodata=src.nodata,            dst_nodata=np.nan,        )    return destdef calculate_ndvi(red, nir):    red = red.astype(np.float32)    nir = nir.astype(np.float32)    denom = nir + red    with np.errstate(divide="ignore", invalid="ignore"):        ndvi = (nir - red) / denom    ndvi[denom == 0] = np.nan    return ndvidef fit_edge(ndvi_values, lst_values, bin_count, quantile):    valid = ~np.isnan(ndvi_values) & ~np.isnan(lst_values)    ndvi_values = ndvi_values[valid]    lst_values = lst_values[valid]    if ndvi_values.size == 0:        raise ValueError("No valid NDVI/LST pixels for edge fitting.")    bins = np.linspace(np.nanmin(ndvi_values), np.nanmax(ndvi_values), bin_count + 1)    bin_centers = []    edge_lst = []    for left, right in zip(bins[:-1], bins[1:]):        mask = (ndvi_values >= left) & (ndvi_values < right)        if mask.sum() < 50:            continue        values = lst_values[mask]        edge_value = np.nanpercentile(values, quantile)        if np.isfinite(edge_value):            bin_centers.append((left + right) / 2.0)            edge_lst.append(edge_value)    if len(bin_centers) < 2:        raise ValueError("Not enough bins with valid values to fit a line.")    slope, intercept = np.polyfit(bin_centers, edge_lst, 1)    return slope, intercept, np.array(bin_centers), np.array(edge_lst)def calculate_tvdi(lst, ndvi, dry_line, wet_line):    dry_slope, dry_intercept = dry_line    wet_slope, wet_intercept = wet_line    lst_dry = dry_slope * ndvi + dry_intercept    lst_wet = wet_slope * ndvi + wet_intercept    denom = lst_dry - lst_wet    with np.errstate(divide="ignore", invalid="ignore"):        tvdi = (lst - lst_wet) / denom    tvdi[denom == 0] = np.nan    tvdi = np.clip(tvdi, 0.01.0)    return tvdidef classify_tvdi(tvdi):    classes = np.full(tvdi.shape, 0, dtype=np.uint8)    valid = ~np.isnan(tvdi)    classes[(tvdi >= 0.0) & (tvdi < 0.2)] = 1    classes[(tvdi >= 0.2) & (tvdi < 0.4)] = 2    classes[(tvdi >= 0.4) & (tvdi < 0.6)] = 3    classes[(tvdi >= 0.6) & (tvdi < 0.8)] = 4    classes[(tvdi >= 0.8) & (tvdi <= 1.0)] = 5    classes[~valid] = 0    return classesdef save_raster(path, array, profile, dtype, nodata=None, compress="lzw"):    profile = profile.copy()    profile.update(        dtype=dtype,        count=1,        compress=compress,        nodata=nodata,    )    with rasterio.open(path, "w", **profile) as dst:        dst.write(array.astype(dtype), 1)def main():    args = parse_args()    os.makedirs(args.output_dir, exist_ok=True)    with rasterio.open(args.multispectral) as ms:        red = ms.read(args.red_band).astype(np.float32)        nir = ms.read(args.nir_band).astype(np.float32)        ms_profile = ms.profile    ndvi = calculate_ndvi(red, nir)    print(f"Computed NDVI from bands {args.red_band} and {args.nir_band}.")    lst = reproject_to_match(args.thermal, ms_profile)    print(f"Reprojected thermal raster to multispectral grid ({lst.shape}).")    valid_mask = (        ~np.isnan(ndvi)        & ~np.isnan(lst)        & (ndvi >= args.min_ndvi)        & (ndvi <= args.max_ndvi)        & (lst > 0)        & (lst < 500)    )    if valid_mask.sum() < 1000:        raise RuntimeError("Too few valid pixels for edge estimation after masking.")    ndvi_for_edge = ndvi[valid_mask]    lst_for_edge = lst[valid_mask]    dry_line = fit_edge(ndvi_for_edge, lst_for_edge, args.bin_count, 100 * args.dry_threshold)    wet_line = fit_edge(ndvi_for_edge, lst_for_edge, args.bin_count, 100 * args.wet_threshold)    dry_slope, dry_intercept, dry_centers, dry_values = dry_line    wet_slope, wet_intercept, wet_centers, wet_values = wet_line    print("Dry edge: LST = {:.3f} * NDVI + {:.3f}".format(dry_slope, dry_intercept))    print("Wet edge: LST = {:.3f} * NDVI + {:.3f}".format(wet_slope, wet_intercept))    tvdi = calculate_tvdi(lst, ndvi, (dry_slope, dry_intercept), (wet_slope, wet_intercept))    classification = classify_tvdi(tvdi)    tvdi_path = os.path.join(args.output_dir, "TVDI_20260708.tif")    class_path = os.path.join(args.output_dir, "Drought_Class_20260708.tif")    save_raster(tvdi_path, tvdi.astype(np.float32), ms_profile, dtype=rasterio.float32, nodata=np.nan)    save_raster(class_path, classification, ms_profile, dtype=rasterio.uint8, nodata=0)    print(f"Saved TVDI raster to {tvdi_path}")    print(f"Saved drought class raster to {class_path}")    print("Drought classes: 0=invalid, 1=no stress, 2=light, 3=moderate, 4=severe, 5=extreme")if __name__ == "__main__":    main()

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 20:00:34 HTTP/2.0 GET : https://f.mffb.com.cn/a/504655.html
  2. 运行时间 : 0.247529s [ 吞吐率:4.04req/s ] 内存消耗:4,642.21kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=0c1885097955911bc7698f022ee53194
  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.000999s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001328s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.005253s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.001769s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001492s ]
  6. SELECT * FROM `set` [ RunTime:0.004728s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001501s ]
  8. SELECT * FROM `article` WHERE `id` = 504655 LIMIT 1 [ RunTime:0.004791s ]
  9. UPDATE `article` SET `lasttime` = 1787313634 WHERE `id` = 504655 [ RunTime:0.002046s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000630s ]
  11. SELECT * FROM `article` WHERE `id` < 504655 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001068s ]
  12. SELECT * FROM `article` WHERE `id` > 504655 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001878s ]
  13. SELECT * FROM `article` WHERE `id` < 504655 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.021750s ]
  14. SELECT * FROM `article` WHERE `id` < 504655 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.015118s ]
  15. SELECT * FROM `article` WHERE `id` < 504655 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.005337s ]
0.251076s