웹마스터 팁

제목: 노프레임/카운터에 관련된 PHP함수 팁 몇가지

## 글의 작성에 있어 경어체를 사용하지 않은 점 양해 바랍니다.


사례1> index.html과 같은 .html 문서에서 제로카운터의 .php3를 include 하였을 때 IP등 일부 변수가
제대로 넘어오지 않는데?

해결방안> 제로카운터를 구성하는 zerocounter.php3 파일을 수정한다.
수정할 곳은

$user_ip = $REMOTE_ADDR;
if(!isset($user_ip)) $user_ip = getenv("REMOTE_ADDR"); // 바로 이 라인을 추가한다.  isset() 함수는 대입한 변수가 할당되었는지 검사하며 굳이 이 함수를 사용하지 않고 !변수명 할 수도 있다.

$referer=$HTTP_REFERER;
if(!isset($referer)) $referer = getenv("HTTP_REFERER"); // 역시 이 라인을 추가한다.
if(!$referer) $referer="Typing or Bookmark Moving On This Site";

getenv("HTTP_USER_AGENT") //  이 변수 호출로 접속자 브라우져 정보를 알 수 있다.

getenv() 함수 사용시 유의할 점은 함수에 주어지는 인자값에 PHP 변수임을 나타내는 '$' 기호를
사용하지않고 일반 스트링 형태로 준다는 것을 상기하자.

제로카운터의 경우 .php3 확장자를 취하고 있어 PHP 3.0 구문으로 해석되며 이 과정에서
IP 주소와 접속경로로 사용되는 해당 변수가 제대로 작동되지 않는다.
getenv는 변수값을 읽어들이는 함수로써 PHP 3.0에 호환된다.
이것을 적용하면 요즈음 index.html에서 include시키는 제로카운터가 접속경로를 제대로 표시하지
못하는 문제를 해결할 수 있다.



사례2> 계정 서버의 PHP.INI 에서 특정 환경변수의 설정값을 알 수 있을까?

해결방안> 아래의 함수를 사용한다.

get_cfg_var("upload_max_filesize") // 이것은 최대 업로드 제한 크기 설정값을 읽어온다.
get_cfg_var("file_uploads") // 이것은 파일 업로드 가능 여부에 대한 flag를 읽어온다.
// 1은 업로드 가능, 0은 업로드 불가.
phpversion() // PHP 서버의 현재 버젼값을 알 수 있다.



사례3> 배열변수를 임의로 나열하고  이 배열변수를 참조함에 있어 별도로 배열변수의 총 배열크기를
지정하지않고 알 수 있을까?

해결방안> count() 라는 함수가 이 목적에 사용된다.
아래의 예를 살펴보자.

$temp[0] = "긴 텍스트 1";
$temp[1] = "긴 텍스트 2";

echo count($temp) // 2 라는 값이 반환된다.  $temp에 배열된 배열폭이 2개이다.



사례4> 위의 배열변수 관련하여 임의의 배열값, 즉 랜덤값을 취할 수 있는가?

해결방안> mt_rand() 라는 함수가 난수 발생에 사용된다.
아래의 예를 살펴보자.

$temp[0] = "긴 텍스트 1";
$temp[1] = "긴 텍스트 2";
$temp[2] = "긴 텍스트 3";

echo mt_rand(0, 2) // 난수 0과 2의 범위 값이 반환된다.

echo $temp[mt_rand(0, 2)]   // 난수 0과 2의 범위 값이 $temp 배열변수에서 해당 배열값을 반환시킨다.

이것을 좀 더 응용하면 최대 배열 폭을 자동으로 인식시킬 수도 있다.

echo $temp[mt_rand(0, count($temp) - 1)]

여기에서 count()는 $temp에 배열된 값의 갯수를 얻는데 뒤에 - 1 로 연산을 시킨 이유는?
그렇다.  배열의 시작이 0부터이므로 갯수는 항상 배열 숫자보다 1이 많게 되기 때문에 -1을 하면
정확한 배열 갯수가 대입된다.



사례4> 노프레임으로 작성한 홈페이지에서 현재 보고 있는 게시판이 어떤 게시판인지 알 수 있나?

해결방안> 우리는 제로보드에 해당 게시판 주소를 넘겨줄 때 zboard?id=bbs 형식이 된다는 걸 잘
알고 있다.  바로 여기에 답이 나와있는데 웹 문서 안에서 $id 변수를 참조하면 지금 보고 있는
게시판이 어느 게시판인지 알 수 있다.


글을 끝마치며.
위에 열거한 팁들은 제 홈페이지 PHP 프로그래밍하면서 아무것도 없는 빈 초석을 하나하나 쌓아가며
알아가다가 적용한 것들입니다.

언제가 될진 모르겠지만 시간이 허락된다면 이 다음에는 PHP로 MySQL 테이블을 사용하는 BGM 플레이어를
작성하는 기초를 적어보도록 하겠습니다.
변수 정의의 최소화, 구문의 간략화, 이것이 핵심이 될 것입니다.
제목 글쓴이 날짜
회원관리 프로그램을 구현하고 싶은신 분들께.. [7] [폐]허접-_- 2002.03.18
PHP 인증 페이지를 만들자! - Lesson 2 수정본 #1 [5] ☺[폐]허접-_- 2002.01.24
PHP 인증 페이지를 만들자! - Lesson 1 수정본 #2 ☺[폐]허접-_- 2002.01.24
노프레임/카운터에 관련된 PHP함수 팁 몇가지 [1] 차카게살자 2001.12.28
MySQL 루트비번 분실시 대처요령 [29] zero 2001.04.18
교육용 방명록 #8 [delete.php3파일에서 넘겨받은 비밀번호를 검사하여 글을 삭제합니다.] [18] zero 2000.07.03
교육용 방명록 #7 [삭제 버튼을 눌렀을 때 비밀번호를 입력받는 부분입니다.] [5] zero 2000.07.03
교육용 방명록 #6 [수정된 값을 넘겨받아서 비밀번호를 비교하고 변경하여 줍니다.] [2] zero 2000.07.03
교육용 방명록 #3 [글쓰기 폼에서 넘어온 값을 DB에 입력하기] [5] zero 2000.07.03
교육용 방명록 #2 [글쓰기 폼 작성] [11] zero 2000.07.03
교육용 방명록 #1 [전체구성 설정, 테이블 생성, 기본함수 정의] [50] zero 2000.07.03
최근 게시물을 나타내는 원리와 방법 [55] zero 2000.03.06
교육용 메모장 #5 [21] zero 2000.07.10
교육용 메모장 #4 [18] zero 2000.07.10
교육용 메모장 #3 [16] zero 2000.07.10
교육용 메모장 #2 [18] zero 2000.07.10
교육용 메모장 #1 [53] zero 2000.07.10
윈2000, NT 또는 98에서 APM설치하기 [74] zero 2000.08.26
MySQL DB 데이타 백업/복구 하는 방법 [38] zero 2000.08.26
자동링크 만드는 방법!!! [28] zero 2000.03.06