PHP

라이브러리와 확장기능

UI와 API

UI는 User Interface의 약자다. 이것은 시스템과 사용자 사이의 접점을 의미하는데, 사용자의 의지를 시스템에게 전달하면서, 시스템의 상태를 사용자에게 알려주는 장치, 그래픽, 명령어들을 포괄적으로 UI라고 부른다. 다음 그림은 php의 현재 상태를 보여주는 페이지이다. 사용자가 브라우저의 주소창에 localhost/i.php라고 입력하면 서버는 이 페이지를 사용자에게 보여준다. 이 맥락에서 브라우저의 주소입력창과 php의 정보를 보여주고 있는 웹페이지가 UI라고 할 수 있다. 

API는 Application Programming Interface의 약자로 (운영체제나 언어 같은) 플랫폼과 그 플랫폼 위에서 동작하는 응용 프로그램이 상호작용하는 접점이라고 할 수 있다. 말이 어렵다. 아래 코드를 실행하면 현재 설치된 php에 대한 다양한 정보를 볼 수 있다.

1.php

<?php
phpinfo();
?>

여러분이 위와 같은 코드를 통해서 php에 대한 정보를 출력했다고 해보자. 그럼 이 정보 페이지를 만든 것은 여러분일까? 아닐까? 이 질문에 대해서 생각해보자.

위의 코드를 통해서 여러분이 시스템에게 지시한 것은 아래와 같다. 2행의 phpinfo();를 통해서 php의 현재 상태를 출력하라고 한 것이다.

반면에 시스템에 지시한 적이 없는데 내장 함수인 phpinfo가 자체적으로 가지고 있는 기능들은 아래와 같다.

  • php의 버전과 같은 정보들
  • php에 설치된 확장 기능들

위에서 열거한 것처럼 여러분은 단지 phpinfo();를 실행했을 뿐인데 아주 많은 정보가 출력되고 있다. 이 프로그램이 우연히 생길리는 만무하다. 이 페이지는 phpinfo라는 이름의 함수로 이미 만들어져서 준비되어 있는 것이다. 여러분이 이것을 사용할 때는 단지 phpinfo()를 호출하면 되는데 이 함수와 같은 것을 API라고 한다. 사용자가 UI를 이용해서 응용프로그램이 제공하는 기능을 사용하듯이 여러분은 API를 이용해서 플랫폼(여기서는 PHP엔진)이 제공하는 기능을 자신이 만들고 있는 응용 프로그램에서 사용할 수 있게 되는 것이다.  phpinfo와 같은 함수를 언어에 기본적으로 내장되어 있다고 내장함수라고도 부른다.

아래 예제는 현재 시간을 출력하는 예제다.

<?php
echo date('Y-n-j H:m:s');
?>

만약 아래와 같은 에러가 발생한다면

Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in D:\BitNami\wampstack-5.4.12-0\apache2\htdocs\library\1.php on line 2

php.ini 파일에서 아래의 코드를 data.timezone = UTC로 변경한 후에 웹서버를 재시작한다.

;date.timezone =

실행결과는 아래와 같은 형식으로 현재 시간을 출력할 것이다.

2013-11-7 10:11:33

내장 함수 date를 호출함으로서 현재 시간을 알아낼 수 있었다. 자신의 응용 프로그램에서 현재 시간을 알아야 한다면 date라는 API를 사용해야 한다는 것을 알아야 한다. 응용 프로그램의 개발자에게 응용 프로그램의 플랫폼이 제공하는 API를 폭넓고 깊게 이해하는 것은 매우 중요하다.

라이브러리

코드를 작성하다보면 자주 사용되는 로직이 있다. 그럼 이 로직을 재활용하고 싶은 마음이 생기기 마련인데, 재활용 가능하도록 만든 로직을 라이브러리(library)라고 한다. 라이브러리는 자기 자신이 사용하기 위해서도 만들 수 있고, 불특정 다수가 사용할 수 있도록 공개할 수도 있다. 라이브러리를 사용하면 필요한 로직을 직접 구현할 필요가 없이 라이브러리에서 제공하는 API를 호출하는 것을 통해서 원하는 기능을 사용할 수 있게 된다.

