如果我的标题页顶部有session_start();
,是否可以在标题页前添加$page_title
?
$page_title = 'Some Title';
include ('../includes/header.php');
答案 0 :(得分:4)
是。只要你没有在它之前输出任何东西,你应该没事......
原因是session_start
发送了一些HTTP标头。因此,如果您已经输出任何内容(包括错误),它将会失败,因此无法启动。
解决这个问题的方法是在文件顶部设置输出缓冲。只需在页面顶部显示ob_start();
即可。这样,无论发生什么(在合理范围内),你应该没问题(因为在任何输出中都会被缓冲区“捕获”,因此不会干扰会话comamnd)......
编辑:根据要求,举例:
<?php
echo 'foo';
include '../includes/header.php';
因为你输出了一些内容所以不会有效......
<?php
include 'non/existant/file.php';
include '../includes/header.php';
不会有效,因为第一个include
语句会发出警告,因为它无法找到该文件...
FooBar<?php
include '../includes/header.php';
由于您手头输出了某些内容(<?php
行之前的文字),因此无效...
<?php
ob_start();
echo 'foo';
include '../includes/header.php';
将起作用,因为输出被缓冲区捕获......
FooBar<?php
ob_start();
include '../includes/header.php';
不会工作,因为输出启动后启动输出缓冲区...
<?php
include 'some/valid/file.php';
include '../includes/header.php';
可能或可能不起作用。这取决于第一个包含的文件输出任何内容。如果确实如此,那么它将不起作用(所以事先投入ob_start()
以确保其有效)...
答案 1 :(得分:1)
session_start();
需要在浏览器有任何实际输出之前出现。通常人们只是为了避免混淆等而将其置于其他任何地方之上,但在这种特殊情况下,由于不输出变量赋值,你会没事的。
答案 2 :(得分:0)
是
在开始会话之前,您无法向浏览器输出任何内容。
E.g。你不能这样做
echo "This will break";
session_start();
这是因为会话是在页眉中设置的,并且通过使用echo / print或类似方法,您在发送页眉之前强制输出,从而破坏了正确启动会话的能力。