我已将托管服务器从Windows更改为Linux系统。但是当我运行我的PHP程序时,我得到了这个错误:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/content/p/y/c/francis/html/login/login.php:2) in /home/content/p/y/c/francis/html/login/login.php on line 4
和
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/content/p/y/c/francis/html/login/login.php:2) in /home/content/p/y/c/francis/html/login/login.php on line 4
这是我的程序代码:
<?php
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
if ($username && $password)
{
$connect = mysql_connect(***,***,***);
mysql_select_db("phploginregister") or die("Couldn't find db");
$query = mysql_query("SELECT * FROM users WHERE username='$username'");
$numrows = mysql_num_rows($query);
if ($numrows != 0)
{
while ($row = mysql_fetch_assoc($query))
{
$dbusername = $row['username'];
$dbpassword = $row['password'];
}
//check to see if they match!
if ($username == $dbusername && md5($password) == $dbpassword)
{
echo "You're in! <a href='member.php'>Click</a> here to enter the member page.";
$_SESSION['username'] = $dbusername;
}
else
echo "Incorrect password";
}
else
die("That user doens't exist!");
}
else
die("Please enter an username and password");
?>
代码有什么问题,因为它在Windows主机上很好用......
答案 0 :(得分:4)
您收到错误是因为在启动session_start()之前有一些输出;这可能是由于您的编辑器在文件开头包含BOM字符而引起的。尝试打开记事本中的代码,看看session_start(),(空格)之类的行之前是否有任何行,并删除它们。
要修改编辑器,如果它在您的文件中添加了一个bom,您需要转到您的设置并将其关闭。
答案 1 :(得分:2)
在开放<?php
标记之前,您有一个领先的BOM,新行或其他空白字符。
错误涉及line 2
和line 4
,但在session_start()
上调用line 3
上面的实际代码。因此,领先的空白就是问题......
答案 2 :(得分:-1)
我认为你应该添加
ob_start();
在代码的第一个
中并在底部添加
ob_get_contents();
ob_end_flush();
因为
会话向服务器发送标头,你也添加了echo(这也告诉服务器它的带有标题的html)
服务器现在必须使用标头,因此请使用ob_start();
和ob_end_flush();
工作:)