웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
유용한 함수 몇가지...;;;;
2003.02.19 01:17
function CHECK_EXT($FILENAME, $PATTERN_EXT)
{
$PATTERN_EXT = trim($PATTERN_EXT); $FILENAME = trim($FILENAME);
if(!$PATTERN_EXT || !$FILENAME) return false;
for($ext=explode(",",$PATTERN_EXT), $i=0; $i < count($ext); $i++)
{
if($ext[$i][0] != '.') $ext[$i] = ".".$ext[$i];
if(strtolower(substr($FILENAME, strlen($FILENAME)-strlen($ext[$i]), strlen($ext[$i])))
== strtolower($ext[$i]))
return true;
}
return false;
}
이 함수는 확장자 체크함수 입니다. 이 함수의 특징은 aaa.php.zip 같은 파일도 php 파일로 인식하는 문제를 막을수 있습니다.. 정규식으로 체크하는것에 비해서 사용법은...
check_ext("파일이름","확장자1,확장자2,확장자3");
입니다.. 그리고 리턴값은 부울값입니다..
function W_BASENAME($PATH)
{
$PATH = trim($PATH);
if(!strlen($PATH)) return false;
$PATH = eregi_replace(preg_quote(""),"/",$PATH);
return basename($PATH);
}
이 함수는 윈도우즈용 젠드 엔코더로 엔코딩한 파일의 경우의 __FILE__ 의 문제를 막을 수 있는 겁니다. basename 에서 나타나는 문제점을... 사용방법은
W_BASENAME("파일경로");
function GET_LOCATION()
{
global $HTTP_SERVER_VARS, $_SERVER;
return urlencode($_SERVER['PHP_SELF']).(strlen($HTTP_SERVER_VARS["QUERY_STRING"])? urlencode("?".$HTTP_SERVER_VARS["QUERY_STRING"]):"");
}
이 함수는 아파치 계열의 서버가 아닌경우에.. $REQUEST_URI 가 제대로 작동하지 않는 경우에
이용되는 함수입니다.
리턴값은 $REQUEST_URI 을 사용한 것과 동일한 효과를 볼 수 있습니다.
function MOVEPAGE($URL)
{
if(!@Header("Location :".$URL)) print "<META HTTP-EQUIV='REFRESH' CONTENT='0; URL=$URL'>";
exit;
}
요즘 제가 주로이용하는 페이지 이동함수 입니다..^^;;;;
우선 헤더로 로케이션할 URL 을 보내고 만약 그 경우가 제대로 되지 않을 때 메타태그로 이용해서
이동합니다..
사용법의 예는...
MOVEPAGE("http://nzeo.com");
입니다..;;;
어떻게 보면 쓰잘떼기 없는 함수도... 쓸모있는 함수일수도 있습니다..;;;
참조하시길....
그럼..
아.. 그리고.. 제 같은 경우는 요즘은 다중 인클루드를 다음과 같이 방지를 합니다..
문서 맨위에..
if(defined("__INCLUDE_LIB__")) return;
define("__INCLUDE_LIB__", TRUE);
이것도 참조하실분은..;;;;
{
$PATTERN_EXT = trim($PATTERN_EXT); $FILENAME = trim($FILENAME);
if(!$PATTERN_EXT || !$FILENAME) return false;
for($ext=explode(",",$PATTERN_EXT), $i=0; $i < count($ext); $i++)
{
if($ext[$i][0] != '.') $ext[$i] = ".".$ext[$i];
if(strtolower(substr($FILENAME, strlen($FILENAME)-strlen($ext[$i]), strlen($ext[$i])))
== strtolower($ext[$i]))
return true;
}
return false;
}
이 함수는 확장자 체크함수 입니다. 이 함수의 특징은 aaa.php.zip 같은 파일도 php 파일로 인식하는 문제를 막을수 있습니다.. 정규식으로 체크하는것에 비해서 사용법은...
check_ext("파일이름","확장자1,확장자2,확장자3");
입니다.. 그리고 리턴값은 부울값입니다..
function W_BASENAME($PATH)
{
$PATH = trim($PATH);
if(!strlen($PATH)) return false;
$PATH = eregi_replace(preg_quote(""),"/",$PATH);
return basename($PATH);
}
이 함수는 윈도우즈용 젠드 엔코더로 엔코딩한 파일의 경우의 __FILE__ 의 문제를 막을 수 있는 겁니다. basename 에서 나타나는 문제점을... 사용방법은
W_BASENAME("파일경로");
function GET_LOCATION()
{
global $HTTP_SERVER_VARS, $_SERVER;
return urlencode($_SERVER['PHP_SELF']).(strlen($HTTP_SERVER_VARS["QUERY_STRING"])? urlencode("?".$HTTP_SERVER_VARS["QUERY_STRING"]):"");
}
이 함수는 아파치 계열의 서버가 아닌경우에.. $REQUEST_URI 가 제대로 작동하지 않는 경우에
이용되는 함수입니다.
리턴값은 $REQUEST_URI 을 사용한 것과 동일한 효과를 볼 수 있습니다.
function MOVEPAGE($URL)
{
if(!@Header("Location :".$URL)) print "<META HTTP-EQUIV='REFRESH' CONTENT='0; URL=$URL'>";
exit;
}
요즘 제가 주로이용하는 페이지 이동함수 입니다..^^;;;;
우선 헤더로 로케이션할 URL 을 보내고 만약 그 경우가 제대로 되지 않을 때 메타태그로 이용해서
이동합니다..
사용법의 예는...
MOVEPAGE("http://nzeo.com");
입니다..;;;
어떻게 보면 쓰잘떼기 없는 함수도... 쓸모있는 함수일수도 있습니다..;;;
참조하시길....
그럼..
아.. 그리고.. 제 같은 경우는 요즘은 다중 인클루드를 다음과 같이 방지를 합니다..
문서 맨위에..
if(defined("__INCLUDE_LIB__")) return;
define("__INCLUDE_LIB__", TRUE);
이것도 참조하실분은..;;;;
댓글 7
-
Erwin
2003.02.19 02:27
-
[콜록]토끼군
2003.02.19 03:11
Erwin// 당연히 못 찾으면 거짓이겠지요.
CHECK_EXT 함수를 아주 간단히 해 봤습니다:
// check_extension function, 2003/02/19.
function check_extension($name, $pattern)
{
if(!($pattern = trim($pattern))) return FALSE;
$pattern = implode("|", array_map("preg_quote", array_map("trim", explode(",", $pattern))));
return preg_match("/($pattern)$/i", $name);
}
아마 동작할 겁니다. :-) 설명은 다음 코멘트로 하겠습니다. (안 그러면 불안해서) -
[콜록]토끼군
2003.02.19 03:28
* implode("|", ...를 implode("|.", ...로 고칩니다.
* preg_match("/($pattern...을 preg_match("/(.$pattern...으로 고칩니다.;;
일단 첫 줄은 C를 아는 사람이라면 아주 고전적으로 쓰게 되는 표현입니다.
if문 안에 들어 있는 식을 보세요. !($pattern = trim($pattern))이라고 되어 있군요.
이게 어찌 동작하느냐 하면, 일단 대입문(=)이 실행됩니다. $pattern의 앞뒤 공백을 제거하겠지요(trim). 근데 이러고 나서 대입문은 대입된 값을 다시 반환합니다. 따라서...
$b = ($a = 3) + 5;
라는 문장은, $a가 3이 되고 $b는 5가 됩니다. ($a=3)이라는 문장에서 3이 반환되고, 그거랑 5가 합해져서 $b가 됩니다.
고로 첫 줄을 아주 쉽게 써 보면:
$pattern = trim($pattern);
if(!$pattern) return FALSE;
되겠습니다.
둘째 줄은 함수의 홍수입니다. :-S 여기에 쓰인 함수는 implode, explode, array_map 세 개가 있습니다. 근데 잘 보면 이름만 하나 더 보입니다. preg_quote군요. 아무튼 하나 하나 설명해 봅시다.
implode($spliter, $array)
array라는 배열 원소 각각의 사이에 spliter라는 문자열을 넣어서 문자열로 만듭니다.
예를 들어서 implode(",", array(1,2,3))이라고 하면 "1,2,3"이 나오겠습니다.
explode($spliter, $string)
implode와 바로 반대 작용입니다. 즉 string에서 spliter를 기준으로 배열을 만듭니다. explode(",", "1,2,3")라고 하면 array(1,2,3)이 나오겠지요. :-) (정확히는 문자열이지만)
array_map($function_name, $array)
array 각각에다가 한 번씩 function_name이라는 함수를 수행해서 다시 집어 넣습니다.
예를 들어서 cube라는 함수가 세제곱을 돌려 준다면, (즉 cube(3) == 27과 같이)
array_map("cube", array(1,2,3,4,5))
라고 하면 array(1,8,27,64,125)가 반환됩니다. 각각에 cube가 적용되는 겁니다. :-)
preg_quote($string)
string라는 문자열을 펄 정규표현식에서 쓸 수 있게 변환합니다. (아시는 분은 아시겠지만 escape 시킵니다;) 이건 좀 뒤에.
따라서 이 문장은,
1. pattern 문자열을 ,로 분리해서 배열로 만든다.
2. 각각의 확장자들 앞뒤 공백을 없앤다.
3. 펄 정규표현식에 쓸 수 있도록 escape시킨다.
4. 이렇게 한 후에 다시 |.로 묶어서 문자열로 만든다.
그러니까 "exe, bat, com"이 오면 "exe|.bat|.com"이 됩니다.
셋째 줄의 문장은 아주 간결합니다. 하지만 설명은 더 많이 필요합니다. -_-;;
이걸 알려면, 펄 정규표현식이란 걸 알아야 하는데... 정규표현식이란 어떤 문자열의 조건을 기호들을 써서 나타낸 것입니다. 예를 들어서 "/abc/"라는 정규 표현식은 abc라는 문자열이 들어 가는 것들을 뜻합니다.
정규 표현식은 "/내용/"의 꼴으로 되어 있습니다. 내용 다음에다가 "/내용/옵션" 이렇게 옵션도 오는데, 우리가 알아 둘 것은 딱 두 가지입니다. g랑 i. i는 대소문자 구별 안 하고, g는 문자열에서 표현식에 맞는 것을 모두 찾겠단 말입니다. gi같이 같이 쓸 수도 있습니다.
다른 내용은 생략하고, "/(abc|def|ghi)$/i"라고 하면 이렇게 해석합니다.
- (abc|def|ghi)$라는 정규 표현식을 대소문자 구별하지 않고 찾아라.
정규 표현식만 따로 뗍시다. 맨 뒤에 오는 $는 끝에 나오는 것만 인식합니다. 즉 /abc$/라고 하면 "cbabc", "dabc", "abc" 같은 것만 되겠지요.
그 다음 ()로 묶는 것은 부 정규 표현식을 나타 내는데, 그냥 써 봤습니다(..)
|로 구별된 문자열들은 "여러 개 중 하나"를 뜻합니다. /a|b|c/라고 하면 a, b, c 중 하나라도 들어 있는 문자열을 뜻하겠군요.
이러한 특수 문자가 있기 때문에, 어떤 문자열을 그래도 갖다 붙이려면 preg_quote와 같은 함수로 |와 같은 문자를 인식 안 되게 합니다. 보통 를 앞에 붙이면 보통 문자로 인식하죠. 확장자를 인식할 때는 ".bat"와 같이 .을 쓰는데, 이 .도 특수 문자라서 로 묶어 줘야 합니다. implode로 묶을 때 맨 앞에는 .가 안 붙으니까 패턴 문자열 만들 때 같이 넣어 주는 것이지요.
고로, "/(.com|.exe|.bat)$/i"는 "test.bat", "alpha.exe" 등에 맞습니다. "tibat"이나 "test.com.txt" 같은 건 제낍니다. :-p
- 토끼군 -
앳플군
2003.02.19 14:46
test.php.dat
test.php.
아파치는 이런 이름을 가진 파일이 있으면 php로 인식합니다 :) -
☆~
2003.02.21 00:38
헐... 정말 php가 동작하네요 =0=;; dat를 확장자 취급 않하는건 혹시 cgi도?! -
☆~
2003.02.21 00:39
cgi도 index.cgi.dat로 하니 cgi로인식하는군요;; -
에지
2003.03.09 18:01
movepage() 함수는 제로보드 내에도 있어요-_-;;;;// ㅠㅕㅛㅑㅠ (밥상굴리기~)
제목 | 글쓴이 | 날짜 |
---|---|---|
개판 오분전 세션 - 6 | 미친개 | 2003.04.08 |
개판 오분전 세션 - 5 | 미친개 | 2003.04.08 |
개판 오분전 세션 - 4 | 미친개 | 2003.04.08 |
개판 오분전 세션 - 3 [4] | 미친개 | 2003.04.08 |
개판 오분전 세션 - 2 [4] | 미친개 | 2003.04.08 |
개판 오분전 세션 - 1 [7] | 미친개 | 2003.04.08 |
객체를 이용한 winamp 방송정보 알아내는 소스 [4] | 흑심품은연필 | 2003.04.07 |
내 홈피도 채널을?! #1 [16] | (' _ ') napclub | 2003.03.31 |
이젠 주소검색 편하게쓰자~~~!! (새창띄우지 않습니다) [5] | _-=Knight=-_ | 2003.03.05 |
메일 인증시 기존 회원 전부 인증걸기;;; [4] | teslaMINT | 2003.03.04 |
게시판 통체 인클루드 하기 [12] | 깜보 | 2003.03.02 |
여러분이 원하시던 로또복권 소스공개~ [12] | Dopesoul | 2003.02.22 |
NZEO 이메일 인증 따라하기 [또 수정 --;] [44] | teslaMINT | 2003.02.22 |
계정이 php를 지원하는지아닌지 잘 모를때... [16] | 격투왕맹호 | 2003.02.19 |
유용한 함수 몇가지...;;;; [7] | Yuki-H. | 2003.02.19 |
PHP,자바스크립트 제 3탄! 아래에 헤더로 asx감추기를 이용한 PHP무비 플레이어! | ☆좀비파우더™ | 2003.02.16 |
DB를 이용한 현재접속자 수 구하기 [6] | 김현석 | 2003.02.14 |
[초간단] 헤더로 asx 파일 음악 주소를 숨겨봐요. [9] | 모라미 | 2003.02.14 |
제로보드 스킨들이 어느 게시판에 쓰이는지 알아보는 소스 [12] | teslaMINT | 2003.02.11 |
V3 neo+ 항상 최신버전으로 자동링크시키기 [7] | 김현석 | 2003.02.08 |
인자 $PATTERN_EXT 에서 $FILENAME의 확장자를 찾을 수 있으면
참값인지 아니면 찾을 수 없을때 참값인지 ;ㅁ;?