홈으로 홈으로 | 무료회원가입 | 아이디/비번찾기 | 즐겨찾기
추천음악방송메인홈1대1상담음악방송청취
아리랑가요(무료음악채널)
뽕짝아가씨(무료음악채널)
okTrot(무료음악채널)
전통가요(무료음악채널)
미스트롯(무료음악채널)

온라이브스토어(앱다운로드)

환상의뽕짝파티 무료음악
명작트로트메들리 무료음악
트로트메들리관광 무료음악
동영상노래방
가사검색

POP Player
신나는 고스톱
컴퓨터 오목
작은 음악다방
자동러시 웹플레이어신청

보안∵서버∵쿠키
윈도우∵프레임
이미지∵배경
시간∵달력∵계산
상태바∵타이틀바
음악∵영상
폼∵전송∵테이블
키보드∵마우스
효과∵링크∵메뉴
Script∵php
기타
PHP 강좌
윈도우관련팁
웹관련팁
홈페이지제작팁
기본강좌
레지스트리
윈도우서버
리눅스서버
Android
GET에 대한 긴 이야기...
8년 전
이번엔 복습하는 의미에서 GET으로 값을 넘기는 방법에 대해 좀 따져보고 넘어가겠습니다.

일단 아래 소스 하나만 만들어 보죠...

<?=$string?>

간단하죠?

파일이름은 test.php로 저장하시고요..
실행을 해보면 화면에 아무것도 출력되지 않을 것 입니다.
정상이죠 그게...

