[해결] 구버젼 서버 신서버로 옮긴후 PHP 로그인 페이지 문제
글쓴이: zamia / 작성시간: 수, 2008/05/28 - 9:54오후
설치 활용 쪽에도 올렸는데 개발 전문가 분들이 못볼것 같아 이쪽에도 올립니다. 윈도우2000 APM 5(PHP_4.4.2)(mysql_4.0.26-nt-max)(Apache_1.3.34) 에서 Cent OS 로 홈페이지 옮기는 작업을 했습니다. Cent OS(PHP 5.1.6) (mysql 5.0.8)(Apache_ 2.0.59) 입니다. 옮기는 것은 폴더 tgz로 압축해서(알집으로) FTP를 이용하여업로드후 CentOS에다가 풀었습니다. DB는 mysqldump -uxxxx -p db명 > backup.sql 로 뜬후 mysql -uxxx -p db명 < backup.sql 로 넣어주었습니다. 물론 DB계정 생성시 관련 권한(Localhost,%) 쪽으로 다주었고 필요한 권한 Select,insert 등도 Y로 주어서 처리 했습니다. 1차 문제 Database 명을 대소문자 구분하더군요.. 하여 my.cnf 에서 lower_case_table_name = 1 로 바꾸어줄라다가 이미 CS로 사용하는 DB가 있어서 이러지도 못하고 저러지도 못하고 하여 옮겨온 홈페이지 DB Table 네임을 alter table table명 rename table명 으로 대문자 주고 바꾸어 주니 DB가 잘붙고 게시판 기능도 정상으로 되었습니다. 가장큰 문제 미해결... 로그인이 안되고 하얀 백지만 나옵니다. php를 잘몰라서 소스를 올립니다. =================================================================================== DbConn.php 부분입니다. <? $Db_Name = "xxxxxx"; $Db_User = "xxxx"; $Db_Pass="xxxx"; $sql_ip="???.??????.???"; <--- 요거에 도메인도 넣어봤구요 IP도 넣어봤구요, Localhost 도 넣어봤습니다.(모두 연결됩니다.) $_dbconn = mysql_connect("$sql_ip","$Db_User","$Db_Pass") or die("DB connect error"); mysql_select_db("$Db_Name",$_dbconn); ?> ========================================================================================= 로그인 메인 페이지 부분 main.php <? header('P3P: CP="NOI CURa ADMa DEVa TAIa OUR DELa BUS IND PHY ONL UNI COM NAV INT DEM PRE"'); include "include/head_index.php"; include "include/DbConn.php"; include "include/Tpl_Header.php"; $from = $PHP_SELF; ?> <script language=javascript> <!-- function login() { var f = document.logform; if (f.uid.value == "") { alert("ID를 입력해 주세요"); f.uid.focus(); return; } if (f.pwd.value == "") { alert("Password를 입력해 주세요"); f.pwd.focus(); return; } f.action = "/08_member/DoLogin.php"; f.submit(); } function logout() { document.logform.action = "<?=$memPath?>/logout.php?skinm=<?=$skinm?>"; document.logform.submit(); } function join(url) { window.open(url,'회원가입','width=620,height=500,left=300,top=200,scrollbars=yes'); } function edit(url2) { window.open(url2,'회원정보수정','width=620,height=500,left=300,top=200,scrollbars=yes'); } function findpwd(url) { window.open(url,'비밀번호찾기','width=422,height=300,left=300,top=200,scrollbars=no'); } //--> </script> <tr> <td valign="top"><table width="870" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="395" align="left" valign="bottom"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="380" height="480"> <param name="movie" value="visual.swf"> <param name="quality" value="high"> <embed src="visual.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="380" height="480"></embed> </object></td> <td valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td height="54"><table width="100%" height="32" border="0" cellpadding="0" cellspacing="0" bgcolor="E9E9E9"> <form name=logform method=post action=""> <input type=hidden name=from value="<?=$from?>"> <? if($session_id) { ?> <tr> <td width="110"><img src="images/00_login_title.gif" width="110" height="32"></td> <td style="padding-left:10px"><?=$session_name?>님 환영합니다!</td> <td width="140"><a href="08_member/member_01_edit.php" onfocus="this.blur();"><img src="images/bt_privateedit.gif"hspace="10" border="0" align=absmiddle></a><a href="08_member/Logout.php?from=<?=$from?>" onfocus="this.blur();"><img src="images/bt_logout.gif" border="0"></a></td> <td width="5"><img src="images/00_login_right.gif" width="5" height="32"></td> </tr> <? } else { ?> <tr> <td width="110"><img src="images/00_login_title.gif" width="110" height="32"></td> <td width="40" align="right"><img src="images/00_login_id.gif" width="8" height="32" hspace="4"></td> <td><input name="uid" type="text" class="input_login" size="10" style="ime-mode:disabled"></td> <td width="30" align="right"><img src="images/00_login_pw.gif" width="12" height="32" hspace="4"></td> <td><input name="pwd" type="password" class="input_login" size="10"></td> <td width="140"><input type=image src="images/00_login_bt.gif" width="36" height="17" hspace="10" border="0" onmouseover="this.style.cursor='hand';" align=absmiddle onclick="javascript:login();" onfocus="this.blur();"><a href="javascript:findpwd('08_member/search.php');" onfocus="this.blur();"><img src="images/00_login_search_bt.gif" width="66" height="17" border="0"></a></td> <td width="5"><img src="images/00_login_right.gif" width="5" height="32"></td> </tr> <? } ?> </form> ~~~ 쭉 이어지는 소스는 게시판 항목 5개씩 조회해서 보여주는 소스인데 길어서 패스 ========================================================================================================= DoLogin.php 소스 부분 입니다. <? header('P3P: CP="NOI CURa ADMa DEVa TAIa OUR DELa BUS IND PHY ONL UNI COM NAV INT DEM PRE"'); session_start(); ?> <? include "../Include/DbConn.php"; include "../Include/Tpl_Header.php"; include "../Admin/Include/AdminInfo.php"; if ($admin_id != $uid) { $query = "select id,pwd,name,email,homepage from Members where id='$uid'"; $result = mysql_query($query,$_dbconn) or die(mysql_error()); if($result) $result_count = mysql_num_rows($result); else $result_count = 0; if ($result_count < 1) { ?> <script language=javascript> <!-- alert("존재하지 않는 아이디 입니다."); history.back(); //--> </script> <? } else { while($fields = @mysql_fetch_array($result,MYSQL_ASSOC)) { if ($fields["pwd"] != $pwd) { ?> <script language=javascript> <!-- alert("비밀번호가 일치하지 않습니다."); history.back(); //--> </script> <? } else $session_id = $fields["id"]; $session_email = $fields["email"]; $session_name = $fields["name"]; $session_home = $fields["homepage"]; session_register("session_id"); session_register("session_email"); session_register("session_name"); session_register("session_home"); //SetCookie( "savelogin", $fields['id']); movepage($from); } mysql_free_result($result); } } else { if ($pwd == $admin_pwd) { $session_id = $admin_id; $session_email = $admin_mail; $session_name = $admin_name; $session_home = $admin_home; session_register("session_id"); session_register("session_mail"); session_register("session_name"); session_register("session_home"); movepage($from); } else { ?> <script language=javascript> <!-- alert("비밀번호가 일치하지 않습니다."); history.back(); //--> </script> <? } } ?> ========================================================================================= Tpl_Header.php 부분 입니다. <? $TPL_PATH = $_cur_dir."/Board"; $pagesize = 12; $skippage = 10; function msgback($msg) { echo "<script language=javascript>\n\r"; echo "alert(\"".$msg."\");\n\r"; echo "history.back();\n\r"; echo "</script>"; exit; } function isblank($str) { $temp=str_replace(" ","",$str); $temp=str_replace("\n","",$temp); $temp=strip_tags($temp); $temp=str_replace(" ","",$temp); $temp=str_replace(" ","",$temp); if(eregi("[^[:space:]]",$temp)) return 0; return 1; } function movepage($url) { global $dbconn; echo"<meta http-equiv=\"refresh\" content=\"0; url=$url\">"; if($dbconn) @mysql_close($dbconn); exit; } function isAllowExt($fname,$more) { if($more){ $bret = false; $more = explode(",",$more); for($i=0;$i<count($more);$i++) { if(eregi("(\.".trim($more[$i]).")$",$fname)) { $bret = true; break; } } return $bret; } if( eregi("(\.php)$",$fname) || eregi("(\.phtm)$",$fname) || eregi("(\.inc)$",$fname) || eregi("(\.htm)$",$fname) || eregi("(\.html)$",$fname) || eregi("(\.shtm)$",$fname) || eregi("(\.shtml)$",$fname) || eregi("(\.asp)$",$fname) || eregi("(\.pl)$",$fname) || eregi("(\.vbs)$",$fname) || eregi("(\.cgi)$",$fname) ) return false; else return true; } // By ZBoard function autolink($str) { // URL 치환 $homepage_pattern = "/([^\"\'\=\>])(mms|http|HTTP|ftp|FTP|telnet|TELNET)\:\/\/(.[^ \n\<\"\']+)/"; $str = preg_replace($homepage_pattern,"\\1<a href=\\2://\\3 target=_blank>\\2://\\3</a>", " ".$str); // 메일 치환 $email_pattern = "/([ \n]+)([a-z0-9\_\-\.]+)@([a-z0-9\_\-\.]+)/"; $str = preg_replace($email_pattern,"\\1<a href=mailto:\\2@\\3>\\2@\\3</a>", " ".$str); return $str; } function getSizeString($size, $flag /* "kb" or "mb" */) { if(!$size) $str = "0 Byte"; if(eregi("kb",$flag)) { $str = sprintf("%0.2f KByte",$size/1024); } else if(eregi("mb",$flag)) { $str = sprintf("%0.2f MBytes",$size/(1024*1024)); } else{ $str = sprintf("%0.2f KBytes",$size/1024); } return $str; } function getSafeImgSize($img) { $width = 500; $s = getimagesize($img); $iwidth = $s[0]; if ($iwidth > $width){ $iwidth = $width-20; } return " width=$iwidth "; } function getCutString($str, $len) { if ($len >= strlen($str)) return $str; $klen = $len - 1; while(ord($str[$klen]) & 0x80) $klen--; return substr($str, 0, $len - (($len + $klen + 1) % 2)); } function fileremove($filepath) { $delete = @unlink($filepath); if (@file_exists($filepath)) { $filesys = eregi_replace("/","\\",$filename); $delete = @system("del $filesys"); if (@file_exists($filepath)) { $delete = @chmod ($filepath, 0775); $delete = @unlink($filepath); $delete = @system("del $filesys"); } } return $delete; } ?> ============================================================================= 3일 삽질하다 하다 보니 PHP 버젼이나 Mysql 버젼이 상위 버젼으로 되면서 여러가지 설정을 변경해야 되는 것을 알았습니다. 하여 OLD_PASSWORD=1 , register_globals = on, register_long_arrays = on, 도 하였습니다. 헌데 위에 항목하고는 관계가 없는듯 보입니다. 홈페이지 게시판은 직접 4년전에 구축된거라 직접 구현한 게시판입니다. 다른 게시판 항목 조회 보기 등은 이상없이 되나 Id,PWD 넣은다음 Login 만 누르면 백지가 나오고 하다못해 잘못된 ID를 넣으면 잘못된 아이디라고 멘트라도 나와야하는데 그렇지가 못합니다 의심되는 부분이 Session()부분과 main.php 에서 DoLogin.php 로 넘어 가지를 않는다는 거죠. 이것을 어떻게 해결해야 될지 고수님의 의견 부탁 드립니다. ㅠㅠ..
Forums:
먼저 어디서
먼저 어디서 멈추는지 알아내는게 중요한것 같네요 =ㅅ=;;;
저 긴 소스를 다 읽고 분석하기는 좀.....;;
에러가 의심되는 줄 끝마다 echo를 달아주는게 좋겠습니다.
php에는 디버깅할 수 있는 방법이 echo정도 밖에 없나요?
브레이크 포인터나, 콜스택을 볼 보거나, 이런 C나 C++에 있는 디버깅 기능을 쓸 수 없는 것인가요?
KT하이텔, 앱스 개발자
있습니다. ^^;; PHP
있습니다. ^^;;
PHP debugger DBG
개인적으로 결벽증 때문에 이것저것 까는걸 싫어해서 말이죠 -ㅅ-;;
그리고 php의 경우 복잡한 로직을 쓰는 일은 별로 없기 때문에 echo만으로도 충분히 디버깅이 가능합니다.
php파일로 넘어가지를
php파일로 넘어가지를 않아서 echo 기능을 할수가 없습니다.
즉 main.php 에서 submit() 까지는 되는데 그 다음인
/08_member/DoLogin.php 로 넘어가지를 않는 문제죠..
ㅜㅜ,.
short open tag만
short open tag만 쓰고있군요. 이것도 체크해보세요. 혹시 off라고 되어있는지.
온갖 참된 삶은 만남이다 --Martin Buber
해결 ㅠㅠ
감사합니다. 해결했습니다.
원인은 역시 쉬운곳에 있었습니다.
DoLogin.php 의 Include 에 있는 경로즉 폴더 네임도 대소문자를 구분하여 나타난 문제였습니다.
전부 소문자로 바꾸니 실행되네요..
황당하네요 다른페이지는 다 소문자로 적고 저것만 위에 경로를 대소문자로 했는지 ㅠㅠ..
윈도우는 대소문 안가리니 ㅠㅠ.. 경로 대소문 ㅠㅠ 참 기초가 없는 사람인거 같습니다.
이번기회에 많은점을 배운것이 있네요 답글 달아주신님들께 감사합니다.
댓글 달기