PHP의 표준 라이브러리 문서

PHP는 웹개발에 필요할만한 수 많은 내장함수를 제공한다. 이 내장함수들은 빠르게 웹에플리케이션을 구축하는데 도움을 주고, 직접 구현하는 것보다 실행속도가 빠르기 때문에 어떤 기능을 구현하기에 앞서서 API가 있는지 찾아보는 것이 바람직하다.

http://us1.php.net/manual/en/

댓글

댓글 본문
  1. duenfeel
    현재 시간이 맞지 않으시다면
    data(); 함수 사용전에 date_default_timezone_set('Asia/Seoul'); 이런식으로 해주시면
    현재시간이 잘 나오네요.
  2. 드림보이
    2022.01.18. 라이브러리와 확장기능 파트 시작
  3. ggyuker
    22.01.02 수강완료 이해 50%
  4. jeisyoon
    2021.07.25 Library 와 확장기능 - OK
  5. 미댈
    감사합니다^^

    php.ini에서
    date.timezone = Asia/Seoul 로 설정하고 웹서버 리스타트
    echo date("Y-n-j H:i:s");
    으로 입력했더니 시간 제대로 나오네요
    대화보기
    • 댓글들 참고해서 어찌저찌 고치긴했는데 시간은 재대로 뜨질않네요..
      php 홈페이지에서 api 설명을 보고 여러가지해봤는데 g,G,h,H 다안되는것같은데 왜그러죠??
    • choon
      감사합니다.
    • 호두
      앱을 활용하는 것 처럼 api를 활용할 수 있으면 좋겠네요
    • 김인줄
      쵝오!
    • ㄲㄲ
      음나음나
    • Duke
      jan 17 2018
    • 이상윤
      http://us1.php.net......en/ 가 더이상 열리지 않네요 ㅠㅠ
    • hotshot
      오늘도 잘 배우고 갑니다.
    • 다시시작
      완료
    • kimjs9105
      잘 봤습니다~
    • sheis
      잘 봤어요^^
    • 심화평
      2017-07-17 감사합니다
    • 김세창
      고맙습니다~^^
    • park
      웹에플리케이션 만들기 강좌에서 배웠던것들을 복습하는듯한 기분이 드네요
    • NamJin Kim
      감사합니다
    • Kyouwon Lee
      감사합니다^^
    • 김진원
      항상 감사합니다 :)
    • JustStudy
      고맙습니다
    • 굳은돌자리
      동영상 강의 해주시면 안될까요?
    • 차냥해갓고잉
      외쳐 갓고잉!!!!
    • 잘살자
      항상 감사합니다.
    • 진돌
      볼수록 신기한...
      게다가 댓글들의 정보도 멋지네요^^
      모두 감사드려요!!
    • 코딩!
      감사합니다
    • 캔디맨
      m 은 여러분이 흔히 생각하는 minute 가 아니라 month 입니다.

      특정 분이 아니라 이번달이 출력되는거죠,....

      php.net 에 가시면 api 에 대한 자세한 설명이 있습니다.
      대화보기
      • 상상초월
        echo date("Y-n-j H:m:s"); --> echo date("Y-n-j H:i:s");
        이렇게 수정하니깐 시간이 정확 하게 나오네요
        H:m:s 는 시간이 계속 특정 '분' 대에서 만 출력 하더라구요
      • domac
        date.timezone = Asia/Seoul
        이라고 하시면 정상적으로 나옵니다~
      • 포스만빵
        UTC를 넣고 재시작 하면 Warning 문구 아래 시간이 표시되는데 왜 그럴까요?
      • 디지
        중간에 코드 예제? 에서
        ;date.timezone = 이라고 되어있네요
        date.timezone=UTC; 로 고쳐야할듯 합니다.
      • 디지
        계속 내용 추가중이신가보네요 공동공부에서 선택하는데 중간에 봤어요에 구멍이 ㅎㅎ

        수고많으십니다. 잘보고갑니다
      버전 관리
      egoing
      현재 버전
      선택 버전
      graphittie 자세히 보기