Php 使用ob_start和ob_end_flush在全局文件中包含CSS

Php 使用ob_start和ob_end_flush在全局文件中包含CSS,php,ob-start,Php,Ob Start,我的站点上的每个文件都包含一个globals.php文件。我想在这个文件中包括一个CSS文件globals.CSS 问题是,如果在globals.php中添加CSS,然后将其包含在所有文件中,则会出现以下错误: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /...) in /... on

我的站点上的每个文件都包含一个globals.php文件。我想在这个文件中包括一个CSS文件globals.CSS

问题是,如果在globals.php中添加CSS,然后将其包含在所有文件中,则会出现以下错误:

Warning: session_start() [function.session-start]:
Cannot send session cache limiter - headers already sent (output started at /...)
in /... on line 4
或者当使用

header('Location: ....');
是否有比在globals.php顶部使用ob_start和在同一文件底部使用ob_end_flush更好的解决方案,或者这种方法是正确的操作方式

globals.php

<?php
ob_start();

//some costants and functions
?>

<head>
    <link href="/css/globals.css" rel="stylesheet" type="text/css">
</head>

<?php
    ob_end_flush();
?>

如果您正在使用会话,请确保在执行任何其他操作之前调用会话\u start。错误消息表示您在完成某些输出或其他操作后试图调用会话\u start。

您正在刷新globals脚本末尾的缓冲区,关闭缓冲区,因此如果您有以下操作

header('...'); // this will work, no output yet
include('globals.php'); // flushes buffers, stops buffering, starts output
header('...'); // fails with "headers already send"

如果在包含globals文件后执行任何头调用,则globals不应刷新缓冲区。

是的,我正在这样做。。。那么如何在globals.php中包含css文件呢?您所做的一切都很好。只需去掉globals中的ob_end_flush内容。这就是问题的症结所在。好吧,但是如果我在globals.php之后调用ob_start,而没有在globals.php的末尾调用ob_end_flush,它会失败吗?您可以根据需要多次调用ob_start。每个缓冲区将只打开一个新的缓冲区,退出脚本将自动刷新/发送任何仍然打开的缓冲区。从技术上讲,你永远不必自己打电话给end_flush。谢谢你的澄清!我不明白为什么我的问题收到了“-1”。对我来说,这似乎是一个恰当的问题!也许我对这个网站不太了解