PHP生成FIT训练文件时出现头部大小错误该如何解决?
现有代码的操作错误
你使用fit-php库的方式存在多处不符合FIT协议规范的问题,直接导致头部校验失败:
- 文件类型混用:你通过
$data->setFile(\Fit\FileType::activity)设置文件类型为activity,但是file_id中的type又赋值为\Fit\FileType::workout,两类文件的头部结构、必填字段完全不同,直接触发头部大小校验错误。如果你要生成Wahoo的训练计划文件,需要统一使用workout类型,且不能添加activity专属的record、session、event消息,应该使用workout、workout_step这类训练计划专属消息结构。 - 时间戳计算错误:FIT协议标准的时间纪元是1989年12月31日00:00:00 UTC,你使用
mktime计算偏移时采用的是本地时区,得到的时间戳存在时区偏移,会破坏头部的时间字段校验。 - 数值类型不匹配:FIT协议中心率、功率、踏频均为整数类型,你传入的
99.75、112.5这类浮点数会导致库写入时长度计算错误,打乱头部和数据段的长度对应关系,最终提示头部大小错误。 - 缺失必填字段:无论是activity还是workout类型的FIT文件,都有多个强制必填字段你未填写,比如workout类型必须包含的
workout消息下的num_valid_steps、sport字段,结构不完整也会导致头部解析失败。
可用的PHP生成FIT文件的开源库
- 官方GARMIN FIT SDK PHP版:完全符合最新FIT协议标准,对各类FIT文件的兼容性最好,不存在平台解析问题。
- php-fit轻量实现:专门优化了运动训练类FIT文件的生成逻辑,文档清晰,适合小体量场景使用。
- 骑行场景专属fit-encoder:针对骑行训练计划做了字段封装,不需要手动处理过多底层协议细节。
Wahoo官方反馈:您的base64编码、数据链接和请求格式均正确,但FIT文件存在问题导致我方云服务无法解析,错误原因是“Incorrect header size(头部大小错误)”。建议更换其他工具生成FIT文件,生成合法文件后请求即可正常运行。
内容的提问来源于stack exchange,提问作者Doctor Pi
相关产品推荐
相关产品推荐

