我尝试在我的闪存驱动器中使用xampp lite portable,以便我可以将服务器带到任何地方。 但是在使用xampp时我总是遇到错误。特别是这个错误:
Warning: Cannot modify header information - headers already sent by (output started at /path/to/geeklog/public_html/blabla.php:581) in /path/to/geeklog/public_html/system/lib-blablab.php on line 180
我不知道为什么我会收到这个错误。但是当我使用wampserver时。真的没问题。而且我没有任何错误。当我使用xampp时,我需要做些什么才能解决这个问题。 是否有便携版本的wamp
答案 0 :(得分:3)
是否有可能在blabla.php第581行的PHP标签之外有一点点空白?我敢打赌。
如果您在PHP标记之外有任何,请将其发送到浏览器。一旦将某些内容发送到浏览器,您就不能再发送标题(例如sessionID cookies!)。
问题可能不是XAMPP,而是您将PHP代码放在闪存驱动器上。
答案 1 :(得分:3)
要确保您的错误报告级别在不同环境中相同,您可以使用error_reporting()
和ini_set('display_errors', 1)
同时检查你的.php文件,查看开始标记之前和结束标记之后的任何空格。
除了上面提到的要点之外,确保在设置标题之前没有输出任何内容,例如以下代码会产生类似于您收到的错误:
echo 'Hello, World';
header('Location: http://www.somesite.com');
答案 2 :(得分:1)
您在环境之间看到的差异几乎肯定是配置上的差异。
服务器上发生的两件事之一是没有发出警告:
1)Output buffering默认开启
2)设置了error_reporting和/或display_errors,因此您只是没有看到警告。但如果是这种情况,你的标题仍然不会被设置,所以它可能是#1
您可以查看phpinfo()
输出缓冲,启用后,缓冲任何输出(常规内容不在标签内,您回显或打印的任何内容()等)在服务器上,然后一次性将其发送到客户端。
我会在您的便携版本中找到它,找到php.ini,然后尝试打开输出缓冲。或者,您可以通过在脚本顶部附近放置ob_start()
来在运行时打开输出缓冲。
答案 3 :(得分:0)
错误说明:output started at /path/to/geeklog/public_html/blabla.php:581
,所以我会从那里开始。你需要在输出任何内容之前发送所有标题,这包括其他人在这里提到的空格。