0

我想将我的源文件夹分成两个:包含您在地址栏中键入的代码的文件夹以及构成页面部分(磁贴)和其他代码(类等)的文件夹。所以在我添加的每个 php 文件的开头:

<?php
// index.php
include("config.php");
include("session.php");
?>

到目前为止,配置只包含这个,但如果我需要其他目录(日志等),我可以扩展

<?php
// config.php
$_PATHS["base"]      = dirname(dirname(__FILE__)) . "\\";
$_PATHS["includes"]  = $_PATHS["base"] . "includes\\";
ini_set("include_path", "$_PATHS[includes]");
?>

session 在构造函数中除其他外还有对session_start. 它还需要包含在其他地方的其他类 - 这需要在会话包含之前列出配置。但是我得到了错误

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started ...

如果我围绕该特定错误切换包含,但我需要开始手动修改指向头文件的链接。无论如何先设置目录并且仍然能够使用会话还是必须session_start是文件包含的第一件事?

4

2 回答 2

3

该错误的其余部分告诉您问题出在哪里!您可能在 config.php 的末尾有一些尾随空格。

(无论是那个,还是 session.php 在您调用之前发送输出到session_start(),但我现在真的只是在猜测 :)

于 2009-07-13T22:18:32.443 回答
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 错误。如果您有兴趣,请参见此处 - UTF-8 错误

于 2009-07-13T23:19:25.970 回答