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()을 호출하거나 php.ini 또는 서버 구성 파일에서 output_buffering 구성 지시문을 설정하여이 작업을 수행 할 수 있습니다.

편집 및 APPEND 해결책 : ------>

<?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을 수정하는 것처럼 잘못된'Location' 헤더를 고치려고합니다. –

+0

감사합니다. Vicario, 하지만 로컬 서버 "MAMP"를 사용하고 있습니다. – sohal07

4

MAMP에서 동일한 문제가 발생했으며 php.ini 구성 파일에서 output_buffering이 사용 중지되었습니다. 내가해야만하는 것은 다시 켜는 것뿐입니다. php.ini 파일에서

이 줄을 찾을 :

output_buffering = Off 

과로 변경 : MAMP에게 그런 다음 다시 시작

output_buffering = 4096 

자세한 내용은이 게시물 참조하십시오 http://hibbard.eu/php-headerlocation-not-working-in-mamp/

관련 문제