'php'에 해당되는 글 8건

  1. 2015.05.18 PHP를 활용하여 DB 내용을 JSON으로 출력하기
  2. 2015.05.14 PHP4에서 JSON 설치하기
  3. 2015.05.12 MAC에서 PHP 설정하기
  4. 2012.03.07 웹페이지 접속자에 따른 국문, 영문 페이지의 구분을 위한 국가를 확인 방법에 대한 정리
  5. 2011.10.28 PHP의 allow_url_fopen=off일때 URL 주소로 파일 읽어오기
  6. 2011.10.26 MySQL 테이블을 모두 삭제하는 PHP 소스~
  7. 2011.10.24 정규식으로 전화번호 형식 변경하기 (-포함해서 출력하기)
  8. 2007.09.21 초보자를 위한 PHP, MySQL, Apache (1)

PHP를 활용하여 DB 내용을 JSON으로 출력하기

|



PHP4등 하위버전에서 JSON을 사용하는 방법에 대해서는 PHP4에서 JSON 설치하기 에서 살펴봤다. 

이번에는 실제 DB의 내용을 가져와서 JSON 파일을 만드는 방법을 정리해 본다. 


JSON은 HTML에서 Ajax로 통신하거나 안드로이드, 아이폰과 같은 모바일과 통신하기 위해서 주로 사용한다. 

많이 사용하는 형태인 DB의 데이터를 가져와서 JSON으로 출력하는 부분을 정리해 보자. 


데이터와 JSON 출력형태 

사용할 DB 데이터는 다음과 같다. 예제를 보여주기 위해 임시로 만든 테이블이다. 



이 데이터를 가져와서 출력할 JSON 타입의 문자열은 다음과 같다. 

데이터를 묶는 것을 보여주기 위해서 middle_exam과 final_exam을 하나로 합쳤다. 

[
   {"name":"mini","age":18,"exam":[90,95]},
   {"name":"alpha","age":19,"exam":[86,80]},
   {"name":"beta","age":17,"exam":[94,97]}
]


PHP의 JSON 생성 소스 

먼저 소스를 살펴보면 다음과 같다. 

어렵지 않으므로 쉽게 이해할 수 있을 것이다. 


DB 연동하는 것은 일반적이므로 설명을 생략하고, JSON을 만드는 부분인 22-37 라인을 보면 된다. 

PHP에서 JSON으로 변환하기 위해서는 먼저 배열(array)로 만들어야 한다. (22-34라인)


25라인을 보면, url_encode()로 결과값을 감싼 것을 볼 수 있다. 

이것은 JSON 변환을 수행하면 한글이 깨지는 이슈가 있기 때문이다. 

그래서 JSON 변환 전에 url_encode()로 감싸주고, JSON 변환 후 다시 url_decode()로 풀어주는 것이다. 


26라인을 보면, 결과값을 int로 형변환 한 것을 볼 수 있다. 

PHP의 배열로 저장할 때, 일반적으로 String으로 저장되기 때문에 명시적으로 int로 지정한 것이다. 


마지막으로 37라인에서 배열을 json_encode()로 JSON 변환하고, 앞서 url_encode()한 것을 url_decode()로 복원한다. 

이 결과를 print_r로 화면 출력하면 JSON 변환이 완료된다. 




Trackback 0 And Comment 0

PHP4에서 JSON 설치하기

|



PHP에서 JSON 타입의 메시지를 만들려면 json_encode(), json_decode() 함수를 사용하면 된다. 

그러나 이 메소드는 PHP 5.2부터 지원하기 때문에 PHP5.1 이하에서는 사용할 수 없는 문제가 있다. 


PHP4에서 이 함수를 호출하면 다음과 같은 오류 메시지가 나온다. 

call to undefined function: json_encode()

서버 호스팅과 같이 직접 서버를 보유하고 있다면 버전업으로 간단히 해결할 수 있겠지만 

과거부터 웹 호스팅을 쓰고 있었다면, 더욱이 아쉬운 부분일 수밖에 없다. 


PHP4에서 JSON 설치

어차피 PHP에서도 내장함수로 만들어서 배포한 것이기 때문에 json_encode(), json_decode() 함수를 직접 구현하면 될 것이다. 

