php의 forward page /  pageContext.forward 같은 리다이렉트 함수는


안녕하세요.
고코더 입니다. 


 1. 언어마다 페이지를 리다이렉트 시키는 방법은 많습니다. 
대표적으로 자바스크립트 프론트에 쓸수 있는
location.href=''; 를 많이 떠올리시는 데요.

 2. 서버언어에서 리다이렉트 시키는 방법이
가장 빠르고 최소한의 리소스로 이동시킬 수 있습니다.
그래서 단순 페이지 리다이렉트라면 
각 언어에 함수를 사용하는걸 추천드립니다. 


 3. PHP는 header() 함수에서 리다이렉트 시키는 기능을 제공 합니다.
아래 코드를 확인해주세요.
1
2
3
4
<?php
header("Location: http://gocoder.net/gotoon");
die();
?>
cs
 4. 왜 개인적으로 PHP만 조금 리다이렉트 느낌이 조금 다른데
페이지를 바로 리다이렉트 시켜 줍니다.



마무리


아주 많이 쓰는 코드입니다.




댓글을 달아 주세요


PHP에서 IP 가져오기 IPv4


안녕하세요.
고코더 입니다.


보통은 PHP에서 사용자의 IP를 가져올때
$_SERVER 함수를 이용해 가져오는걸 많이
배웠는데 막상 웹사이트가 작동하는
서버에서는 192로 시작하는 제대로된 아이피를 가져오지 못하는걸 확인하실 수 있습니다.

PHP 사용자 IP를 검색해도 보통 서버 함수를 이용한
방법이 대다수 인거 같네요
$_SERVER['REMOTE_ADDR']; 

그래서 오늘은 실제로 가장 많이 사용하는
방식인 사용자의 아이피를 가져오는 함수를 이용해보겠습니다.

▼ 우선 아래 소스를 웹에서 확인해보세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
function get_client_ip() {
    $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP'))
        $ipaddress = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ipaddress = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
        $ipaddress = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ipaddress = getenv('REMOTE_ADDR');
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}
echo "SERVER 함수 사용자 아이피 : ".$_SERVER['REMOTE_ADDR'];
echo "<br>";
echo "getenv 사용자 아이피 : ".get_client_ip();
?>
cs
▼ 이걸 웹사이트상에서 확인하면
결과값은 이렇습니다.


▼ 아이피를 가져오는 함수입니다.
이 함수를 이용해서 사용자의 정보를 가져와보세요.
실무에서 가장 많이 사용하는 정석적인 함수 입니다. 
function get_client_ip() {
    $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP'))
        $ipaddress = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ipaddress = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
        $ipaddress = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ipaddress = getenv('REMOTE_ADDR');
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}




마무리


서버 환경과 설정에 따라
IP를 가져오는 방법이 다릅니다.




댓글을 달아 주세요


PHP에서 파일을 cache로 구워서 사용하는 방법


안녕하세요.
고코더 입니다.


접속자가 많은 사이트는
매번 메인페이지의 게시글을 DB로 접속하게 하는 것보단
시간마다 크롬을 돌려 페이지를 구워
HTML로 페이지를 보여주는 방식이 유리합니다.
(접속자가 적으면 오히려 낭비되는 프로세스 일 수도 있습니다)

특히 PHP 홈페이지는 이런 캐시파일을 생생하여
프론트를 노출하는 방식을 많이 씁니다.

그런데 인터넷 상에 간단하게 
페이지를 파일로 굽는 예제가 없어서
한번 남겨봅니다.

▼ 아래 소스를 PHP 서버에서 실행해보세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
ob_start(); // 버퍼링 시작
?>
 
PHP 언어로 캐시 파일을 페이지를 구워보자
<table border="1">
    <Tr>
        <Td> 이름</td>
        <Td> 블로거</td>
        <Td> 홈페이지</td>
    </tr>
    <Tr>
        <Td> 고코더</td>
        <Td> gocoder.tistory.com</td>
        <Td> gocoder.net</td>
    </tr>
</table>
<?
$html = ob_get_contents(); //출력된 데이터를 변수로 담는다                    
 
$handle = fopen("gocoder.html"'w'); //캐시를 담을 페이지 파일을 열고
$result = fwrite($handle$html);    //파일에 내용을 그대로 쓴다.
 
