删除空格后,PHP标头在MAMP中不起作用

时间:2012-08-20 06:43:26

标签: php mysql redirect header mamp

我正在使用MAMP,由于某些原因我没有在php中使用标头重定向,如果有什么问题,有人可以查看下面的代码吗?

我看过类似的帖子,发现它是由标题标记之前的一些空格引起的,但在我的情况下却不是。

请提出建议... thanx

<?php

$host="localhost"; // Host name 

$username="root"; // Mysql username 

$password="root"; // Mysql password 

$db_name="DBase"; // Database name 

$tbl_name="customers"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from the form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

$myusername = stripslashes($myusername);
$mypassword = md5($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE Username='$myusername' and Password='$mypassword'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){
session_register("myusername");
session_register("mypassword"); 
header("location:/Account/index.php");
}
else {
echo "Wrong Username or Password.";
}
?>

3 个答案:

答案 0 :(得分:4)

我在MAMP中遇到了同样的问题,结果发现在我的php.ini配置文件中禁用了output_buffering。我所要做的就是把它重新打开。

php.ini中的

找到这一行:

output_buffering = Off

并将其更改为:

output_buffering = 4096

然后重启MAMP

请参阅此帖子了解更多详情: http://hibbard.eu/php-headerlocation-not-working-in-mamp/

答案 1 :(得分:2)

header('Location: http://example.com/Account/index.php');
exit;

是实现此目的的一种方法,但您可以使用输出缓冲来解决此问题,所有输出到浏览器的开销都将缓冲在服务器中,直到您发送它为止。您可以通过在脚本中调用ob_start()ob_end_flush(),或在php.ini或服务器配置文件中设置output_buffering配置指令来执行此操作。

编辑和附录解决方案:------&gt;

您可以将输出缓冲用作

    <?php
    ob_start();
    $host="localhost"; // Host name 

$username="root"; // Mysql username 

$password="root"; // Mysql password 

$db_name="DBase"; // Database name 

$tbl_name="customers"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from the form 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

$myusername = stripslashes($myusername);
$mypassword = md5($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE Username='$myusername' and Password='$mypassword'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){
session_register("myusername");
session_register("mypassword"); 
header("location:/Account/index.php");
}
else {
echo "Wrong Username or Password.";
}
    ob_end_flush();
    ?>

问题是我们在开始发送输出后无法发送标头。为了解决这个问题,我们缓冲输出。函数ob_start打开输出缓冲。当输出缓冲处于活动状态时,不会从脚本(标头除外)发送输出,而是将输出存储在内部缓冲区中。所以回声输出将被缓冲。接下来我们发送标题没有任何问题,因为我们还没有吐出任何输出。最后,我们调用ob_end_flush来刷新内部缓冲区内容并停止输出缓冲。

答案 2 :(得分:0)

它应该是这样的:

header('Location: http://example.com/Account/index.php');
exit;