하지만, 이미 나와 있는 것을 별도로 구현하는 것은 아닌 것 같아서 찾아보니 다음과 같은 파일이 있었다. ^^


JSON.tar.gz


위 파일을 다운로드해서 압축을 풀면, JSON.php 파일이 존재한다. 

이 파일만 있으면 PHP 4와 같은 하위 버전에서도 json 파일을 자유롭게 생성할 수 있다. 


예제로 포함된 Test-JSON.php 파일을 보면 좀 더 자세히 활용하는 방법을 알 수 있을 것이다. 

하지만, 여기에서는 간단히 json_encode()와 json_decode() 함수를 사용하는 것을 살펴보도록 한다. 


PHP4에서 JSON 생성하기 

먼저 소스 파일과 동일한 폴더에 위에서 다운로드한 JSON.php 파일을 올려놓는다. 


소스를 살펴보면 우선 json_encode()와 json_decode() 함수가 존재하는지를 function_exists()를 통해서 검사한다. 

만약 있다면 이 함수들을 사용할 수 있으므로 그냥 넘어가면 되고, 없을 경우 두 함수를 만들어 주면 된다. 


그리고 JSON.php 파일을 불러오고, Services_JSON 클래스를 생성한 다음 encode(), decode() 메소드를 호출하면 된다. 

이후부터는 json_encode()와 json_decode()가 PHP 5.2이후 버전처럼 있다고 생각하고 프로그래밍 하면 된다. 






Trackback 0 And Comment 0

MAC에서 PHP 설정하기

|



이전에 MAC에서 Apache 실행하기를 살펴봤다. 

이제 Apache에 PHP를 연동하는 것을 적용해보자. 

MAC에는 Apache와 PHP가 이미 설치되어 있기 때문에 

별도의 설치과정 없이 설정만 하면 된다. 


PHP 활성화

PHP를 활성화하기 위해서 apache 설정파일인 httpd.conf를 수정하면 된다. 

먼저 httpd.conf 파일이 있는 곳으로 이동하고, 관리자 권한으로 해당 파일을 수정하면 된다. 


Vi 편집기에서 "/php5" 검색으로 php5가 있는 곳으로 이동한다. 



LoadModule php5_module libexec/apache2/libphp5.so 부분이 '#'으로 주석 처리 되어 있는 것을 확인할 수 있다. 

간단하게 '#' 주석만 제거하고 저장한다. 



이제 Apache 서버를 재시작하면 PHP를 사용할 수 있게 된다. 


PHP 테스트

PHP를 테스트하기 위해 홈디렉토리의 Sites 폴더에 info.php 파일을 만들고 내용을 다음과 같이 입력한다. 

만약 Sites 폴더를 처음 볼 경우, MAC에서 Apache 실행하기를 다시 읽어보기 바란다. 


http://localhost/~홈디렉토리/info.php 로 실행하면 다음과 같이 PHP가 설치된 것을 확인할 수 있다. 



PHP와 MySQL 연동

PHP에서 MySQL을 연동하려고 하면, mysql.sock의 위치를 /var/mysql에서 찾게 된다. 

그러나 MySQL 패키지로 설치할 경우, /tmp/mysql.sock 파일이 위치한다. 


PHP의 설정을 바꾸는 방법도 있지만 간단한게 mysql.sock 파일의 링크를 /var/mysql 아래에 만들어도 된다. 


이제 Mac에서 Apache와 PHP 연동을 완료했다. 

그럼.. 즐거운 프로그래밍 하시기를~~




Trackback 0 And Comment 0

웹페이지 접속자에 따른 국문, 영문 페이지의 구분을 위한 국가를 확인 방법에 대한 정리

|



요즘 글로벌 홈페이지들을 살펴보면 Korean / English와 같이 언어별로 구분되어 선택할 수 있도록 되어 있습니다. 
오늘은 이와 같이 접속자에 따른 홈페이지의 언어별 분류를 어떻게 하는지 정리해 보도록 하겠습니다. 

가장 확실한 방법은 역시 쿠키를 활용하는 것입니다.
사용자가 선택한 언어를 쿠키에 저장해 두고 홈페이지가 열릴 때마다 보여주는 방법이죠..
한번 설정한 언어 정보를 기반으로 계속 보여주기 때문에 지속적으로 방문하는 사용자를 위해 일반적으로 많이 사용되는 방법입니다. 

