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


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


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



컴포저라는 단어의 뜻?


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


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



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


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

패지키지를 정의하고 의존하기위해  필요한 파일은 composer.json 라는 파일의 구조 예시입니다.
{
    "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"
                }
            }
        }
}


호환성 있는 설치환경


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




의존성 도구가 필요할까?


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

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


마무리


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


댓글을 달아 주세요


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)와 똑같이 변수 앞에 붙혀주면 됩니다.





마무리


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


댓글을 달아 주세요


IIS php 셋팅 하기 


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



인터넷 정보 서비스 
마이크로 소프트가 만든 웹 언어인
IIS 에서는 ASP와 .net 뿐만 아니라

PHP도 실행할 수 있습니다.
다만 간단한 몇 가지 설정이 필요합니다.

그 전에 
"웹 플랫폼 설치 관리자" 를 먼저 설치해주세요.

IIS를 배우는 시간이기에
PHP 프로그램을 따로 설치하는 방법은 안하겠습니다.
(PHP 는 사실 그냥 설치 프로그램을 실행만 하면 되긴 하죠.)

그리고 패널 화면 오른쪽 작업 안에 있는
IIS 새 웹 플랫폼 구성 요소 가져오기 를 클릭 합니다.


▼ 실행된 프로그램에서
PHP 라고 검색 합니다.



▼ 마치 메이븐처럼 
필요한 프로그램들을 추가 클릭으로 설치가 가능합니다.
저희는 php7.0을 설치해보겠습니다.
추가를 눌러주세요.


▼ 필요한 구성요소를 말해주네요.
동의 합니다. 그리고 직접 다운로드 링크까지 제공 해주네요.


▼ 그럼 설치가 진행됩니다.
깨알 같은 Azure 홍보도 잊지 않네요


▼ PHP 설치가 완료 되었습니다. 



▼ 제 컴퓨터 기준으로는
아래 폴더에 설치가 완료 된게 보입니다. 
C:\Program Files (x86)\PHP\v7.0


▼ 이제 IIS에서 
처리기 매핑을 실행합니다.


▼ 모듈 매핑 추가를 클릭해주세요.


▼ 그리고 아래처럼 값을 입력 합니다.
마지막에 이름은 내가 알아보기 위한 이름입니다.
원하시는 이름명으로 사용하셔도 됩니다. 


▼ 예 를 클릭해주세요.


▼ 그럼 이제 준비가 완료되었습니다.
IIS에 PHP 파일을 업로드 해서 실행해보겠습니다.


▼ PHP 소스의 내용은 아래와 같습니다. 
<?php
phpinfo();
?>



▼ 그리고 IIS에서 서버를 구동해
해당 파일을 실행 해보면 와우
놀랍게 PHP랑 ASP 가 함께 구동 되고 있네요 




참고할 만한 글들


APM - 오토셋 (autoset) 설치

IIS - 웹 플랫폼 설치 관리자 셋업 / 다운로드

IIS - HTML을 ASP로 인식 / 스크립트 매핑

PHP - XAMPP 설치하기 (새로운 APMSETUP)

PHP | Nginx | MariaDB - WNMP 설치, 다운로드, 기본셋팅

PHP - APMSETUP7 설치



마무리


IIS에서 많이들 PHP를 사용하고 계십니다.




댓글을 달아 주세요


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 준비 된 함수가 참 많습니다.



댓글을 달아 주세요


XE 설치시에 PHP는 7.0 추천


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

웹호스팅을 구매하거나
PHP을 셋팅할때 단골 고민이 있습니다.
PHP 버전을 몇으로 할 것인가?

그러면 가장 떠오르는 버전은 두개입니다

PHP 5.6 그리고 PHP 7.2


PHP 5.6은 미우나 고우나 오랫동안 
한국 서버사이드 언어와 함께 했습니다.

각종 CMS나 개인 호스팅도 대부분 5.6이죠
가장 안정화 됐고 그후에 버전 업이 늦었으니깐요.

그런데 지금은 7.x 버전도 안정화가 되었습니다.

확실한건 PHP 5.x보다 속도가 매우 빠릅니다
그냥 웹페이지 가동해보면 체감상 많이 빠릅니다.

그런데 알다시피 

XE 에서는 Object 라는 클래스명을 사용해왔었는데
이 때문에 오래된 모듈들이 오류가 납니다. 

물런 개발자라면 클래스 얼리어스 설정 이나
find ./ -name 설정을 하면 간단하나

개발자가 아니라면 조금 이해 하기 어려운 부분입니다.



직접 5.6 , 7.0 , 7.2 버전을 모두 XE로 테스트 해본 결과
CMS 오류 대응에 미흡한 일반인이라면 
7.0을 추천 드립니다.

5.6은 XE를 돌리기에 가장 알맞지만 호환성이나 보안 문제가 일어날 확률이 높고
7.2는 생각보다 코어부터 쓰던 모듈들을 고칠게 많았습니다.
XE는 오래된 모듈들이 많아서 어쩔 수 없죠.

그래서 7.0을 선택하니 속도도 빠르고 호환도 좋고
뜯어 고칠게 생각보다 적네요.

그래서 전 PHP 7.0에 고코더넷을 돌리고 있습니다

혹시 버전을 고민중이라면
수정 사항에 대해 취약하다면
7.x대에 호환성과 안정화가 가장 오래된

7.0을 추천 드립니다


마무리


5.6 쓰다 7.0 오니 사이트가 정말 빠릿 합니다.
 



댓글을 달아 주세요