레이블이 PHP인 게시물을 표시합니다. 모든 게시물 표시
레이블이 PHP인 게시물을 표시합니다. 모든 게시물 표시

2010년 3월 10일 수요일

PHP로 css 출력하기

html.php

 

<html>
<head>
<link rel="stylesheet" href="css.php?id=<?=$_GET['id'];?>" type="text/css">
</head>
<body>
<p class=line> Line Line Line Line Line Line Line Line Line Line Line Line Line Line Line Line </p>
</body>
</html>


 

 

css.php

[code php]header( "Content-type: text/css"); switch( $_GET['id']) { case 'A': echo "p.line { border: 1px solid green; }"; break; case 'B': echo "p.line { border: 1px dotted blue; }"; break; case 'C': default: echo "p.line { border: 2px solid cyan; }"; break; }[/code]

테이블 유무를 검사하는 소스

[code php]if(mysql_num_rows(mysql_query("SHOW TABLES LIKE '".$db_name."'"))==1) echo "테이블 있음"; else echo "테이블 없음"[/code]

[보안] 자동공격 봇 막기

HTTP/1.0 으로 POST 하는 접근이 거의 봇이기 때문에 이를 차단하는 방식입니다.

[code php]if(!($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1' && $_SERVER['HTTP_USER_AGENT'] == 'Shockwave Flash')) { if($_SERVER['SERVER_PROTOCOL'] != 'HTTP/1.1' || !isset($_SERVER['HTTP_ACCEPT_ENCODING'])) { if(count($_POST) != 0) { $fp = fopen('/home/site/www/postdata.txt', 'a'); fwrite($fp, $_SERVER['REMOTE_ADDR']."\n"); fwrite($fp, print_r($_POST, true)); fwrite($fp, print_r($_GET, true)); fwrite($fp, print_r($_SERVER, true)); fwrite($fp, "---\n"); fclose($fp); exit; } if(!preg_match('/BlackBerry|Daum|EMPAS\.ROBOT|Gigabot|Googlebot|NaverBot|Snapbot|Speedy\|SurveyBot|Twiceler|Yahoo|Yeti|MFeedBot|msnbot|webcollage|yoofind|xMind|BrightCrawler|NimbleCrawler|StackRambler|SurveyBot|ia_archiver/', $_SERVER['HTTP_USER_AGENT'])) { $fp = fopen('/home/site/www/agents.txt', 'a'); fwrite($fp, $_SERVER['HTTP_USER_AGENT']."\n"); fclose($fp); header('Content-Type: text/html; charset=euc-kr'); echo '인터넷 옵션 에서 프록시 설정을 제거하셔야 접속하실 수 있습니다.\n프락시사용을 하지않는 경우 도구-인터넷옵션-고급에서 HTTP 1.1 사용에 체크하신후 모든 익스플로러창을 닫은다음 새창을 열어서 접속하십시요.'; exit; } } }[/code]

PHP v5.1.x and PNG images error

Warning: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib error in ../list.skin.php on line 133 

PHP5.1 이후부터는 png 에 대한 생성부분이 변경되었기 때문에 quality 설정부분의 변화가 생겨 패치가 필요하다.
png 형식의 썸네일을 생성시 quality 의 범위값을 0-9 사이의 값으로 조정하면 오류없이 출력이 가능하다.


원문 :
Since PHP v5.1 the GD function imagepng() accepts compression argument. The compression argument must be from 0 to 9. 4images is using the compression settings when creating thumbnails or image resizing for jpeg images which can be from 0 to 100. Because of that using imagepng() function will return fatal error
Quote
PHP Fatal error: imagepng() [<a href='function.imagepng'>function.imagepng</a>]: gd-png: fatal libpng error: zlib error in example.php on line 10

The fix is simple:
In includes/image_utils.php find:
Code:
[code]$image_handle = "image".$types[$image_info[2]];[/code]

Insert below:
Code:
[code]if ($image_info[2] == 3) $quality = 9;[/code]

[함수] 파일 처리 함수

basename -- 경로명에서 파일이름만 반환합니다
chgrp -- 파일의 그룹을 변환합니다
chmod -- 파일의 모드 변경
chown -- 파일의 소유자 변경
clearstatcache -- 파일의 통계(stat) 캐시를 삭제합니다.
copy -- 파일을 복사합니다
delete -- 실제로는 없는 명령
dirname -- 경로의 구성요소중에서 디렉토리 이름만 반환합니다.
disk_free_space -- Returns available space in directory
disk_total_space -- Returns the total size of a directory
diskfreespace -- 디렉토리의 사용가능한 공간을 반환합니다.
fclose -- 열려있는 파일 포인터를 닫습니다.
feof -- 파일의 끝이 파일포인터에 있는지 테스트합니다.
fflush -- 출력결과를 파일로 보냅니다.
fgetc -- 파일포인터로부터 문자 가져오기
fgetcsv -- 파일포인터에서 라인을 가져오고 CVS 에 맞게 변환합니다.
fgets -- 파일 포인터에서 라인 가져오기
fgetss -- 파일포인터에서 라인을 가져오고 HTML 태그를 없애기
file_exists -- 파일이 있는지 체크
file_get_contents -- Reads entire file into a string
file_put_contents -- Write a string to a file
file -- 파일전체를 배열로 읽어들임
fileatime -- 최근에 파일에 접근한 시간을 가져옴
filectime -- 파일의 아이노드 변경시간을 가져옵니다
filegroup -- 파일의 그룹을 가져옵니다
fileinode -- 파일의 아이노드를 가져옵니다
filemtime -- 파일이 수정된 시간을 가져옵니다
fileowner -- 파일의 소유자를 가져옵니다
fileperms -- 파일의 권한을 가져옵니다
filesize -- 파일의 크기를 가져옵니다
filetype -- 파일의 형식을 가져옵니다
flock -- 파일 잠김에 관한 간단한 도움말
fnmatch -- Match filename against a pattern
fopen -- 파일이나 URL을 엽니다
fpassthru -- 파일 포인터에 남아있는 모든 데이타를 출력합니다
fputs -- 파일 포인터에 기록하기
fread -- Binary-safe 파일 읽기
fscanf -- 형식에 따라서 파일로 부터 분석하여 입력하기
fseek -- 파일 포인터에서 찾기
fstat -- 오픈 파일 포인터를 사용하는 파일에 대한 정보 가져오기
ftell -- 파일포인터의 읽기/쓰기 위치 말하기
ftruncate -- 주어진 길이로 잘라내기
fwrite -- Binary-safe 파일 쓰기
glob -- Find pathnames matching a pattern
is_dir -- filename 이 디렉토리인지 아닌지 이야기하기
is_executable -- filename이 실행가능한 것인지 아닌지 이야기하기
is_file -- filename이 보통 파일인지 아닌지 이야기하기
is_link -- filename이 심볼릭 링크인지 아닌지 이야기하기
is_readable -- filename이 읽기 가능한 것인지 아닌지 이야기하기
is_uploaded_file -- file이 HTTP POST를 통해 업로드된 것인지 아닌지 이야기하기
is_writable -- filename이 쓰기가능한 것인지 아닌지 이야기하기
is_writeable -- Alias of is_writable()
link -- hard link 만들기
linkinfo -- 링크 정보 가져오기
lstat -- 파일이나 심볼릭 링크에 관한 정보를 제공
mkdir -- 디렉토리 만들기
move_uploaded_file -- 업로드된 파일을 다른곳으로 이동하기
parse_ini_file -- Parse a configuration file
pathinfo -- Returns information about a file path
pclose -- 진행되는 파일 포인터 닫기
popen -- 진행되는 파일 포인터를 열기
readfile -- 파일을 출력합니다
readlink -- symbolic link의 target 반환
realpath -- 표준화된 절대 경로명을 반환합니다
rename -- 파일을 새 이름으로 고치기
rewind -- 파일포인터의 위치를 되돌립니다(rewind).
rmdir -- 디렉토리 제거하기
set_file_buffer -- 주어진 파일 포인터에 파일 버퍼링 설정하기
stat -- file에 대한 정보 제공
symlink -- 심볼릭 링크 만들기
tempnam -- 유일한 파일 이름 만들기
tmpfile -- 임시 파일 만들기
touch -- 파일의 수정시간을 설정합니다
umask -- 현재의 umask를 변경하기
unlink -- 파일을 삭제하기

[함수] 문자열 처리 함수

AddCSlashes -- C 형식으로 문자열에 슬래쉬를 덧붙입니다.
addslashes -- 문자열에 슬래쉬를 덧붙입니다.
bin2hex -- 바이너리 데이터를 16진수 표현으로 바꿉니다.
chop -- rtrim()의 별칭.
chr -- 특정 문자를 반환합니다.
chunk_split -- 문자열을 작은 조각으로 나눕니다.
convert_cyr_string -- 키릴 문자셋을 다른 것으로 변환합니다.
convert_uudecode -- Decode a uuencoded string
convert_uuencode -- Uuencode a string
count_chars -- 문자열 안에 사용한 문자에 대한 정보를 반환합니다.
crc32 -- 문자열의 crc32값을 계산합니다.
crypt -- 단방향 문자열 암호화(해슁).
echo -- 하나 이상의 문자열을 출력합니다.
explode -- 문자열을 주어진 문자열을 기준으로 분리합니다.
fprintf -- 문자열을 형식화하여 스트림에 기록합니다.
get_html_translation_table -- htmlspecialchars()와 htmlentities()에서 사용하는 변환표를 반환합니다.
hebrev -- 논리 헤브라이어 텍스트를 표시 텍스트로 변환합니다.
hebrevc -- 개행 문자를 포함하여 논리 헤브라이어 텍스트를 표시 텍스트로 변환합니다.
html_entity_decode -- 모든 HTML 엔티티를 해당하는 문자로 변환합니다.
htmlentities -- 해당하는 모든 문자를 HTML 엔티티로 변환합니다.
htmlspecialchars -- 특수 문자를 HTML 엔터티로 변환합니다.
implode -- 문자열로 배열 요소를 결합합니다.
join -- implode()의 별칭.
levenshtein -- 두 문자열 사이의 Levenshtein distance를 계산합니다.
localeconv -- 숫자 형식화 정보를 얻습니다.
ltrim -- 문자열 시작 부분의 공백을 제거합니다.
md5_file -- 주어진 파일명의 md5 해쉬를 계산합니다.
md5 -- 문자열의 md5 해쉬를 계산합니다.
metaphone -- 문자열의 메타폰 키를 계산합니다.
money_format -- Formats a number as a currency string
nl_langinfo -- 언어와 로케일 정보를 얻습니다.
nl2br -- 문자열의 모든 줄바꿈 앞에 HTML 줄바꿈 태그를 삽입합니다.
number_format -- Format a number with grouped thousands
ord -- 문자의 아스키 값을 반환합니다.
parse_str -- 문자열을 처리하여 변수를 생성합니다.
print -- 문자열을 출력합니다.
printf -- 형식화한 문자열을 출력합니다.
quoted_printable_decode -- 인용되어 있는 출력 가능 문자열을 8비트 문자열로 변환합니다.
quotemeta -- 메타 문자를 인용합니다.
rtrim -- 문자열 끝 부분의 공백을 제거합니다.
setlocale -- 지역적보를 지정한다.
sha1_file -- 파일의 sha1 해쉬를 계산합니다.
sha1 -- 문자열의 sha1 해쉬를 계산합니다.
similar_text -- 두 문자열 간의 유사성을 계산합니다.
soundex -- 문자열의 soundex 키를 계산합니다.
sprintf -- 형식화한 문자열을 반환합니다.
sscanf -- 문자열을 형식에 따라 처리합니다.
str_ireplace -- 대소문자를 구별하지 않는 str_replace().
str_pad -- 문자열을 어떠한 길이가 되도록 다른 문자열로 채웁니다.
str_repeat -- 문자열을 반복합니다.
str_replace -- 발견한 모든 검색 문자열을 치환 문자열로 교체합니다.
str_rot13 -- 문자열에 rot13 변환을 수행합니다.
str_shuffle -- 문자열을 랜덤하게 섞습니다.
str_split -- 문자열을 배열로 변환합니다.
str_word_count -- 문자열에서 사용한 단어에 대한 정보를 반환합니다.
strcasecmp -- 대소문자를 구별하지 않는 바이너리 호환 문자열 비교
strchr -- strstr()의 별칭.
strcmp -- 바이너리 호환 문자열 비교
strcoll -- 로케일 기반 문자열 비교
strcspn -- 마스크에 매칭하지 않는 처음 세그먼트의 길이를 찾습니다.
strip_tags -- 문자열에서 HTML과 PHP 태그를 제거합니다.
stripcslashes -- addcslashes()로 처리한 문자열을 되돌립니다.
stripos -- 대소문자를 구별하지 않고 문자열이 처음 나타나는 위치를 찾습니다.
stripslashes -- addslashes()로 처리한 문자열을 되돌립니다.
stristr -- 대소문자를 구별하지 않는 strstr()
strlen -- 문자열의 길이를 구합니다.
strnatcasecmp -- "natural order" 알고리즘을 이용한 대소문자를 구별하지 않는 문자열 비교.
strnatcmp -- "natural order" 알고리즘을 이용한 문자열 비교
strncasecmp -- 대소문자를 구별하지 않는 처음 n 문자의 이진 호환 문자열 비교
strncmp -- 처음 n 문자의 이진 호환 문자열 비교
strpbrk -- Search a string for any of a set of characters
strpos -- 문자열이 처음 나타나는 위치를 찾습니다.
strrchr -- 문자열에서 문자가 마지막으로 나오는 부분을 찾습니다.
strrev -- 문자열을 뒤집습니다.
strripos -- 문자열에서 대소문자 구별 없이 문자열이 나타나는 마지막 위치를 찾습니다.
strrpos -- 문자열에서 마지막 문자의 위치를 찾습니다.
strspn -- 마스크에 매칭되는 초기 세그먼트의 길이를 찾는다.
strstr -- 문자열이 처음으로 나타나는 부분을 찾습니다.
strtok -- 문자열을 토큰화 합니다.
strtolower -- 문자열을 소문자로 만듭니다.
strtoupper -- 문자열을 대문자로 만듭니다.
strtr -- 특정 문자를 번역한다.
substr_compare -- Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters
substr_count -- 부분문자열의 수를 센다
substr_replace -- 문자열의 일부를 치환한다.
substr -- 문자열의 일부를 반환한다.
trim -- 문자열의 처음과 끝에 있는 공백을 제거한다.
ucfirst -- 문자열의 처음 글자를 대문자로 만든다.
ucwords -- 문자열에 있는 각 단어의 처음 글자를 대문자로 바꾼다.
vprintf -- Output a formatted string
vsprintf -- Return a formatted string
wordwrap -- 정지문자를 이용해 주어진 수 만큼의 문자를 래핑한다.

정규표현식의 규칙

 
1.  '.' 특수 문자
   1-1 설명 : '.'는 어떤 글자던 임의의 한 글자를 가르킨다.
   1-2 예제 : a.c = abc, acc, adc 등  한글자만 대신한다.
 
---------------------------------------------------------------------------
 
2. '*' 특수 문자
   2-1 설명 : '*'는 바로 앞의 문자를 의미, 그 문자가 없거나 하나 이상임을 나타낸다.
   2-2 예제 : a*b = b, aab, aaab 등 b앞에 a가 없거나 하나 이상 존재하는 문자열과 일치
 
---------------------------------------------------------------------------
 
3. '+' 특수 문자
   3-1 설명 : '+'는 바로 앞의 문자를 의미, 그 문자가 하나 이상인 패턴을 가리킨다
   3-1-1 추가 설명 :  '*' 와 마찬가지로 앞에 하나의 문자가 있어야한다.
   3-2 예제 : a+b = ab, aab, abfsfb등 b앞에 a가 최소 하나 이상 존재하는 문자열과 일치
 
---------------------------------------------------------------------------
 
4. '?' 특수 문자
   4-1 설명 : '?' 는 바로 앞의 문자를 나타내고 그 문자가 없거나 1개임을 나타낸다.
   4-1 예제 : ab?c = ac, abc a와 c사이에 b가 있거나 없는 문자와 일치
 
---------------------------------------------------------------------------
 
5. '^' 특수 문자
   5-1 설명 : '^'는 바로 뒤의 문자열을 의미 그 문자열로 시작되는 것을 나타냄
   5-2 예제 : ^abc = abc is alpabet, abcdefg 등의 문자열과 일치
 
---------------------------------------------------------------------------
 
6. '$' 특수 문자
   6-1 설명 : '$'는 바로 앞의 문자열을 의미하며 그 문자열로 끝나는것을 나타낸다.
   6-1-1 추가 설명 : '^'가 제일 앞에 들어가면 '$'는 문자열 끝부분 패턴을 나타낸다.
   6-2 예제 : ab$ = dddab, cccab, eeeab등 ab로 끝나는 문자열과 일치
 
---------------------------------------------------------------------------
 
7. '[]' 특수 문자
   7-1 설명 : '[]'안에 있는 문자열중 하나를 포함한 문자를 의미한다.
   7-1-1 추가 설명 : '[]'안에서는  ' - ' 로범위지정이 가능하다. 예:[a-c] = abc
   7-2 예제 : [abc]d = affd, begd, card 등 a,b,c를 포함한 문자열과 일치
 
---------------------------------------------------------------------------
 
8. '{}' 특수 문자
   8-1 설명 : '{}'는 앞에 있는 문자나 문자열의 개수를 나타낸다.
   8-2 예제 : a{2}b = aab
 
---------------------------------------------------------------------------
 
9. '()' 특수 문자
   9-1 설명 : '()'안에있는 문자열을 그룹화 한다.
   9-2 예제 : a(bc) = abcbc, abcbcbc abc를 포함한 모든문자열과 일치
                 단, abc중 bc는 한 그룹이다.
 
---------------------------------------------------------------------------
 
10. '|' 특수문자
   10-1 설명 : '|' 는 or 연산자이다
   10-2 예제 : i | you = i am busy, you have... 등 i나 you를 포함한 문자열과 일치
 
---------------------------------------------------------------------------
 
11. 문자 클래스
   11-1 : [[:alpha:]] 알파벳 문자중 하나 [a-zA-Z], [a-Z]와 동일
   11-2 : [[:digit:]] 숫자 한자를 의미 [0-9] 와동일
   11-3 : [[:alnum:]] 알파벳 문자나 숫자중 하나를 의미 [a-zA-Z0-9]와 동일
   11-4 : [[:space:]] 공백 문자
 
---------------------------------------------------------------------------

MySQL 이전작업으로 인한 패스워드 복구방법(그누보드)

 
전에는 제로보드를 서버이전했을때 MySQL 버전차이로 인한 패스워드 오류를 복구하는 방법을 알아보았다.
 
이번엔 그누보드를 이용했을때의 처리 방법이다.
 
bbs/login_check.php 파일의 15번째 줄에 아래 코드를 바꾸어주면 해결할 수 있다.

[code php]/* if (!$mb[mb_id] || (sql_password($mb_password) != $mb[mb_password])) alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다."); */ if (!$mb[mb_id] || (sql_password($mb_password) != $mb[mb_password])) { // 예전형식의 패스워드를 이전해 왔을때 비교하기 $sql = "select * from $g4[member_table] where mb_id='$mb_id' and mb_password=old_password('$mb_password') "; $result_chk = sql_fetch($sql); if($result_chk[mb_id][0]) { $pwd_patch = "update $g4[member_table] set mb_password=password('$mb_password') where mb_id='$mb_id'"; sql_query($pwd_patch); $mb = get_member($mb_id); } else { alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다."); } }[/code]

MySQL 버전업으로 인한 password 복구 방법(제로보드)

 
MySQL 4.0버전에서 4.1이상의 버전으로 업그레이드시 패스워드 저장방식이 바뀌었습니다.
 
그에 따라 서버 이전을 하거나 업그레이드를 할 경우 패스워드 저장형식이 달라 로그인이 되지 않는 현상이 발생합니다.
 
개개인의 패스워드를 일일이 알지 못하기 때문에 회원이 로그인을 하면 패스워드를 체크하여 새로운 형식으로 변경되어 저장하도록 바꾸어야 한다.
 
 
패스워드 체크를 하는 쿼리문 앞에 다음과 같은 형식의  업데이트문을 두어 새로운 형식과 같으면 그냥 로그인을 하고 그렇지 않은 경우 old_password와 비교하여 일치하면 새로운 형식의 패스워드로 업데이트를 한 후 로그인을 하게 한다.
 
아래는 제로보드의 login_check.php 파일을 수정한 예이다.

[code php]$result_chk = mysql_fetch_array(mysql_query("select count(user_id) from $member_table where user_id='$user_id' and password=password('$password')")); if(!$result_chk[0]) { $result_chk = mysql_fetch_array(mysql_query("select count(user_id) from $member_table where user_id='$user_id' and password=old_password('$password')")); if($result_chk[0]) { $que = mysql_query("update $member_table set password=password('$password') where user_id='$user_id'"); } } $result = mysql_query("select * from $member_table where user_id='$user_id' and password=password('$password')") or error(mysql_error()); $member_data = mysql_fetch_array($result);[/code]

PHP 문자열 자르기

[code php]$tmpstr = strip_tags($str); // str 변수는 원문이며 외부에서 이함수를 호출할때 전달됩니다.. if(strlen($tmpstr) <= $str_len) return $str; // 테그없앤 글자수가 자를갯수보다 작거나 같으면 그냥 리턴 else { //그게 아니면 if(ord(substr($tmpstr,$str_len,1)) >= 127) { // 테그를 제거한 문자열에서 자를 길이를 시작점으로 1바이트문자를 떼어왔을때 이 문자열의 아스키값이 127이라면 이는 2바이트의 한글또는한자등으로 간주 if(strlen($tmpstr) != strlen($str)) $str_len--; // 테그를 제거한 문자열이 원문과 다를때 즉 테그가 포함되어있을경우 if(ord(substr($tmpstr,$str_len,1)) >= 127) $cutn = 2; // 테그를 제거한 문자열을 지정된 길이만큼으로 시작점을 주어 1바이트를 떼어온것이 아스키값이 127일때 즉 한글이나 그이상일때는 비교에 사용될 길이를 2로 지정합니다.. else $cutn = 1; //그게아니면 1바이트 for($i=0;$i= 127) { // 한글이나 그이상일때 $orc = substr($str,$i,2); // 원문에서 시작점을 i 값으로 주어 2바이트를 떼어옵니다.. $src = substr($tmpstr,$str_len,$cutn); // 비교대상인 테그를 제거한 문자열은 시작점을 자를길이로 지정하고 위에서 정의한 cutn 값만큼 가져옵니다.. if($orc == $src ) { // 두개를 비교해서 같으면 자를 위치를 찾은것.. $pos = $i; // 그 위치값을 기억해둡니다... break; //루프를 빠져나갑니다.. } $i++; // 2바이트의 한글이나 그이상값을 만나서 비교했찌만 자를위치가 아니기때문에 i값을 하나더 더해서 루프시킵니다.. } else { // 한글이나 그이상문자열이 아닌 1바이트문자일때.. $orc = substr($str,$i,1); $src = substr($tmpstr,$str_len,$cutn); if($orc == $src) { $pos = $i; break; } } } $str2 = substr($str,0,$pos); // 이부분은 원문에서(테그가 포함된) 위에서 찾은 위치만큼 자릅니다... if(strlen($tmpstr) != strlen($str)) { //테그가 있을때 $tstr = substr($str,$pos); // 잘린위치부터 끝까지반환 $tags = strip_tags($tstr); // 테그를없앰 $tags2 = str_replace($tags,"",$tstr); //테그만 남기고 제거 } else $tags2 = ""; // 테그가 없으면 이 변수는 초기화 $str = $str2."...".$tags2; // 나머지 테그를 붙여서 완성! //아래도 동일 } else { if(strlen($tmpstr) != strlen($str)) { //테그가 있는거다 $tstr = substr($str,$str_len); // 잘린위치부터 끝까지반환 $tags = strip_tags($tstr); // 테그를없앰 $tags2 = str_replace($tags,"",$tstr); //테그만 남기고 제거 } else $tags2 = ""; $str = substr($str,0,$str_len)."...".$tags2; } return $str; //완성된것을 리턴 }[/code]

숫자형으로 출력시 소수점과 1000단위 컴마 표시법

[code php]$number = 1234.56; // english notation (default) $english_format_number = number_format($number); // 1,234 // French notation $nombre_format_francais = number_format($number, 2, ',', ' '); // 1 234,56 $number = 1234.5678; // english notation without thousands seperator $english_format_number = number_format($number, 2, '.', ''); // 1234.57[/code]

[쿠키 암호화] Function #2 (MD5 + Hex)

[code php]function encrypt_md5_base64($plain_text, $password="password", $iv_len = 16) { $plain_text .= "\x13"; $n = strlen($plain_text); if ($n % 16) $plain_text .= str_repeat("\0", 16 - ($n % 16)); $i = 0; while ($iv_len-- >0) { $enc_text .= chr(mt_rand() & 0xff); } $iv = substr($password ^ $enc_text, 0, 512); while($i <$n) { $block = substr($plain_text, $i, 16) ^ pack('H*', md5($iv)); $enc_text .= $block; $iv = substr($block . $iv, 0, 512) ^ $password; $i += 16; } return base64_encode($enc_text); } function decrypt_md5_base64($enc_text, $password="password", $iv_len = 16) { $enc_text = base64_decode($enc_text); $n = strlen($enc_text); $i = $iv_len; $plain_text = ''; $iv = substr($password ^ substr($enc_text, 0, $iv_len), 0, 512); while($i <$n) { $block = substr($enc_text, $i, 16); $plain_text .= $block ^ pack('H*', md5($iv)); $iv = substr($block . $iv, 0, 512) ^ $password; $i += 16; } return preg_replace('/\x13\x00*$/', '', $plain_text); } /******************************************/ $name = '홍길동'; $enc_name = encrypt_md5_base64($name); $dec_name = decrypt_md5_base64($enc_name); echo "name = {$name}\n\n"; echo "encode_name = {$enc_name}\n\n"; echo "decode_name = {$dec_name}\n\n";[/code]

[쿠키 암호화] Function #1 (MD5 + Base64)

[code php]function encrypt_md5_base64($plain_text, $password="password", $iv_len = 16) { $plain_text .= "\x13"; $n = strlen($plain_text); if ($n % 16) $plain_text .= str_repeat("\0", 16 - ($n % 16)); $i = 0; while ($iv_len-- >0) { $enc_text .= chr(mt_rand() & 0xff); } $iv = substr($password ^ $enc_text, 0, 512); while($i <$n) { $block = substr($plain_text, $i, 16) ^ pack('H*', md5($iv)); $enc_text .= $block; $iv = substr($block . $iv, 0, 512) ^ $password; $i += 16; } return base64_encode($enc_text); } function decrypt_md5_base64($enc_text, $password="password", $iv_len = 16) { $enc_text = base64_decode($enc_text); $n = strlen($enc_text); $i = $iv_len; $plain_text = ''; $iv = substr($password ^ substr($enc_text, 0, $iv_len), 0, 512); while($i <$n) { $block = substr($enc_text, $i, 16); $plain_text .= $block ^ pack('H*', md5($iv)); $iv = substr($block . $iv, 0, 512) ^ $password; $i += 16; } return preg_replace('/\x13\x00*$/', '', $plain_text); } /******************************************/ $name = '홍길동'; $enc_name = encrypt_md5_base64($name); $dec_name = decrypt_md5_base64($enc_name); echo "name = {$name}\n\n"; echo "encode_name = {$enc_name}\n\n"; echo "decode_name = {$dec_name}\n\n";[/code]

DB데이터를 엑셀파일로 출력시키기

[code php]require_once(\"dbconn.php\"); header( \"Content-type: application/vnd.ms-excel\" ); header( \"Content-Disposition: attachment; filename=$filename.xls\" ); header( \"Content-Description: PHP4 Generated Data\" ); $sql = \"SELECT * FROM tableName\"; $stmt = mysql_query(\"$sql\",$conn) or die(mysql_error()); while ($row = mysql_fetch_row($stmt)){ echo (\"$row[0] $row[1] $row[2] $row[3] ... \\r\\n\"); } mysql_free_result($stmt); mysql_close($conn);[/code]

Session 오류 해결하기

세션설정이 문장 중간부분에 올때 에러메세지를 출력하는 경우가 있다.

이런 경우 아래와 같은 방법으로 문제를 해결할 수 있다.

session_start(); 로 되어있는 부분 앞에 @를 붙인다.

[code]@session_start();[/code]

첨부파일 다운로드받기

<a href="down.php?file=xx.xx"> 와 같은 식으로 링크를 건다

[code php]// down.php $Directory = "data/"; $FileName = $file; $fp = fopen($Directory . $FileName, "r"); $FileSize = filesize($Directory . $FileName); $Contents = "Content-type:file/Unknown\n"; $Contents .= "Content-Length:$FileSize\n"; $Contents .= "Content-Disposition:attachment; filename=$FileName"; header($Contents); $Contents = fread($fp, $FileSize); echo $Contents; fclose($fp);[/code]

파일명을 직접 주지 않고 DB와 연동하여 파일을 다운로드 할 수도 있다.

post, get, cookie, session 변수 값 할당

[code php]foreach($_REQUEST as $key => $value) { $$key = $value; echo "{$key} = $value\n"; }[/code]

post, get, cookie, session 변수 확인

[code php]$DebuggingMethod = 1; function GetMethodType($CheckingMethod, $TranceMethod) { echo "-----------------------------------------------------------------\n"; echo "" . $TranceMethod . "\n"; echo "-----------------------------------------------------------------\n"; $first_counter = 1; foreach ($CheckingMethod as $first_key => $first_value) { if ( is_array($first_value) ) { $second_counter = 1; foreach ($first_value as $second_key => $second_value) { echo " - " . $second_counter . ". " . $second_key . " = " . $second_value . "\n"; $second_counter++; } } else { echo "" . $first_counter . ". " . $first_key . " = " . $first_value . "\n"; $first_counter++; } } echo "-----------------------------------------------------------------\n"; } if ( $DebuggingMethod ) { if ( $_POST ) { GetMethodType($_POST, "POST"); } if ( $_GET ) { GetMethodType($_GET, "GET"); } if ( $_COOKIE ) { GetMethodType($_COOKIE, "COOKIE"); } if ( $_SESSION ) { GetMethodType($_SESSION, "SESSION"); } }[/code]