그러나 사용자가 선택하기전에 어떤 언어를 먼저 보여줘야 할지를 결정하는 부분이 이슈가 됩니다. 
이때 사용하는 것이 접속자의 IP를 기반으로 국가를 파악하고 언어를 설정하는 방식을 사용합니다. 

그렇다면 IP를 기반으로 국가 정보를 가져오는 문제를 해결해야 하는데요.
이와 관련해서 MaxMind(http://www.maxmind.com/)에서 API 형태로 서비스를 제공하고 있습니다. 



관련 API 중 "GeoIP City"와 "GeoLite City"가 있는데요.
이 중 "GeoIP City" 서비스는 유료로 제공되고 있으며, 사용 형태에 따라서 $20, $50, $370로 구성되어 있네요. 


"GeoLite"는 "GeoIP"와 비교해서 정확도 측면에서 약간 떨어지고 업데이트 주기가 월 단위로 이루어진다고되어 있습니다만
제가 테스트 해보니 활용하는데 있어서 큰 문제는 없을 것 같았습니다.

 
그러면 GeoIP API(http://www.maxmind.com/app/support)를 통해서 IP를 가지고 국가를 가져오는 것을 테스트 해보도록 하겠습니다. 
여러 언어를 지원하고 있는데요. 저는 PHP를 가지고 해보도록 하겠습니다. 
PHP 관련 파일들을 받으려면 http://www.maxmind.com/app/php로 가서 Pure PHP Module의 download를 누르면 됩니다. 

상당히 많은 소스가 있는데요. 저는 먼저 sample.php를 받아봤습니다. 
sample.php의 내용은 다음과 같습니다. 



소스를 살펴보면 일단 6번째 줄에 "geoip.inc" 파일이 include 한 것을 알 수 있습니다. 위 링크에서 해당 파일을 다운로드 합니다. 

그리고 11번째 줄을 보면 GeoIP.dat 파일을 open하는 부분이 있습니다. 
이 파일이 매월 업데이트되는 IP와 국가를 매핑한 파일인 것 같습니다. 해당 파일은 다음 경로에서 받을 수 있습니다. 
http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
압축을 풀고 서버에 넣은 다음 해당 경로를 11번째 줄에 변경해서 보여주면 됩니다. 

위 예제에서는 국가 코드와 국가 명을 보여주고 있습니다. 
실질적으로 우리가 필요한 것은 국가 코드만 있으면 되므로 geoip_country_code_by_addr() 메소드만 사용하면 될 것 같습니다. 

그럼 위 예제를 수정해서 IP에 따라 언어별 페이지를 보여주는 PHP 소스를 작성해 보겠습니다. 

위 소스를 보시면 금방 이해가 될 겁니다. 
PHP의 "REMOTE_ADDR"변수를 활용해서 사용자 IP를 가져오고
GeoIP API를 통해 국가 코드를 확인한 다음 header()를 활용해서 리다이렉트하도록 구성했습니다.

최초 IP 접속시에는 이렇게 해서 언어를 확인하고 이후부터는 쿠키를 활용하면 되겠죠..
 




Trackback 0 And Comment 0

PHP의 allow_url_fopen=off일때 URL 주소로 파일 읽어오기

|



php.ini 파일에 allow_url_fopen=on으로 설정되어 있으면, URL 주소로 파일 읽어올 때 다음과 같이 처리하면 됩니다.


하지만 allow_url_fopen=off로 설정되어 있는 경우,
일단 php.ini 파일을 수정하면 됩니다.
벗뜨~~ 웹 호스팅을 하는 경우 php.ini 파일을 직접 수정할 수 없는 경우가 있죠~
 
이런 경우의 해결책을 찾아보니 다음과 같이 socket을 이용해 URL주소를 읽어오는 방법이 있었슴다..



추가적으로 GET 방식 호출은 다음과 같이 할 수도 있습니다.


기타 다른 방법으로는 .htaccess 파일을 이용하는 방법도 있더라구요..
.htaccess 파일에 다음과 같은 내용을 추가하면 된다고 합니다.
 
php_flag allow_url_fopen 1
 
하지만 위 방식보다는 fopen 대신 fsockopen을 이용하는게 나을 것 같습니다. 



Trackback 0 And Comment 0

MySQL 테이블을 모두 삭제하는 PHP 소스~

|



PHP와 MySQL을 사용하는 웹 호스팅에서 데이터베이스의 모든 테이블을 지우려고 할 경우, Drop Database 문을 활용하지 못하는 경우가 많습니다.

그렇다고 수많은 테이블을 하나씩 지우는 것도 방법이 아닐 듯 하네요..

그래서 다음과 같은 PHP 프로그램을 통해서 처리할 수 있을 것 같습니다.

먼저 "show table"을 사용해서 전체 테이블 정보를 가져오고 이어서 "drop table" 명령으로 하나씩 지우면 되겠죠.

다음 소스를 참고하세요~






Trackback 0 And Comment 0

정규식으로 전화번호 형식 변경하기 (-포함해서 출력하기)

|



전화번호를 다루는 프로그래밍을 하다보면 포맷이 다른 경우가 많습니다. 
그래서 중간에 )나 -가 들어가 있는 경우는 그대로 두고, 숫자만 있는 경우 포맷을 변경해서 -를 추가하는 javascript를 구성해 봤습니다. 

즉, 다음과 같은 형태로 처리 된다고 보시면 됩니다. 

021112222 -> 02-111-2222
03111112222 -> 031-1111-2222
0101112222 -> 010-111-2222 

이와 같은 작업을 하기 위해서 두가지 방법이 있습니다. 
전체 자리수를 확인하고 if ~ else를 통해서 경우의 수를 모두 처리하는 방법이겠죠. 

그런데 좀 세련되어 보이지 않습니다. 
그래서 정규식(Regular Expression)을 사용해 보기로 하겠습니다. 

구성한 예제는 다음과 같습니다. 



상당히 간단하게 되어 있는 것 같죠.. ^^
이해하지 못하고 사용하는 것은 본인 소스가 아니라고 봐야 합니다. 
그래서 간단히 위 소스를 설명하도록 하지요..

정규식에서 괄호()를 사용하면 순서대로 $1, $2, $3... 와 같이 불러서 사용할 수 있습니다. 
위 정규식을 살펴보면 괄호가 3개 있는 것을 알 수 있습니다. 

먼저 맨 뒤 괄호부터 보시죠..

([0-9]{4})

바로 0~9까지의 숫자를 4자리 가져온다는 겁니다.
실제 전화번호의 마지막 뒷자리는 4자리로 구성되어 있습니다.

이어서 중간 부분을 살펴보시죠..

([0-9]*)

0~9까지의 숫자 나머지 전부를 가져오라는 겁니다.
즉, 전화번호의 앞부분과 맨 뒷부분을 식별하고 나머지는 중간 자리로 판단한다는 것이죠..

그럼.. 가장 복잡한 앞부분을 살펴보도록 하겠습니다.

(^02.{0}|^01.{1}|[0-9]{3})

복잡해 보이지만 하나씩 풀어보면 쉽습니다. 
^02.{0} : ^는 정규식에서 시작을 의미하죠.. 02로 시작할 경우이구요.. "."은 문자 하나를 나타내는데.. {0}이니 이 문장은 "02"만 추출하겠다는 겁니다. 
^01.{1} : 마찬가지로 01로 시작하는 것이고 .{1} 이므로 이후 1자리까지 추출한다는 것이죠.. 01x로 시작하는 휴대폰을 의미합니다.
[0-9]{3} : 0~9까지 숫자 중 3자리만 추출한다는 것입니다.

이 세 가지 경우를 "|"로 연결하고 있으므로 셋 중의 하나를 선택한다고 보시면 됩니다. 

이렇게 하면 세 가지 숫자가 나오고 이것을 -로 연결하라는 것이 위 정규식의 의미가 되겠죠.. ^^

PHP와 같은 곳에서도 직접 정규식을 사용할 수 있으므로 다음과 같이 사용하면 바로 전화번호를 변경할 수 있겠네요.. 



preg_replace() 함수가  PHP에서 정규식을 통해 문자열을 치환하는 것이네요~

그럼. 즐프하세요 ^^ 
 



Trackback 0 And Comment 0

초보자를 위한 PHP, MySQL, Apache

|



초보자를 위한 PHP, MySQL, Apache - 4점
Julie C. Meloni 지음, 김석중 옮김/정보문화사

제 홈페이지 환경이 PHP로 되어 있어..
간간히 짧은 지식으로 이것저것 만들어 보다가~
PHP에 대해 체계적으로 함 보자.. 해서 살펴본 책입니다.

전체적으로 PHP에 대해 설명이 되어 있는데요..
깊이는 부족한 것 같습니다.

수박 겉핥기 식으로 전체적으로 쭉 훑어보기에는 괜찮지만...
PHP에 대한 세부적인 내용은 분야별로 별도의 내용을 찾아보심이 좋을 것 같네요..

어차피 현재 저에게 필요했던 것은 PHP의 전체적인 흐름이었으니~
어느정도는 만족하고 본 셈인데요.

그럼.. 각 파트별로 살펴볼 내용을 요약하도록 하겠습니다.

제 1부 기초다지기는 PHP, Apache, Mysql의 설치와 관련된 부분인데요..
아쉬운 부분은 PHP나 Apache의 설정 부분에 대한 설명이 좀 약하다는 겁니다.
솔직히 윈도우, 맥, 유닉스/리눅스로 나누어 설명하고 있는데..
실질적으로 설치에서 중요한 것은 setup이 아니라 config를 다루는 부분이 아닐까 하는 생각이 좀 들었슴다.

제 2부 PHP 구조 부분에서는 PHP의 언어적 특징을 잘 설명하고 있습니다.
기본적으로 언어마다의 변수, 제어문, 함수등을 잘 이해할 필요는 있는 것이죠..
PHP에서 강력하게 활용할 수 있는 배열에 대해서도 어느정도 설명이 되어 있더군요..
아쉬운 점은 클래스와 같이 현재 PHP 버전에서 강력하게 사용할 수 있는 OOP에 대한 설명이 좀 부족했다는 생각이 드네요..

제 3부 PHP 코드 정복 부분이 이 책의 핵심이 아닐까 합니다.
쿠키, 세션, 파일등에 대한 설명이 나오는데요..
필요할 때 참조할 만 할 것 같습니다.

제 4부 PHP와 Mysql 통합에서 PHP에서 Mysql을 사용하는 방법이 잘 나와 있습니다.
데이터베이스를 활용하지 않는 프로젝트는 거의 없으므로 주의깊게 보셔야 하구요..
다만, 앞부분의 데이터베이스 개론이나 SQL 기초 부분은 뭐~ 초보자에게는 필요하겠지만
여기에서 다루지 않아도 될 주제가 아니었나 하기도 하고.. 암튼..

제 5부 필수 프로젝트는 PHP 사용 예제를 보여주고 있는데요..
달력 부분하고 XML 다루기 부분을 유의깊게 봤구요..
나머지는 그럭저럭 입니다. 걍 PHP를 이렇게 쓰는구나 하고 보시면 될 듯..

제 6부 관리와 튜닝은 초보자에게는 좀 어려울 수도 있는데요..
그렇다고 아주 전문적인 자료도 아닌 것 같아요..
그냥 상식을 늘린다는 차원에서 훑어보심이 좋을 듯 하네요~

전체적으로 정리하다보니..
아쉬운점을 주로 나열한 것 같네요.. 하지만 언어에 대한 전반적인 책의 형태가 다 이런식입니다.

언어의 구조(변수, 제어문, 함수, 배열..) 설명하고 예제 좀 보여주고 나면 별로 다룰 게 없거든요..
그렇지만 어쨌든 책을 보는 건 중요합니다.
웹상의 자료들도 잘만 검색하면 당장 필요한 것을 얻을 수 있지만, 체계를 갖추기가 어렵다고 보거든요

그럼.. 좋은 하루 되세요~~



Trackback 0 And Comment 1
  1. 김진수 2007.10.11 05:41 address edit & del reply

    학교에서 PHP Web Programming배우고 있는데 김진석 교수님이라고 저자분이시거든요. 근데 공부하다보니까 PHP만의 특별함?? 이런게 느껴지지 않고 단순히 C코딩의 변형이라고만;; 아직 많이 배우지 않아서 그런지도 모르겠군요;; 어쨋든 PHP초보자가 보기에 좋은 책있으면 소개좀 부탁드려요. PHP에 관한 초-중 레벨의 책한권 소장 하고 싶거든요. 감사합니다. ^^

prev | 1 | next