2012-08-20 2 views
1

Я использую MAMP, и по какой-то причине я не перенаправляюсь с использованием заголовка в php, может кто-нибудь, пожалуйста, взгляните на следующий код, если в нем что-то не так? ??PHP-заголовок не работает в MAMP даже после удаления пробела

Я прочитал похожие сообщения и обнаружил, что это вызвано чем-то вроде пробела перед тегом заголовка, но в моем случае это не так.

Пожалуйста, дайте ваши советы ... спасибо

<?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."; 
} 
?> 

ответ

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

это один из способов сделать это, но вы можете использовать буферизацию вывода, чтобы получить вокруг этой проблемы, с накладными расходами на весь ваш вывод, чтобы браузер буферизовался на сервере, пока вы его не отправите. Вы можете сделать это, вызвав ob_start() и ob_end_flush() в свой скрипт или указав директиву конфигурации output_buffering в файлах конфигурации php.ini или сервера.

EDIT И ДОБАВЛЯТЬ РЕШЕНИЕ: ------>

Вы можете использовать буферизацию в

<?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, чтобы очистить содержимое внутреннего буфера и остановить буферизацию вывода.

+0

- это то, что можно привести пример в моем сценарии, где именно использовать выше функции ??? – sohal07

+1

Это отличный @Ziinloader - ob_start(); функция - это то, что мне нужно для совместимости с MAMP. Хорошая работа! и спасибо за подробное объяснение - это действительно помогает. – itsricky

0

Это должно быть что-то вроде этого:

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

Он также работает с относительными URL-адресами –

+0

Да, большинство браузеров пытаются исправить недопустимые заголовки «Местоположение», точно так же, как они исправляют неверный HTML. –

+0

Спасибо Vicario, , но я использую локальный сервер «MAMP». – sohal07

4

У меня была та же проблема в MAMP, и оказалось, что output_buffering отключен в моем конфигурационном файле php.ini. Все, что я должен был сделать, это снова включить его.

в php.ini найти эту строку:

output_buffering = Off 

и изменить его на:

output_buffering = 4096 

Затем перезапустите MAMP

Пожалуйста, смотрите этот пост для более подробной информации: http://hibbard.eu/php-headerlocation-not-working-in-mamp/

Смежные вопросы