(-_-a 그냥 주소창에 test.php와 같이 적으시면 안됩니다....
http://localhost/test.php라든가;;; 뭐 그렇게...)

이제 주소창에 아래와 같이 적어보도록 하죠...

test.php?string=abcd

뭐가 출력되죠?
abcd가 출력되면 정상입니다.

풀이를 해보면 ? 뒤에 string이라는 것이 변수명이 되고...
= 뒤에 붙여준 abcd가 그 값이 되는 것 입니다.
여러개의 변수를 전달해 주려면 아래와 같이 &로 연결 합니다.

test.php?string=abcd&string2=efgh

만약 아무것도 출력되지 않는 다면...
windows디렉토리의 php.ini파일을 메모장으로 열어서 다음 단어를 찾아 보세요

register_globals

찾으신 부분에 아래와 같이 되어 있다면...
abcd가 출력되지 않았을 것입니다.

register_globals=off

register_globals라는 것은 GET,POST,COOKIE와 같은 변수들을
(보통 요놈들 셋을 GPC라 부릅니다)
바로 변수로 표현해 주느냐 그렇지 않느냐의 차이인데요...
일반적으로 ASP나 JSP에서는 우리가 $string이라고 바로 표현을 하지 못하고
request어쩌구 하면서 값을 요청하고 받아다 쓰는데요...
php에서는 이런것들 다 무시하고...
(대충 감 잡으셨겠지만 php는 대부분의 복잡한 문법들은 다 무시해 버리고 있습니다)
바로 변수명을 쓸수 있도록 해주는데...
그럴려면 register_globals라는 옵션이 사용중이어야 한다는 것이죠...
그래도 궁금하신분은 사전찾아서 register와 globals의 뜻을 찾아보시고 연구해 보시구요...

어쨌든 register_globals가 on이어야 변수값을 그대로 사용 할 수 있다는 것인데...
웹호스팅을 받고 있는 입장이라 요놈을 on으로 할수 없다 할 경우에는 어떻게 가져오느냐....

test.php?string=abcd

위와 같이 string이라는 변수를 넘겨주었다면...
아래와 같이 받아올 수가 있습니다.

<?=$HTTP_GET_VARS[string]?>

쉽죠?
앞에 붙은 =에 대해서 물으시는 분이 없기를...
궁금하셨던 분들 계시죠? -_-;;

암튼 결론은 $HTTP_GET_VARS라는 배열의 원소로 string이라는 변수가 들어갔다는 것인데요...
그것도 귀찮은지 아래와 같이 하셔도 됩니다.

<?=$_GET[string]?>

물론 아래와 같이 해도 됩니다.

<?=$_GET["string"]?> 또는 <?=$_GET['string']?>

-_-a다른언어에서는 이렇게 따옴표 같은걸 무시하면 바로 에러 납니다...

<?
$string=$_GET[string];
echo $string;
?>

위와 같이 값을 $string이라는 변수에 저장해서 출력해도 되겠죠...
위와 같이 가져다 쓰는 방법은 register_globals가 on이든 off든 상관없이 다 사용 가능합니다.
그러니 php설정에 문제 되지 않게 하려면 마지막 방법과 같이 쓰는게 제일 낫다는 거겠죠..
$string에 저장하지 않고 바로 $_GET[string]과 같이 쓰면 어떠냐 하시는 분들도 계시겠지만...
-_-a길면 귀찮자나요...

그리고 이왕 쓰는거 $HTTP_GET_VARS로 쓰시는게 좋습니다.
예전 버전에서는 $_GET를 지원 하지 않기 때문이죠...

같은 방법으로 POST로 넘어온 변수는 $HTTP_POST_VARS 또는 $_POST
쿠키는 $HTTP_COOKIE_VARS와 같이 가져다 쓸수 있습니다.
업로드된 파일은 $HTTP_POST_FILES로 되고요...

그런데...여기서 문제는...
변수가 한 500개 넘어왔다고 가정해보죠...

-_-a 막막 하시죠?

그래서 아래와 같은 프로그램을 만들어 본적이 있습니다.

1. <?
2. $key=array_keys($_GET);
3. $key_size=sizeof($key);
4.
5. for($i=0;$i<$key_size;$i++)
6. {
7. $key_name=$key[$i];
8. $$key_name=$_GET[$key_name];
9. }
10. ?>

페이지 호출은 아래와 같이 했다고 하죠..

test.php?a=A&b=B

뭔고 하니...

2번째 줄에서는 GET으로 넘어온 배열의 키이름을 모두 뽑아서 $key라는 배열에 저장합니다.

a와 b라는 변수가 넘어왔으니...
$_GET[a]와 $_GET[b]가 되겠죠...
요놈들이 $key[0]=a , $key[1]=b 이렇게 들어간다 그겁니다.
결국 $key배열의 값들은 넘어온 변수들의 이름이 됩니다.

3번째줄에서는 $key배열의 크기를 구합니다.
배열의 원소 갯수를 구한다는 얘기인데요...
여기서는 2가 되겠죠...
그걸 $key_size에 저장하고 5번째줄에서는...
0부터 $key배열 원소의 갯수인 $key_size보다 1작을 때 까지 루프를 돌립니다.
여기서 $key_size는 2이기 때문에...
0부터 1까지 $i값이 증가하면서 루프가 돌겠죠...

7번째 줄을 볼까요?
$key[$i]는 현재 $i가 0이기 때문에 $key[0]됩니다.
그리고 $key[0]은 a였죠...
결국 $key_name의 값으로 a가 들어간다는 것입니다.

그럼 마지막으로 8번째 줄을 보죠...

$_GET[$key_name];를 따져보자면....

$key_name은 a였죠?
그러므로 $_GET[a]가 되는 거죠...
$_GET[a]의 값인 A가 되는 것입니다.

그럼 $$key_name의 값은 A라는 얘기인데...
(-_-오타 아닙니다 $가 두개예요...)

$key_name은 a였고 앞에 $가 붙었으니...
결국 $a라는 변수를 말하는 것이 됩니다.

-_-;;무슨 이런경우가 다 있느냐 하시겠지만...
php에선 됩니다...

정리해보면 $a="A" 라는 결론이 나옵니다.
우리가 원하던 결과죠...
루프가 한번 더 돌면 $i가 1이 되면서...
$b="B"가 될겁니다...-_,-


그런데 사실 요것도 다 필요 없고요...
아래와 같이 해주시면 간단합니다.

<?
extract($_GET);
?>

(__)죄송;;;

어쨌든...
그냥 저렇게 손수 만들어 쓸수 있다는 것을 보여드리기 위해서;;;


자 그럼 다시 GET에 대한 얘기로 넘어와보죠...

문제 입니다.
string이란 변수에 &=?란 값을 넣어서 test.php문서에 GET방식으로 전달해보세요...

정답은?

test.php?string=&=?

이건가요?;;;-_-a;;;

지금까지 제대로 읽어오신분이라면...
좀 의아해 하시겠죠...
?, &, = 는 값을 넘기기 위해 사용되는 문자인데...
이걸 넘기자니 제대로 넘어가는지 원...

일단 한번 해보세요...
아무것도 출력이 안된다면 정상입니다.

따져보죠...
string= 이후에 $string변수의 값을 넣어야 하는데...
&가 나오면서 string변수의 값은 끝나고 다른 변수를 넘기는 것으로 간주하게 됩니다.
그 이후에는 =?가 나오는데...
요건 -_-a뭐 해석이 안되겠죠...

이럴경우에 url인코딩이라는 것을 사용 합니다.
url을 인코딩해서 요론 특수 문자라든지...
한글과 같은 문자들을 escape시킬수 있습니다. (-.-사전찾아보세요)

php에서는 urlencode라는 함수와 urldecode라는 함수가 있는데요...
아래와 같이 사용 합니다.

$변수 = urlencode("값");

값으로 넣어진 문자를 인코딩하여 $변수에 저장하는 것이죠...
일단 아래와 같이 해보도록 하죠...

<?
$a=urlencode("&=?");
echo $a;
?>

결과는?

%26%3D%3F

위와 같이 나옵니다.
이것은 &=?를 url인코딩 한 결과 인데요...
이것을 아래와 같이 값에 넣어주면 된다는 것이죠...

test.php의 소스는 젤 처음에 했던 것처럼
<?=$string?>으로 해두시고...

test.php?string=%26%3D%3F

위와 같이 호출해 보세요.
-_,-뭐가 뜹니까?

브라우저 주소창으로 넘어온 것은 지금에서와 같이...
자동으로 디코딩 됩니다만...
이것을 php상에서 디코딩 하려면...

urldecode라는 함수를 사용해야 합니다.
사용법은 urlencode와 같고요...


마지막으로 한가지 잘못된 고정관념에 대해 짚고 넘어가자면...
GET은 POST에 비해서 넘겨줄수 있는 값의 양이 작다 라는 것인데요...
실제로 웹브라우저의 URL창에 적을 수 있는 주소의 길이는 256자 였습니다.

test.php? <--몇자 입니까?

9자 입니다.

-_-라고 대답하신 분들이 안계시기를....

http://localhost/test.php? 정도까지는 생각을 하셔야죠..-_,-

어쨌든 이제 몇자 남았죠?
뭐 한 200몇자 남았겠죠...
(-_-;;뭘 세고 계십니까?)

뭐...많은 양의 데이터를 넘기기엔 좀 힘든 길이죠...

그런데 최근에 이 제한이 2048자 까지 늘었답니다.
그건 아래 문서를 잘 읽어 보시고요...

http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q208/4/27.ASP&NoWebContent=1
영어니까 -_-a보실분만 조용히...
(-.-솔직히 2048이 맞는지 모르겠습니다...순 영어라서;;;)


위의 주소에서도 GET방식으로 값을 넘기는게 보이시죠?
보이신다면 -_,-/ 성공하신 겁니다...
추천추천 : 273 추천 목록
번호 제목
3,016
 우클릭 완벽차단 스크립트
3,015
 iframe 높이 100% 맞추기
3,014
 curl 함수를 이용한 HTTP REFERER 변경
3,013
 윈도우10 시스템 파일 및 Dism 검사
3,012
 텍스트 줄바꿈, 글자자르기 CSS
3,011
 jQuery Mobile에서 유용한 코드 10가지.
3,010
 [PHP] dirname()함수와 $_SERVER 관련 상수들
3,009
 [PHP] 파일 크기, 사이즈 불러오는 함수, filesize()
3,008
 [jQuery] jQuery Quick API
3,007
 [ transition ] 링크 hover 색상 변화 속도 조절
3,006
 PHP 5.3.0 에서 사라진 함수들 대체
3,005
 어떤 파일들이 include 나 require 되었는지 확인하는 함수(get_included_files)
3,004
 PHP 날짜 형식 및 계산하기(날짜 더하고 빼기)
3,003
 jQuery Mobile에서 유용한 코드 10가지.
3,002
 값이 배열 안에 존재하는지 확인하는 in_array함수
3,001
 사용자가 웹브라우저에서 뒤로가기를 했을때 감지하는 방법
3,000
 [jQuery]버튼 활성화, 비활성화
2,999
 jQuery show() / hide() / toggle() 사용법
2,998
 jquery 여러가지 이벤트
2,997
 border-radius 속성
2,996
 네이버 오픈API 음성합성 API 사용하는 PHP 샘플코드
2,995
 UTF8 한글 자르기..
2,994
 iconv 에러 발생시 계속 처리하기 옵션
2,993
 [PHP] 현재 페이지의 도메인 , URL 정보 알아내기.
2,992
 [PHP] 막강 기능 배열..
2,991
 [CSS] - Input clear `X ` 버튼 제거 ( IE, Chrome, Firefox )
2,990
 [Mobile] - 모바일웹 Href 태그속성들
2,989
 [JqueryMobile] - 현재화면의 가로세로 사이즈 구하기
2,988
 [JqueryMobile] - 화면의 가로, 세로 사이즈 구하는 방법
2,987
 jquery로 가로 넓이(width), 세로 높이(height) 자동 조절
2,986
 iframe 높이 jquery로 자동조절하기
2,985
 jQuery 오른쪽 영역의 높이를 왼쪽 영역의 높이와 동일하게 하기
2,984
 jquery에서 테이블 짝수, 홀수 번째 TR 배경색 변경하기
2,983
 jquery에서 테이블에 마우스 오버시 해당 행의 배경색상 변경하기
2,982
 jquery 스크립트내 특정값 확인하기 (디버깅)
목록
추억의가요방(가사포함)
인기절정뽕짝파티
인기트로트모음
지루박디스코메들리
밤무대애창곡
전자올겐경음악
세월따라노래따라
가슴시린트로트
트로트쌍쌍파티
7080추억속으로
종합성인가요방
못잊을옛날노래
카바레 음악
트롯디스코팡팡
관광 메들리
트롯카페
가요감상실
추억의옛노래
스페셜가요광장
BillBoard Free
추천가요모음
경음악.전자올겐
스페셜음악여행
WOLRD POPs
K-POP\BillBoard
POP TOP BEST

최신인기가요특집
추천가요\인기
F뮤직 인기\발라드
F뮤직 애창\트로트
트로트성인가요
인기가요
프리미엄 POP
경음악\기타
프리미엄 최신가요
프리미엄 성인가요
가요축제\트롯1번지
댄스\메들리\리믹스
카페\명상\경음악\기타
뮤직트로트 부산광역시부산진구 가야동 ㅣ 개인정보취급방침
Copyright (C) musictrot All rights reserved.