我想将我的源文件夹分成两个:包含您在地址栏中键入的代码的文件夹以及构成页面部分(图块)和其他代码(类等)的文件夹。所以在我添加的每个php文件的开头:
<?php
// index.php
include("config.php");
include("session.php");
?>
到目前为止,Config只包含这个,但如果我需要其他目录(日志等),我可以扩展它。
<?php
// config.php
$_PATHS["base"] = dirname(dirname(__FILE__)) . "\\";
$_PATHS["includes"] = $_PATHS["base"] . "includes\\";
ini_set("include_path", "$_PATHS[includes]");
?>
在构造函数中,会话还有一个对session_start
的调用。它还需要包含在其他地方的其他类 - 这需要在包含会话之前列出配置。但是我收到了错误
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started ...
如果我切换包围,那个特定的错误就会消失,但我需要手动重新启动链接到头文件。无论如何设置目录并且仍然可以使用会话或者session_start
必须是文件包含的第一件事吗?
答案 0 :(得分:3)
该错误的其余部分是确切位,它将告诉您问题出在哪里!有可能在config.php的末尾有一些尾随空格。
(或者,或者session.php在你致电session_start()
之前发送输出,但我现在真的只是猜测:)
答案 1 :(得分:1)
我不知道你是否已经尝试过这个,但作为一种测试手段,删除了config.php包含并将配置代码粘贴在那里。
所以这个:
<?php
// index.php
include("config.php");
include("session.php");
?>
成为这个:
<?php
// config
$_PATHS["base"] = dirname(dirname(__FILE__)) . "\\";
$_PATHS["includes"] = $_PATHS["base"] . "includes\\";
ini_set("include_path", "$_PATHS[includes]");
//index
include("session.php");
?>
如果它有效,那么你的config.php文件有问题* [见下文],如果没有,错误是否仍然指向ini_set行? [根据您的上述评论假设当前错误指向的地方]
*我记得曾经读过一次[前一段时间我承认]一个文件是UTF-8可能搞砸会话。试图找到一个链接
好的,我发现有人提交了有关UTF-8和session_start的错误报告。显然它不是一个错误 - 我没有调查为什么 - 但无论哪种方式它都不是同一个问题。一种UTF-8编码会导致会话错误,而不会导致您获得的cookie错误。 See here if you are interested - UTF-8 Error