fclose($handle); // 파일 닫기
 
?>
cs


▼ 이렇게 페이지가 캐시로 구워져
gocoder..html로 파일안에 컨텐츠가 채워져 있습니다.




소스 설명



1. 버퍼를 시작하기 
ob_start(); 
-> 해당 시작점 부터 출력된 버퍼를 가져옵니다. 

 2. 출력된 내용을 담기
ob_get_contents(); 
-> start 된 시점부터 출력된 내용을 가져 옵니다.
파일로 구워질 HTML들 입니다.

3. 파일에 쓰는 과정
$handle = fopen("gocoder.html", 'w'); 
-> 캐시를 생성할 파일을 오픈합니다 W는 쓰기 모드 입니다. 
$result = fwrite($handle, $html);    
-> 담아질 내용을 파일에 씁니다. 

가장 간단한 방식으로 구현해보았습니다.
출력된 버퍼를 가져오기 전까지
DB에 연결하여 필요한 데이터를 생성해서
파일에 굽는 방식입니다.

이렇게 하면 매번 DB접속을 필요로 하지 않고
홈페이지를 운영하니 
낭비되는 리소스가 적어집니다..





마무리


사용자가 적은 페이지라면 
버퍼를 만드는 프로세스가 더 낭비가 될 수 있습니다.



댓글을 달아 주세요


문자열 찾기 함수 


안녕하세요.
고코더 입니다.


흔히 ASP나 엑셀 혹은 자바나 스크립트에서
instr이나  indexof를 자주 사용합니다.

특정 문자열이 있으면 해당 문자의 위치를 돌려 주는데
이게 여러가지 로직에서
자주 쓰는 방법입니다.

그런데 PHP에서는
특이한 함수명으로 문자열 찾기 함수가 있습니다

바로 strpos() 입니다.

▼ 제가 직접 작성한 간단한 예시가 있는
아래 소스를 웹에서 구동해보세요.
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
echo strpos("GoCoder ITExpress","IT")."번째에 존재함";
 
if (strpos("GoCoder ITExpress","IT")){
    echo "문자열이 존재함";
};
 
