今天来说说install.php这个文件里的一行,大概是52行,ob_start();

首先,看看这个ob_start函数做什么的。在执行某个函数之后,如果会有echo等操作,这些echo出来的内容会立刻返回给浏览器,所以可以让这些内容暂时存放在buffer里, 也就是缓冲区,然后等到合适的时候,手动发送(flush)这些内容到浏览器。

好,为什么Tyecho要用到这个函数呢,因为有报错,在这里,
http://forum.typecho.org/viewtopic.php?f=24&t=10481
https://github.com/typecho/typecho/issues/644
然后就有了一个修复,https://github.com/typecho/typecho/commit/f2dc80592e20b4ddaff7079cce9ac4ff8aaffbeb

但问题来了,这个fix会删去对ob_end_flush函数的调用,至于为什么,因为文档里有这么一段话:

https://www.php.net/manual/en/function.ob-end-flush.php
ob_end_flush() isn't needed in MOST cases because it is called automatically at the end of script execution by PHP itself when output buffering is turned on either in the php.ini or by calling ob_start().
简单翻译就是,这个ob_end_flush会在php脚本结束的时候自动调用,只要这个缓冲(output buffering)被开启了。
注意,这个output buffering可以在php.ini里开启,也可以在代码里用ob_start()开启。

但这个评论被downvote了,不知道为什么。

但不管怎样,这个install.php只有ob_start,这个也正说明了会有一个自动的发送buffer到浏览器的过程,不用你手动发送(flush,send)的。

这个问题,困扰了我两天。

至于这个install.php的处理方式是否是最好的,我觉得怎么说呢,这个文件是一次性用品,所以粗糙一点也未尝不可,只要一切顺利。写代码还是要看个费效比的。
我会对这个安装流程做修改,但这现在不是最优先的事项。

最后,这个install文件有漏洞,所以最终还是需要考虑重构这个安装过程的。

标签: Typecho, 源码分析

添加新评论