ouput buffering confusing me!

时间:2014-09-10 作者:seboettg

我编写了一个与外部ReST API配合使用的插件。可以获得一组JSON格式的帖子,以HTML格式呈现帖子列表。现在我想扩展它,为相关文档(大多数情况下是pdf文件)提供下载链接。理论到此为止。

对于另一个PHP CMS,我编写了一个代理类。此类请求API并获取文档的二进制内容。我正在使用ob_clean() 清除输出缓冲区。我为设置了新标题Content-Disposition: attachment; filename=..., Content-Type 等等为了获取文档,我正在使用curl。它工作得很好。但不是在WordPress中:

Cannot modify header information - headers already sent by (output started at /Users/sebastian/php_workspace/wordpress/wp-includes/admin-bar.php:792) in /Users/sebastian/php_workspace/wordpress/wp-content/plugins/bibsonomy-csl/lib/bibsonomy/CurlHttpRequestProxy.php on line 68
我尝试了不同的方法来删除输出缓冲区,但没有成功。我试过:

while ( ob_get_level() ) {
    ob_end_clean();
}
我还尝试使用PHP的header_remove() 作用什么都不管用。

如何在WordPress中删除输出缓冲区?

1 个回复
最合适的回答,由SO网友:Rarst 整理而成

the_content(), 要筛选的输出是模板标记。它是用来作为HTML页面的一部分。一个页面加载不能同时是HTML页面and PDF下载。

您正在生成的文件下载需要在加载HTML模板之前进行,例如template_redirect 挂钩和exit 之后,执行过程不会输出HTML(否则它会被塞进PDF文件中,很可能会破坏它)。

结束

相关推荐

使用HAPRoxy从MySQL集群运行WordPress

我正在尝试安装wordpress,其中DB将位于MySQL集群(Galera/Percona XtraDB集群)上,并通过HAProxy进行连接。Wordpress安装之外的一切似乎都很好。使用mysql客户端通过用户名和密码连接到数据库就可以了。Wordpress安装与HAProxy位于同一服务器上。在命令行中执行此操作时效果良好:mysql -u wordpress -p<password> -h <haproxy ip> -D wordpress 然而,从insta