컴포저에 대해 알아봅시다.


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


오늘은 컴포저라는 PHP 라이브러리에 대해 알아보려고 합니다. 라라벨을 사용하면 꼭 알아야하는 개념이고 요즘에 꼭 필요한 의존성 도구라서 다뤄봅니다.



컴포저라는 단어의 뜻?


단어 뜻이 참 익숙합니다. Composer라는 뜻은 작곡가와 작가를 말하는 단어입니다. 


그래서 그런지 공식 홈페이지 컴포저 사이트에 접속해보면 이렇게 마에스트로가 지휘 하는 모습이 나타납니다. 새로 고침할때마다 지휘자 머리색과 옷이 달라지는 센스를 확인 가능합니다. 



정체가 뭐야? 의존성 도구지


node.js에는 npm, 파이썬에는 pip, 루비에는 bundle이 있습니다. 이것들은 모두 의존성 도구 입니다. php에서도 대표적인 의존성 도구가 바로 이 composer입니다. 다른 언어와 마찮가지로 라이브러리를 선언해 현재 프로젝트에서 사용이 가능합니다. 

패지키지를 정의하고 의존하기위해  필요한 파일은 composer.json 라는 파일의 구조 예시입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
    "name":"gocoder",
    "description":"gocoder",
    "repositories":[
        {
            "type":"package",
            "package":{
                "name":"phpids/phpids",
                "version":"0.7",
                "dist":{
                    "url":"http://phpids.org/files/phpids-0.7.zip",
                    "type":"zip",
                    "reference":"0.7"
                }
            }
        }
}
cs


호환성 있는 설치환경


php 5.3.2에서 사용이 가능합니다. 그리고 윈도우, 리눅스, Mac OS등에서도 사용이 가능합니다. 호환성이 뛰어나기 때문에 어느 운영체제에서도 사용할 수 있는 특징이 있습니다.




의존성 도구가 필요할까?


프로젝트를 하던중에 업로드 컴포넌트를 사용하였는데 1.0 버전을 사용했습니다.그리고 3년후에 고도화 프로젝트를 시작하던 중에 해당 시스템이 어떤 프로그램으로 최적화 하여 사용했는지 알수가 없습니다. 왜냐면 현재 그 컴포너트는 9.0까지 나왔습니다. 기록이 남아있지 않아 결국 이것 저것 버전을 설치해보다가 오류를 발생시킵니다.

만약 컴포저와 같은 의존성 도구가 있다면 json에 해당 모듈과 버전을 기록하게 되고 이것을 다른 서버로 이전하거나 분석할때 명확하게 버전을 명시 해놓습니다. 그러므로 긴 시간이 지나도 의존성 도구로 관리되는 프로그램은 생명주기가 빠릅니다. 그리고 다른 서버로 이동 할때도 알아서 필요한 버전의 도구들을 알아서 설치해주므로 유지보수에서도 많이 유리 합니다. 


마무리


간단하게 무엇인지 알아봤습니다.


댓글을 달아 주세요


default php.ini 파일을 다운하기


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


PHP.ini는 PHP를 설정하는 파일입니다. PHP의 동작을 정의하여 원하는되로 구현할 수 있게 해주는 역할을 합니다. 하지만 PHP.ini 수정을 하다보면 원래 데이터를 잊어버리기 일수 입니다. 그래서 최초의 php.ini 파일이 필요할때가 있는데이 이 파일을 제공하는 사이트가 있습니다.


 1. 해당 사이트에 들어가면 아래에 default php.ini 파일을 다운로드 할 수 있습니다. 기본 설정 파일이 필요하시면 다운로드해서 살펴보세요.


 2.첨부파일로도 올려 드립니다. 


마무리


은근 필요한 파일


댓글을 달아 주세요


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 리더 라이브러리




댓글을 달아 주세요

  • dda 2019.12.06 16:05  댓글주소  수정/삭제  댓글쓰기

    좋은글 감사합니다. 근데 item 안에 description 안에 있는 테그의 내용은 어떻게 뽑아오나요. 궁금합니다.

    • Favicon of https://gocoder.tistory.com 고코더 2019.12.06 16:37 신고  댓글주소  수정/삭제

      안녕하세요.
      글 제목처럼 간단한 예제를 보여드리는 내용이라 해당 내용은 안다뤘는데요.
      설명은 한번더 접근을 해야 하는데요.
      추후에 다시 남겨드리겠습니다
      요즘 다른거 강의하느라 바쁘네요 ㅠ


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" />(절대 경로로 바꿔주셔야 해요)


마무리


서브 도메인의 매력



댓글을 달아 주세요