if (strpos("GoCoder ITExpress","고코더"=== false){
    echo "문자열이 존재하지 않음";
};
 
?>
cs

▼ 간단한 예시로 실행해보았습니다.


▼ 기본적인 기능은
해당 문자열에 위치를 반환합니다.
strpos("GoCoder ITExpress","IT")
-> 8을 반환 8번째 있으므로

▼ 실무에서는
해당 문자열이 있으면 이라고 if를 많이 쓰게 됩니다.
이런식으로 if 하면 참일 경우 자동으로 로직으로 들어옵니다.
if (strpos("GoCoder ITExpress","IT")){
    echo "문자열이 존재함";
};

▼ 그리고 거짓일 경우에는 
=== false를 씁니다. 
if (strpos("GoCoder ITExpress","고코더") === false){
    echo "문자열이 존재하지 않음";
};


이렇게 하면
기존에 instr, indexof 처럼 이해가 쉬울거라 생각됩니다.




마무리


strpos 좀 처럼 외워지지 않네요


댓글을 달아 주세요


PHP 형변환 방법 


안녕하세요.
고코더 입니다.


PHP에서 cint() 혹은 parseint() 같은
문자를 숫자로 형변환 하는걸 찾고 계셨군요

PHP는 다른 언어들 보다 더 쉽고
직관성 있게 형변환을 사용할 수 있습니다.

▼ 바로 예제 소스를 보시겠습니다.
1
2
3
4
5
6
7
8
9
10
<?php
    // PHP는 (int)를 원하는
    // 변수에 붙이면 형변환이 된다.
 
    echo (int)1.1;    // 1
    echo (int)"2";    // 2
    echo (int)-3.1;    // -3
    echo (int)"고코더";    // 0
 
?>
cs

앞에 (int)만 붙혀주면 형변환이 완료 됩니다.
길게 설명하기가 미안할 정도네요

그밖에 변환 가능한 형변환 종류는 아래와 같습니다.

(string) 문자열
(int) 정수
(double) 실수
(bool) 부울
(array) 배열
(object) 객체

사용법은 (int)와 똑같이 변수 앞에 붙혀주면 됩니다.





마무리


언어마다 형변환 함수가 
다르니 헷갈려 죽겠네요


댓글을 달아 주세요


PHP로 RSS Feed parsing 하기 


안녕하세요. 고코더 입니다.

RSS 는 사이트의 최신 정보를
XML 형태로 알려주는 규약 입니다.

그래서 제 티스토리 블로그도 자동으로 
해당 기능을 제공 하고 있습니다.
(뒤에 /rss 만 붙이면 되죠)

이 RSS를 가져오는 방법은 무궁무진 하지만
개인적으로 사용해봤을때 PHP에서는 가장 편리했던
lastrss 라이브러리를 이용한 파싱 방법을 소개해드릴려고 합니다.

해당 제작사는 http://lastrss.webdot.cz/
없어진거 같습니다.
도메인을 보니 체크 개발자가 만든거 같네요.

예전에 사용해놓고 백업된 소스를 발견 해서 
리뷰를 남겨봅니다. 

우선 아래 lastpass를 다운로드 받고 압축 해주세요.
▼ 아래 예문을 웹에서 확인해보세요
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
    include 'lastrss.php';
 
    $LRss = new lastRSS;
 
    $LRss->cache_dir = './cache';
    $LRss->cache_time = 0;
    $LRss->cp = 'UTF-8';
    $LRss->items_limit = 0;
    $LRss->CDATA = content;
 
    $sRss = $LRss->get("https://gocoder.tistory.com/rss");
 
    echo $sRss['title']."<Br>";
    foreach($sRss['items'as $item){
       echo $item['title']."<Br>";
       echo $item['link']."<Br>";
     //  echo $item['description']."<Br>";
    }
    exit;
?>
cs

rss.zip


▼ 옵션 설명
cache_dir 
 - 캐시폴더를 설정할 수 있습니다. 재요청시 캐시폴더에서 가져갑니다.
cache_time 
 - 캐시를 재생성할 배치 타임 입니다. 1=1초 입니다.
cp  
 - 문자셋입니다. UTF-8 이어야 겠죠
CDATA
 - 모든 데이터를 가져옵니다. 

▼ 이런식으로 나타나게 됩니다.
가장 쉬운 방식의 RSS 출력 리더 방식이 아닌가 싶네요


제 블로그의 정보를 간단한 코딩으로 가져옵니다.
만든 개발자는 사라졌지만

오류 없이 잘되고 있습니다.
간단한 RSS라면 사용해보세요.


마무리


PHP에서 가장 쓸만한 RSS 리더 라이브러리




댓글을 달아 주세요


01,02,10,11,12 처럼 자릿수 숫자 앞에 0을 채워 넣기 


안녕하세요. 고코더 입니다.

PHP언어에서 한자리 숫자일 경우 앞에 0을 붙혀서
예를 들면 01,02,03,04,05 이런식으로 숫자를 만드는 간단한 방법을 알아보겠습니다.

sprintf() 이라는 함수에 '%02d' 라는 인자를 사용하면 쉽게 숫 자 앞에 0을 채워넣는
방법을 구현 할 수 있습니다.

아래 해당 코드를 실행해보세요.

1
2
3
4
5
6
<?php
echo sprintf('%02d',1)."<br/>";
echo sprintf('%03d',2)."<br/>";
echo sprintf('%04d',3)."<br/>";
exit;
?>
cs



웹사이트에 표시된 숫자열은 아래와 같습니다.


숫자열의 길이를 맞추거나 형식을 위해 숫자 앞에 0을 넣고 싶다면
해당 함수를 이용해 구현해보세요


마무리

PHP 준비 된 함수가 참 많습니다.



댓글을 달아 주세요



하위 도메인 설정하기


안녕하세요. 고코더 입니다. 


하위 도메인 즉 XXX.gocoder.net 이렇게
서브 도메인을 설정하는 방법을 알아보겠습니다.

도메인을 바꾸는 방법은 몇 가지 있는데
대부분 호스팅을 이용해 서비스를 하고 있습니다.

그래서 호스팅을 쓰신다면 가장 좋은 방법인
.htaccess 파일을 이용해 하위 도메인을 설정 할 수 있습니다.

얼마전에 기능 사이트를 하나 개발하였는데
url이 너무 길어서
매력이 없네요


그래서 아래처럼 바꿨습니다.
보기도 쉽고 있어보이죠?


▼ 우선 자신의 도메인의 DNS를 설정해주셔야 합니다. 
저는 cname 으로 설정했습니다. a호스트는 IP가 바뀌면
귀찮아지거든요.



그리고 루트에 있는
/.htaccess 파일에

아래 내용을 추가 합니다.
## tex TO Png site subdomain
RewriteCond $1 !^(tools/text2png)/
RewriteCond %{HTTP_HOST} ^text2png\.gocoder\.net [NC]
RewriteRule ^(.*)$ /tools/text2png/$1 [L]    


▼ 그럼 이렇게 접근이 가능합니다.
그런데 뭔가 좀 달라질 수도 있습니다.


▼ 상대 경로를  절대 경로로 바꿔줘야 합니다.
예를 들면 
<link rel="stylesheet" href="assets/css/main.css" /> 
(상대 경로가 틀어짐)
->
<link rel="stylesheet" href="/tools/text2png/assets/css/main.css" />(절대 경로로 바꿔주셔야 해요)


마무리


서브 도메인의 매력



댓글을 달아 주세요


Deprecated 곧 없어질 함수 기능에 대한 경고  


안녕하세요. 고코더 입니다.


PHP 개발중에 이런 메세지를 보셨을 것입니다.

Deprecated 번역하면 
사용되지 않음 정도가 될거 같습니다.


이 부분은 명확히 말하면 오류가 말하지만 
일명 "무시" 가능한 오류 입니다.

현재 당신이 쓰고 있는 방식은 이제 곧 없어질 방식이므로
다른 방법으로 수정 개발 하라는 말 입니다. 

PHP는 친절하다고 생각될지 모르겠지만...
신나게 쓰고 있던 기능들도 PHP는 쉽게 쉽게 제거 해버립니다.

그래서 개발자 존재의 이유를 알려주는거 같기도 하고..

버전 업이 무서운 언어중의 하나 입니다.

그래도 현재 버전에서
Deprecated 오류가 발생하면 사용은 가능합니다.

다음 버전에서는 쓸수 없으니 빨리 수정 해놓아야겠죠?


마무리


없앨게 아니라 기능만 수정 해주지..



댓글을 달아 주세요


날짜 커스텀 하기 


안녕하세요. 고코더 입니다.

PHP에서는 date()함수를 통해서 현재 날짜와 시간의
표시 형식을 수정 가능 합니다. 

해당 숫자열을 date("변수")에 입력하면
지정한 형식대로 출력이 가능합니다.

Y - 연도
M - 월
D - 일

H - 시간
M - 월
S - 초

▼아래 코드를 입력하고 확인하면 
금방 이해 되실거라 생각 됩니다. 
대소문자에 따라 표현 방법이 다릅니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
    
echo "연도"."\n";
echo "Y - ".date('Y')."\n";
echo "y - ".date('y')."\n";
echo "\n";                   
                      
echo "월"."\n";
echo "M - ".date('M')."\n";
echo "m - ".date('m')."\n";
echo "\n";     
 
echo "일"."\n";
echo "D - ".date('D')."\n";
echo "d - ".date('d')."\n";
echo "\n";     
 
echo "시"."\n";
echo "H - ".date('H')."\n";
echo "h - ".date('h')."\n";
echo "\n";     
 
echo "분"."\n";
echo "I - ".date('I')."\n";
echo "i - ".date('i')."\n";
echo "\n";     
 
echo "초"."\n";
echo "S - ".date('S')."\n";
echo "s - ".date('s')."\n";
echo "\n";     
 
echo "표현형식 1"."\n";;
echo date('y-m-d h:i:s')."\n";
echo "표현형식 2"."\n";;
echo date('Y-M-D H:i:s')."\n";
 
?>
cs

gocoder_date_type.php



▼ 출력 화면 


date 함수를 사용해서 자유롭게 날짜 형식을 표시하세요.



마무리

 
자주 사용하지만 자주 까먹는 YMD HIS 




댓글을 달아 주세요