缘由
今天又进行了一次php下载docx文件,由于其中更改了一个函数,居然又出现了如题的现象,由于之前遇到过这个问题,并且还搜索过许多相关的解决办法,我自己之前还写了一个自己解决的总结,于是今天就到处查找echo,print,var_dump之类能输出信息的地方,全部屏蔽了仍然无用。
过程
又到处搜索学习一番,学习了很多种下载文件的办法。记录如下:
- 强制下载核心代码如下:
header ("Content-Type: application/force-download");
header ('Content-Disposition: attachment;filename="'.$filename.'"');
readfile ($filename);
无用,打开仍然是如题现象。
- 用二进制工具比较服务器与下载下来的文件,发现服务器的能正常打开,下载下来的不能打开,二者二进制有好几处不同。用winhex对开头及结尾二进制进行了部分恢复式修改(对照服务器中的源文件docx),现象如故。
- 反复检查网页是否存在html残留的信息,没有。
- 将那个函数换回原来的,就正常。
- 单独调试这个新函数(分词与余弦匹配),运行速度还可以。
- 将函数融入php主文件时再调试,发现运行速度有所下降。看来这个函数对于大数据的处理还是有所延迟的。
解决
- 突然灵光一现,是不是原来的函数运行快,下载时秒下,因而无问题。也就是现在的函数运行大数据时慢,结果网页输出的内容部分未清空,也跟着下载下来了?这个感觉有点类似echo之类的效果。
- 发现这个问题后,那首要做的事就是清空缓存,下载之前加上这个代码试试:
ob_end_clean();
完美!直接解决了这个问题。
结论
对于运行速度慢的自定义函数,要将运行结果下载的话,最好是先清空缓存,否则容易出现如题现象。