JKUN

Welcome To The Jkun.net

Blog

[Codeigniter] 코드이그나이터 넷빈즈로 개발환경 구성

2017.06.21 14:49 Development/PHP


회사에서 일을 하며 울며 겨자먹기식으로 어쩔 수 없이,

NetBeans PHP 로 IDE 환경구성하며 프로젝트를 진행하고 있습니다.


이에 어떻게하다 보니 그럭저럭 쓸만하게 PHP & CodeIgniter 환경구성을 하게되어 포스팅하게 됩니다.

넷빈즈 다운로드는 다음과 같이 링크합니다.



먼저 필요한 파일은 첨부파일을 다운로드 받아 넷빈즈 플러그인 디렉토리 또는 개별적으로 설정하신

디렉토리에 압축해제 하세요.


netbeans-codeIgniter-modules.zip

ㄴ org-nbphpcouncil-modules-php-ci-0.6.0.nbm

ㄴ org-nbphpcouncil-modules-php-ci-repository-0.6.0.nbm


그리고 코드이그나이터 공식웹사이트에 접속하셔서 코드이그나이터를 다운로드 받으시기 바랍니다.

일단은 스피드한 포스팅 전개를 위해 첨부합니다. 버전은 3.0.6 입니다.


CodeIgniter-3.0.6.zip


링크 : 코드이그나이터 다운로드



이제 준비는 끝났습니다. 넷빈즈에 대한 순차적인 설정입니다.


1. 먼저 넷빈즈의 Tools > plugins 를 실행합니다.



2. 그리고 다운로드된 플러그인을 설치하는 탭으로 이동합니다.


저는 윈도우즈 USERS/계정/AppData/... 로 시작하는 경로에 압축을 풀었습니다.

이건 특별한 제한은 없지 싶습니다.


C:\Users\JKUN\AppData\Roaming\NetBeans\8.2\plugins


하여 위 두 파일들을 차례대로 선택하여 "열기" 클릭!

그럼 아마 인스톨하든지 할겁니다. 여기는 재량껏 Next! Next! Next!

그럼 이제 프레임워크 정보에 코드이그나이터 추가된 것을 확인하실 수 있습니다.

위 경로는 Tools > Options > PHP (Tab) > Framework & Tools (Tab) > CodeIgniter 입니다.


3. 이제 Base Files 에 다운로드 받은 코드이그나이터를 적용시켜주는 단계입니다.


아 참 저 Base Files 를 선택하면 나오는 목록에 Name 은 Edit 버튼을 이용하여 이름을 변경하였습니다.


4. 이제 프로젝트 속성창에서 프레임워크를 코드이그나이터의 Enabled 를 체크합니다



 그럼 프로젝트 옆에 CI 불꽃 아이콘이 나타납니다.


그리고 코드상에서 한번 테스트해서 보면은~~



이야~ ㅋㅋㅋ 되지요?

다들 즐코 PHP/CI 하시길 바랍니다.


저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

Include File List

2016.05.17 10:42 Development/PHP


	$includeFiles = get_included_files();
	echo '<h1>Include File List</h1>';
	$i = 1;
	foreach ($includeFiles as $if)
	{
		echo " <p> $i : $if </p> ";
		$i++;
	}


저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

프로젝트 환경 [ Taiga + HipChat + BitBucket + SourceTree + Vagrant (NgineX/PHP/MariaDB) + IDE(PHPStorm) ]

2016.02.29 17:51 Development/PHP


이번에 진행중인 프로젝트에 대한 전체적인 인프라 환경을 구축한 히스토리를 포스팅합니다.

한번씩 테스트 해본 경우, 개인적으로는 굉장히 유익한 경험 이었습니다.

초기 스타트업 같은 경우 전반적인 인프라를 구축하면서도, 소요 비용은 항상 고민적인 요소입니다만,

아래 사항에서 PHPStorm 만 제외하고는 비용절감에 큰 효과를 줄 수 있을것 같습니다.


전체적인 구성은 다음과 같습니다.

 프로젝트 관리 (이슈관리 및 태스크 관리)

 Taiga (https://taiga.io/)

 커뮤니케이션

 HipChat (http://hipchat.com/)

 소스코드 관리 도구 및 저장소

 BitBucket (https://bitbucket.org)

 SourceTree (https://www.sourcetreeapp.com/)

 개발환경(VM)

 VirtualBox + Vagrant 

 개발환경 구성

 OS : Ubuntu 14.04 LTS

 NgineX, MariaDB, PHP ( CodeIgniter )

 IDE

 PHPStorm Or EclipsePDT + xDebug

위 목록 링크 에서부터 순서대로 포스팅 되어있습니다.

Taiga

taiga 는 기본적으로 애자일을 근본으로 합니다. 기본적으로 칸반보드와 스크럼을 선택하게 되어있습니다.


하지만 관리기능에서 모듈을 선택하여 백로그, 이슈 등을 추가할 수 있습니다.

해서 프로젝트를 생성하고 나면, 다음과 같이 대시보드 화면으로 진입합니다.


여기서는 User History + Sprint 등 해서 사용이 가능하도록 되어있습니다. 현재는 스크럼 방식이나 ,


위와 같이 칸반보드및 다른 모듈을 추가 (Enable) 할 수 있습니다.

일단은 자세한 기능은 직접 겪어서 사용해보시는 게 좋을 듯 합니다. JIRA 나 Redmine 을 사용하셨던 분들은 더욱 수월히

사용하실 수 있을거라 생각됩니다.^^;;


해서 이렇게 생성된 프로젝트를 기본으로 확장하면서 부터 빛을 발하는것 같습니다.

이제 HipChat, BitBucket 설정을 시작합니다.

(전 개인적으로 인터페이스 슬랙보다는 힙챗이 더 이쁘다고.. ㅎㅎㅎ)



좌측 아이콘 맨 아래 (ADMIN) 을 선택하시면 위와 같은 화면이 활성화 됩니다.

그럼 INTEGRATIONS 에서는 깃허브, 비트버켓 등의 저장소등과 연동하실 수 있으며, PLUGINS 에서는 슬랙이나 힙챗등을

연동하실 수 있습니다.


순서는 무관하나 먼저 힙챗과 연동시키는 순서입니다.


PLUGINS - HIPCHAT

먼저 힙챗에 접속해 계정이 없으면 만드시고, 있으면 로그인 합니다..



그럼 다음과 같이 웹 또는 앱으로 진행하실 수 있도록 초기화면이 나타납니다.



이제 위에 Launch the web app 버튼을 클릭하시면 다음과 같이 메신저 인터페이스로 전환됩니다.



이제부터 스피드한 포스팅으로..^^;;


최초 ROOM 을 개설합니다. ( Create a Room )


채팅룸이 개설한 후에는 힙챗의 Integrations 기능을 이용해야 합니다.

적용 루트는 대시보드와 채팅 인터페이스에서 모두 가능합니다.




이제 Integrations 설정 화면으로 이동하면, 여러 통합기능들을 확인하실 수 있습니다.


하지만 목록중에서 Taiga 는 등록되어있지 않습니다.

해서 Build your own integration 카드를 클릭해 주세요.


그럼 위와 같이 새로 추가되는 화면으로 전환되며, 여기서 적당한 별칭을 지정해주시면 됩니다.

일단은 Taiga 로 등록.. 


이제 다음과 같이 Taiga 와 힙챗이 연동될 수 있도록 포스팅 URL 및 정보가 나타납니다.


이제 위에서 포스팅 URL ( Send messages to this room by posting to this URL ) 을 복사하여,

다시 Taiga 로 이동하여 HipChat webhook url 에 붙여넣고 Save 해 주세요.



그리고 Test 버튼을 클릭하시면! 

이렇게 Taiga 에서 힙챗 채팅룸으로 테스트 메세지를 보낸 것을 확인하실 수 있습니다.

( 어휴~ 포스팅 빡셉니다;;; )


참 HipChat 은 스마트폰 앱으로도 있습니다. 여러모로 참 유용하죠.


이제 이렇게 까지 Taiga 와 HipChat 연동은 되었구요. 이제 추가 테스트로 Task 를 등록하고, 힙챗까지 Task 등록 메세지까지

자동 발송되는것을 확인합니다.





요만하면 지금까지만으로나 꽤나 쓸만하지요? ㅎㅎ

위에 예제에서와 같이 저장소를 등록하고, 소스트리등을 이용하여 소스코드를 Push 하면 위처럼 힙챗 채팅룸으로 메세지가 보내집니다.

그럼 하나의 작업으로 여겨졌던 불필요한 커뮤니케이션 시간도 단축시킬 수 있으며,

작업 히스토리를 더운 간편하게 확인할 수 있겠지요.


이제 저장소 (BitBucket) 을 연결하는게 남았습니다.

하지만 비트버켓에서 계정등록/저장소 생성까지 캡쳐포스팅은 오바에 가까운 생각이 들어서요.

일단은 패스합니다. 이미 구글링이나 아니면, 그냥 계정 생성하보시면 한눈에 아실 수 있을거란 생각이 들기도 합니다.


해서 힙챗과 연동하는것만요.^^;; 



BitBucket 에서 HipChat 연결. Connection HipChat 버튼을 누르면 계정이 연동되도록 힙챗 로그인 페이지로 이동합니다.



HipChat 에서 BitBucket Repository 선택


이제 프로젝트 관리와 저장소와 커뮤니케이션까지의 구성은 완료되었습니다.

Taiga 와 Asana 연동으로 일정관리까지 한눈에 보고 싶었으나 실패했습니다. ㅎㅎㅎ

만일 캘린더및 전체적인 일정까지 한눈에 보실 수 있도록 추가 PlugIn 및 Integration 연동 경험 공유해주시면 진심으로

감사드리겠습니다. ^^


이제 Virtual Box 와 Vagrant 로 Ubuntu 기반 NgineX, MariaDB, PHP ( CodeIgniter ) 환경구성을 포스팅하면,

맨 처음 언급한 전체적인 프로젝트 관리및 개발 환경은 완성 되었지 싶습니다.

추후 포스팅까진 힘들더라도 훌륭하신 개발자님들의 포스팅 링크로 대체할 수 도 있음을 미리.. ㅎㅎㅎㅎㅎ


초기 스타트 업 팀 및 이미 유지되고 있는 조직에서 프로젝트 관리 프로세스 및 개발환경 구성은 매우 중요한 요소라는

생각이 듭니다. 하지만 더욱 이와 맞물리게 더욱 중요하건 기획 과 프로젝트 관리 가 얼마나 정확하게 동기화 되고 있느냐가

핵심적인 요소가 아니지 싶네요. 짧은 식견에 말많은 포스팅이라 민망하네요.

다음은 JIRA 를 열심히 훑어봐서 아틀라시안 풀셋 연동 포스팅 한번 해봐야겠습니다. ㅎㅎㅎ


아;; 힘든 포스팅이었습니다. 댓글 부탁합니다. ㅎㅎㅎㅎㅎㅎㅎㅎㅎ


저작자 표시
신고
현재 1 개의 댓글이 있습니다.

XO 2016.03.18 20:10 신고

좋은 포스팅 감사합니당~


Comment

Blog

PHP 파일 권한문제 (PHP fopen() Error: failed to open stream: Permission denied)

2014.12.20 09:28 Development/PHP


가끔 자주 까먹을때가 있다;;


1. 파일권한

sudo chmod 777 test.txt

2. PHP 설정파일 수정 ( php.ini ) - 왠만하면 여기까지 할 필요는 없겠지만, url 단으로 파일 열게 할때

적용할 수 있겠지만 왠만하면;; 보안적으로는 위험할듯;;

allow_url_fopen = off
should bee this
allow_url_fopen = On

And add this line below it:
allow_url_include = off
should bee this
allow_url_include = on

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

PHP - IDE CodeLobster (코드랍스터)

2014.10.21 23:28 Development/IDE


오웃. 꽤 괜찮은 PHP IDE 가 나왔다. CodeLobster (코드랍스터) ㅋㅋㅋ

현재까지는 윈도우까지만 지원한다.

무엇보다 훌륭한건 상용화되있는 PHP 프레임워크 및 jQuery 등을 꽤나 훌륭히 지원한다.

거기다 디버깅에 브레이크 포인트까지.

PHP 웹개발을 위해서만 특화된 IDE 라는 느낌이 팍팍온다. ㅎㅎ




그리고 system 쪽에 코어클래스중 커스텀으로 추가한 메소드라든지 코드어시스트 기능이 제법 깔끔히

지원된다.



이클립스에서 코드이그나이터 코드어시스트를 받으려면 프로젝트를 추가해주고 사용해야 하는

꽤나 그지같은 불편함이 있었는데;


그리고 컬러스키마같은 경우도 꽤나 다양하게 종류를 제공한다.


하지만 에디션별로 사용할 수 있는 차이가 있다. 어느 툴과 마찬가지로. ㅎㅎ

일단 프리버젼 등록키를 받고나면 30일동안 무료사용인데, 홈페이지에도 아래처럼 차이가 나와있다.



위 플러그인 프레임워크 기반 서비스중인 회사에서는 돈주고 사도 무방할정도 비싸지 않은 금액이다.

나라면 CodeIgniter + Phalcon + jQUery 만 ㄱㄱㄱ








저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

AJAX 요청시 XHR 요청 확인하는 PHP 환경변수

2014.09.16 01:45 Development/PHP


찍어보세요~

$_SERVER['HTTP_X_REQUESTED_WITH']


저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

PHP Closure 에서 $this 호출 에러

2014.02.16 22:00 Development/PHP


에러 메세지는 using $this when not in object context in ... 등등 하고 나온다. 

신기하게도 회사에서의 우분투환경에서는 에러가 발생하지 않는데 집에서 새로 구성한 우분투에서는 위하고 똑같은 에러가

발생한다. 코드는 단 한줄도 한자도 수정하지 않았는데.

해서 구글링을.. 오랜 시간 하다보니... 버젼 문제였다.


PHP 5.4.10 is not available in the Ubuntu repositories for 12.04.

You have two options:

(1) try and find a PPA with a backported version of PHP 5.4.10 (such as ondrej's oldstable PPA)

a) Run this command: sudo apt-get install python-software-properties
b) Run this command: sudo add-apt-repository ppa:ondrej/php5-oldstable
c) Run sudo apt-get update; sudo apt-get install php5
d) This should allow you to use PHP 5.4.10 (or whatever the most recent "Old Stable PHP" is).

(2) download PHP from source, and compile it.

Otherwise, you'll have to wait for Saucy to be released, so that you can get PHP 5.5.3. 5.4.10 does not exist in the repositories for any version of Ubuntu, apparently.

(I can try and backport 5.4.10 from Debian if you would like, but it would be in a PPA, so you'd have to trust that I'm not giving you malware, although I wouldn't do that ever.)


등등이라고 스택오버플로우에서 나옴.

그러고 보니 집에서 구성해놓은 우분투에는 PHP 5.3 인데 회사에서는 5.4 였다. 


위처럼 해서 터미널에서 실행하니 잘 됨. ㅠㅠ;; 이런 삽질 싫다..ㅡㅡ;

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

PHP 자료형 비교

2014.01.29 16:31 Development/PHP


PHP 자료형 비교표는 느슨한 비교와 엄격한 비교를 위한 비교연산자의 동작을 설명한다.


비교방법

  • 함수로 비교
  • == 로 느슨한 비교
  • === 로 엄격한 비교


//if 조건문으로 비교
if ($x) { /* result */ }
Expressiongettype()empty()is_null()isset()boolean : if($x)
$x = "";stringTRUEFALSETRUEFALSE
$x = null;NULLTRUETRUEFALSEFALSE
var $x;NULLTRUETRUEFALSEFALSE
$x is undefinedNULLTRUETRUEFALSEFALSE
$x = array();arrayTRUEFALSETRUEFALSE
$x = false;booleanTRUEFALSETRUEFALSE
$x = true;booleanFALSEFALSETRUETRUE
$x = 1;integerFALSEFALSETRUETRUE
$x = 42;integerFALSEFALSETRUETRUE
$x = 0;integerTRUEFALSETRUEFALSE
$x = -1;integerFALSEFALSETRUETRUE
$x = "1";stringFALSEFALSETRUETRUE
$x = "0";stringTRUEFALSETRUEFALSE
$x = "-1";stringFALSEFALSETRUETRUE
$x = "php";stringFALSEFALSETRUETRUE
$x = "true";stringFALSEFALSETRUETRUE
$x = "false";stringFALSEFALSETRUETRUE


== 로 느슨한 비교

TRUEFALSE10-1"1""0""-1"NULLarray()"php"""
TRUETRUEFALSETRUEFALSETRUETRUEFALSETRUEFALSEFALSETRUEFALSE
FALSEFALSETRUEFALSETRUEFALSEFALSETRUEFALSETRUETRUEFALSETRUE
1TRUEFALSETRUEFALSEFALSETRUEFALSEFALSEFALSEFALSEFALSEFALSE
0FALSETRUEFALSETRUEFALSEFALSETRUEFALSETRUEFALSETRUETRUE
-1TRUEFALSEFALSEFALSETRUEFALSEFALSETRUEFALSEFALSEFALSEFALSE
"1"TRUEFALSETRUEFALSEFALSETRUEFALSEFALSEFALSEFALSEFALSEFALSE
"0"FALSETRUEFALSETRUEFALSEFALSETRUEFALSEFALSEFALSEFALSEFALSE
"-1"TRUEFALSEFALSEFALSETRUEFALSEFALSETRUEFALSEFALSEFALSEFALSE
NULLFALSETRUEFALSETRUEFALSEFALSEFALSEFALSETRUETRUEFALSETRUE
array()FALSETRUEFALSEFALSEFALSEFALSEFALSEFALSETRUETRUEFALSEFALSE
"php"TRUEFALSEFALSETRUEFALSEFALSEFALSEFALSEFALSEFALSETRUEFALSE
""FALSETRUEFALSETRUEFALSEFALSEFALSEFALSETRUEFALSEFALSETRUE


=== 로 엄격한 비교

TRUEFALSE10-1"1""0""-1"NULLarray()"php"""
TRUETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
FALSEFALSETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
1FALSEFALSETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
0FALSEFALSEFALSETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
-1FALSEFALSEFALSEFALSETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
"1"FALSEFALSEFALSEFALSEFALSETRUEFALSEFALSEFALSEFALSEFALSEFALSE
"0"FALSEFALSEFALSEFALSEFALSEFALSETRUEFALSEFALSEFALSEFALSEFALSE
"-1"FALSEFALSEFALSEFALSEFALSEFALSEFALSETRUEFALSEFALSEFALSEFALSE
NULLFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSETRUEFALSEFALSEFALSE
array()FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSETRUEFALSEFALSE
"php"FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSETRUEFALSE
""FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSETRUE


본문링크 : http://docs.php.net/manual/kr/types.comparisons.php


저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

나만의 PHP MVC 프레임워크

2014.01.22 12:39 Development/PHP


팔콘프레임워크를 뒤져보다 보니.. PHP 확장기능과 MVC 프레임워크 만드는 것까지 보게 되었다.

왠지.. 나만의 프레임워크를 만들수 있지 싶다.


PHP 에 autoload 라고 흥미로운 녀석이 있었다. 요걸로 .htaccess 파일과 컨트롤러 부분을 만들어보면

될듯싶고. 아~ 조만간 시간내서 만들어봐야지. 삽질하겠지만야 머 재밌긋다. ㅋㅋㅋ


일단 자세한 MVC 만드는 데는 이 링크를 확인해보세요.


PHP로 자신만의 MVC Framework 만들기 1

PHP로 자신만의 MVC Framework 만들기 2


저작자 표시
신고

'Development > PHP' 카테고리의 다른 글

PHP Closure 에서 $this 호출 에러  (0) 2014.02.16
PHP 자료형 비교  (0) 2014.01.29
나만의 PHP MVC 프레임워크  (0) 2014.01.22
PHP include & include_once & require & require_once  (0) 2014.01.22
PHP 확장기능 만들기  (0) 2014.01.22
Phalcon Framework 환경 구성 과정  (10) 2014.01.09
현재 0 개의 댓글이 있습니다.
Comment

Blog

PHP include & include_once & require & require_once

2014.01.22 12:16 Development/PHP


[PHP] include 와 include_once and require 와 require_once 차이점


* include()
  - 일반적인 document Embeded 방식이다.
  - 이 문장을 만날 때 마다 매번 재평가되어 재실행된다
  - include 문장을 만날때마다 지정한 파일을 포함한다.
  - loop나 if 문 등에서 사용하여 필요한 경우에만 파일을 포함하도록 할 수 있다.
  - 해당 구문에 도달해야만 읽어 온다
  - Error발생시 Warning을 일으킨다는 특징이 있다.

* include_once()
  - 한번만 include한다는 뜻
  - include()와 대부분 동일한 수행을 한다
  - 하지만 문서에 이미 로드된 동일 문서가 있다면
  - include_once()는 더이상 include하지 않는다는 차이점이 있다.
  - 즉 A.php라는 파일에 function A() 라는 사용자 함수가 정의되어 있을때...
    A.php를 여기 저기서 include or require하게되면 중복된 함수 정의라는 에러가 발생합니다.. 
    이것을 막고자 할때 사용합니다.

* require()
 - require()는 실패시에 치명적인 E_ERROR 등급 오류가 발생한다는 점을 제외하면, include()와 동일합니다.
 - 즉, include()가 경고(E_WARNING)만 발생하고 스크립트는 계속 진행되는 것과 달리, 스크립트가 중단됩니      다. 작동에 관해서는 include() 문서를 참고하십시오. 

* require_once()
  - 한번만 require한다는뜻
  - 중복된 require를 방지하는 제어문 입니다.
  - 즉 A.php라는 파일에 function A() 라는 사용자 함수가 정의되어 있을때...
    A.php를 여기 저기서 include or require하게되면 중복된 함수 정의라는 에러가 발생합니다.. 
    이것을 막고자 할때 사용합니다..
    require_once() or include_once()를 사용하면 이미 로딩된 파일은 중복해서 읽어 들이지 않습니다.


저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

PHP include / include_once / require / require_once

2013.12.06 16:32 Development/PHP


출처 : http://blog.naver.com/PostView.nhn?blogId=kjs_1225&logNo=70039540730


php에서의 include 사용은 c언어와는 조금 다르다.. 종류도 4가지다 -_-

require()와 include()는 수행 실패를 다루는 방법을 제외하고 완전히 동일하다.

 

둘다 Warining을 발생시키는데 require()는 Fatal Error가 나타난다. 고로 파일이 없을 때 페이지 처리를 멈추고자

한다면 require를 사용하면 된다.

 

그리고 include()는 만날 때마다 파일을 포함하고, require() 무조건 포함한다.

예를 들어 보자!

 

-----------------

$value = 0;

 

if( $value == 0 )

          include("A.php");

}

else

{

          require("B.php");

}

----------------

 

위에 코드는 A.php와 B.php를 모두 포함시킨다. require()는 무조건 실행되기 때문이다.

근데 value값을 1로 바꾸면 B.php만 포함시킨다.

 

마지막으로 _once()가 붙으면 한번만 실행한다는 의미이다. 이미 로딩되어 있다면 다시 로딩하지 않는다는 의미이다.

함수나 변수를 중복으로 실행시키고 싶지 않을 때 사용하면 될 거 같다.

[출처] require(), require_once(), include(), include_once()의 차이점!|작성자 Jisooyo


저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

[스크랩] 페이스북, PHP 가상머신 개발 성공

2013.08.02 08:47 Jkun Story/뉴스 스크랩


본문링크 : http://www.itworld.co.kr/news/83057?utm_source=newsletter&utm_medium=email&utm_campaign=ITW_NL_20130729





페이스북이 웹 프로그래밍 언언인 PHP를 더 빨리 구동할 수 있도록 하기 위한 또 한 단계의 진전을 이루어냈다. PHP 가상머신을 개발한 것이 그것인데, 페이스북은 대규모 시스템 환경에서는 PHP를 그냥 구동하는 것보다 9배 이상 빠르다고 설명했다.


페이스북의 엔지니어링 책임자인 조엘 포바는 “우리의 목표는 PHP를 정말로, 정말로 빠르게 구동되게 만드는 것”이라고 강조했다. 페이스북은 HHVM(HipHop Virtual Machine)이란 이름의 이 가상머신을 올해부터 자사 서버 전반에 걸쳐 적용해 왔다.


HHVM이 페이스북이 PHP를 더 빨리 구동하기 위해 시도한 첫 번째 작업은 아니다. PHP와 같은 번역 언어는 일반적으로 소스 코드를 프로세서에서 직접 실행하기 때문에 실행 전에 기계어로 컴파일되는 C나 C++보다 느린 것으로 알려져 있다. 페이스북은 여전히 PHP를 고수하고 있는데, 자사의 웹 프로그래머 대다수가 가장 잘 알고 있다는 이유 때문이다.


하지만 페이스북에 대한 수요가 폭증하면서 페이스북은 힙합(HipHop)이란 컴파일러를 고안해 냈다. 이 컴파이얼러는 PHP 코드를 C++로 번역해주는 것으로, 이를 통해 페이스북은 상당한 수준의 성능 향상 효과를 얻을 수 있었다.


수년 동안 힙합을 통해 서비스 성능을 개선해 온 페이스북은 한편으로 동적으로 생성되는 웹 페이지를 자사 수십 억 명 사용자에게 더 빠르게 전달할 수 있는 다른 방법을 고민해 왔다. 포바는 “우리의 성능 전략은 바닥을 드러낼 참이었다”고 인정했다.


HHVM은 페이스북이 취한 다음 단계의 전략이다. 3년여에 걸친 개발을 통해 완성된 HHVM은 실질적으로 JVM(Java Virtual Machine)과 동일한 원리로 동작한다. HHVM에는 JIT(just-in-time) 컴파일러가 있어 필요할 때에 사람이 읽을 수 있는 코드를 기계가 읽을 수 있는 바이너리 코드로 변환해 준다. 기존에 사용하던 힙합(현재는 이름이 HPHPc로 바뀜)은 이제 페이스북에서는 퇴역한 상태이다.


이 JIT 접근법은 가상머신이 좀 더 똑똑한 결정을 내릴 수 있도록 해준다. 예를 들어, MySQL 데이터베이스 데이터 행을 읽어달라는 요청이 들어 왔을 때, HHVM은 즉석에서 어떤 데이터에 대한 요청인지를 파악할 수 있다. 그러면 즉석에서 이런 특정 종류의 데이터를 처리하는 데 가장 적합한 코드를 생성하거나 호출하는 것이다.


포바는 “이전 힙합으로 할 수 있는 최선의 작업은 페이스북 코드 기반을 전체를 분석해 이를 추론하고 추론을 기반으로 코드를 특정 범위로 한정하는 것이었다. 하지만 모든 추론을 다 맞을 수는 없다. 코드 중에는 쉽게 결론을 내리거나 추론할 수 없는 것들이 많다”고 설명했다.


포바는 HHNV이 기존 HPHPc보다 2배, 그리고 일반 PHP 코드보다는 9배 가까이 더 빠를 것으로 추정했다.


페이스북은 다른 PHP 기반 웹 사이트에서도 사용할 수 있도록 HHVM 코드를 GitHub에 올렸다.


하지만 HHVM은 대규모 PHP 코드를 처리하는 데 최적화되어 있다. 포바는 일반적인 규모의 웹 사이트에서 HHVM을 사용하면 속도 향상 효과는 5배 정도에 그칠 것이라고 덧붙였다.


또한 포바는 “만약 PHP를 힙합 상에서 구동한다면, 성능의 제약 요소는 CPU 실행 시간이 아니다. 문제는 시스템이 데이터베이스나 멤캐시와의 대화에 너무 많은 시간을 소비한다는 것”이라고 강조했다.  editor@itworld.co.kr

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

PHP - fopen() 파일 컨트롤 함수

2013.07.23 10:49 Development/PHP


fopen()


fopen (string $filename, string $mode, bool $use_include_path, resource $context);


파일이나 URL을 연다. 실패하면 false 를 반환.


  • string $filename
    파일을 로드할 파일명으로, 앞에 "scheme://.." 와 같은 프로토콜을 명시하는 경우 해당하는 프로토콜을
    이용하는 URL로 판별하여 해당 스키마의 프로토콜 핸들러를 찾아서 파일에 접근하게 된다.
    만약 프로토콜이 명시되지 않았다면 로컬 서버의 일반적 파일로 판단하여 스트림으로 연다.
    php.ini 설정파일에 safe_mode 나 open_basedir 를 설정하면 fopen 에 기본적으로 적용하게 된다.
    첫번째 매개변수를 URL로 판단하면 php.ini 설정파일에 allow_url_fopen 이 활성화 되었는지 보고,
    만일 false 로 설정되었다면 경고와 함께 fopen 실행이 중지된다.

    로토콜

     정의

     file://

     로컬 파일 시스템 접근 

     http://

     ftp url 

     php://

     다양한 I/O stream 

     zlib://

     압축된 stream 

     glob:// 패턴에 맞는 경로이름을 검색 
     phar://

     PHP archive

     ssh2:// Secure Shell 2
     rar:// rar
     ogg:// audio stream
     expect://

     Process Interaction Streams


    주의 : 윈도우에서는 백슬래쉬는 2개를 사용해야 합니다.

  • string $mode
    파일을 열때 모드를 선택.

    인자

    모드

     포인터 위치

     파일이 존재 유무

     r

     읽기 전용 

     파일의 시작  파일내용 보존 
     r+

     읽기 + 쓰기

     파일의 시작 파일내용 보존
     w 쓰기 전용 파일의 시작 파일내용 삭제, 없으면 새로 생성
     w+ 읽기 + 쓰기 파일의 시작

     파일내용 삭제, 없으면 새로 생성

     a

     쓰기 전용

     파일의 끝

     파일내용 보존, 없으면 새로 생성

     a+ 읽고 쓰기 파일의 끝

     파일내용 보존, 없으면 새로 생성

     x 쓰기 전용

     새로운 파일 생성

     파일이 존재하면 false 리턴, 그리고 에러 남
     x+ 읽고 쓰기 새로운 파일 생성 파일이 존재하면 false 리턴, 그리고 에러 남

     b : 바이너리모드로 호출

     t : 텍스트 파일의 라인 변경 태그를 Unix 에서는 \n를 사용하고, 맥에서는 \r만 사용하는데,

     윈도우에서는 \r\n를 사용하는데, 이러한 \n 을 \r\n으로 변환해준다.

     따라서 다른 시스템의 텍스트 파일을 윈도우 플랫폼에서 열 때 사용하면 좋다.


    매개변수 뒤에 마지막에 b 나 t 를 붙일 수 있다.


  • bool $use_include_path = false
    옵션으로 기본값이 false 로 설정. true(1) 로 설정하게 되면, php.ini 에 설정되어 있는 include_path 경로도
    같이 검색을 하게 된다.
  • resource $context
    PHP 5.0  이후에 추가되었으며, 파일 핸들러에서 다룰 컨텍스트를 지정해주는 매개변수이다.
  • 파일 읽고 쓰는 함수들
    파일을 읽고 쓰거나 특정 위치로 갈때에는 다음 함수들을 사용하면 된다.
    string fgets ( resource $handle [, int $length ] ); //한 줄을 읽은, default 최대 length는 1024
    string fread ( resource $handle , int $length ); // length 바이트를 읽음 (바이너리 모드일 때 사용)
    int fwrite ( resource $handle , string $string [, int $length ] ); // 바이너리로 파일에 씀
    int ftell ( resource $handle ); // 현재 핸들러의 위치를 리턴
    int fseek ( resource $handle , int $offset [, int $whence = SEEK_SET ] ); //핸들러의 해당 위치로 이동

  • 파일 닫기
    파일을 다 쓰고 읽고 나면 최종적으로는 반드시 파일을 닫아줘야한다.
    bool fclose ( resource $handle ); // 핸들러를 닫는다.


저작자 표시
신고
현재 1 개의 댓글이 있습니다.

asd 2013.10.03 17:44 신고

저 죄송한데 혹시 pcm파일 c언어를 이용해 크기(byte)를 줄이는 방법알고계세요??


Comment

Blog

Eclipse (이클립스) 와 CodeIgniter (코드이그나이터) 코드 어시스트

2013.07.16 09:37 Development/PHP


버전은 2.x 기준이다.

클래스 선언부 바로 밑에 아래 코드들을 추가해 주면 된다.


system/core/Controller.php 파일에 아래 코드를 추가


더보기


system/core/Model.php 파일에 아래 코드를 추가

더보기



저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

IIS7 에서 CodeIgniter index.php 제거 하기

2013.02.20 18:21 Development/PHP


테스트 환경

  • OS : Windows 2008 Server R2 / Windows 7 Enterprise K
  • 웹서버 : IIS 7.5 (7.0 도 가능할거라 여겨짐)
윈도우 환경에서 IIS 7.5 환경에 PHP. 코드이그나이터(CodeIgniter) 환경을 구성하다가 index.php 를 제거하기
위해 별지랄을 다해봤다. 그러다.. 

http://codeigniter-kr.org/lecture/view/213/page/1 를 참조하여 응용 간단하게(?) 해결할 수 있었다.


먼저 필요 요소들에 대해서 정리해보자.

  • IIS 7.5 웹서버
  • IIS 7.5 에 PHP 설정
  • 코드이그나이터
  • .htaccess 파일
  • IIS URL 재작성 (Rewrite)
일단 준비물은 여기까지다. 아래 그림을 보면 PHP Manager 와 URL 재작성이 설정되있는 것을 볼 수 있다.
이와 같이 됬으면 설정완료.



그리고 코드이그나이터가 설치된 경로의 application 폴더를 보면 


와 같이 .htaccess 파일이 있는 것을 볼 수 있다.

해당 파일을 메모장이나 편집기로 열면


Deny from all

AllowOverride All 


까지만 작성되있는 것을 볼 수 있다.


이에 아래 코드를 추가한다. 저장까지 하는걸로~

RewriteEngine On
RewriteCond $1 !^(index\.php|images|captcha|data|include|uploads|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

여기까지가 완료됬으면 IIS URL 재작성을 실행.


처음에는 아무것도 없다. 하지만 난 이미 추가해놨기에 나타나있다.

절차는 다음과 같다.


1. 규칙 가져오기


2. 규칙 가져오기

아래 화면에서 빨간 동그라미(?ㅋㅋㅋ) 로 체크된 부분을 선택해서 .htaccess 파일 경로를 찾아 불러온다.

그리고 가져오기 버튼을 누르면 아래처럼 재작성 규칙란에 설정된 규칙이 나타난다.

해서 여기까지 확인했으면 '적용'





3. index.php 제거

이제 여기까지 됬으면 코드이그나이터의 config.php 파일을 수정해야 한다.

간단하다. index.php 를 지워주면 된다.



$config['index_page'] = '';


해놓으면 끄읕. ㅋㅋㅋㅋㅋㅋㅋㅋ

개같이 캡쳐를 떠가면서 포스팅을 했으니 센스 댓글 해주시면 땡큐베리감사~





저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

Visual Studio 에서 PHP 템플릿 적용시키기

2012.04.23 13:38 Development/PHP


이클립스를 깔아서 하려다가.. 문득 그냥 회사에서 사용하는 VS2010으로 사용해볼까 하는 생각이 들었다.

그러다 문득.. 갑자기 코드이그나이터를 VS 에서 쓸수 있을까 싶어서 찾아보니까.. 있다.ㅎㅎㅎ






하하하. 밑에 코드이그나이터 프로젝트라고 버젓이 써있다. 


아. 혹시 플러그인 파일이 다운로드 안되거나 링크가 막히시면 방명록에 글 남겨주세요.

파일 보내드리겠습니다. 용량이 좀.. 됩니다. 42메가 정도요.





저작자 표시
신고

'Development > PHP' 카테고리의 다른 글

IIS7 에서 CodeIgniter index.php 제거 하기  (0) 2013.02.20
CodeIgniter(PHP) 에서 MS-SQL 설정  (0) 2012.11.12
Visual Studio 에서 PHP 템플릿 적용시키기  (0) 2012.04.23
APM7 의 기본설정  (0) 2011.12.30
PHP 엑셀다운로드  (0) 2011.11.28
PHP 날짜함수 2  (0) 2011.10.10
현재 0 개의 댓글이 있습니다.
Comment

Blog

윈도우 환경에서 MySQL 방화벽 포트 설정

2011.12.19 21:48 OS/Windows


Test OS (테스트 환경) : Windows Server 2008 R2 Standard Edition
Test DBMS (테스트 데이터베이스) : MySQL 5.1.57
최초 Window 서버에 구성할때는 WPI (Microsoft Web Platform Installer) 로 구성하였다.

아 뒤지는 줄 알았다. 장장 몇시간을 삽질한 것인가..
간만에 어마어마하게 짜증나게 삽질한 결과를 포스팅한다.

방화벽 인바운드 규칙 설정 완료.
로컬 컴퓨터에서 아웃바운드 점검 이상도 없고..
mysql 데이터베이스에 user, db, host 모두 설정완료. grant 까지
인바운드 규칙에 `원격` 이라고 써진 항목에는 모두 사용, 허용으로 했는데도... 아 뒤지는 줄.. 개짜증...

mysql 설정파일 (mysql.ini) 에서도 호스트설정및 네트워크 액세스 모두 설정완료.
아무리 봐도 설정에는 문제가 없는데...

어메이징 빤따스띡하게 짜증나는게.. 네트워크를 모르는 내 죄....
그러다 보니 인바운드 규칙 설정프로토콜 및 포트 다음과 같은 부분이 있었다.
최초 새 규칙을 생성하여 3306 에 허용을 주었다면 원격포트에는 만일 접속할 특정 IP 가 있다면 특정포트로
범위를 지정하고, 아니라면 모든 포트를 허용해준다.
개인적으로는 테스트 서버를 구성하는 차원이었기에 모든포트로 설정하였다.
뒤지게 구글링, 검색질 해봤는데도 못찾았거나.. 윈도우 환경에서 MySQL 데이터베이스 서버를 구성한
사람들도 나와 같은 재수없는 상황을 겪었었다.


뒤지게 삽질하고 캡쳐까지 떠서 포스팅해준 사람에게
댓글은 센스!

---------------------------------------------------------------------------------------------------


그리고 아래 글이 그래도 잘 정리되어 있었기에.. (왠지 어마어마하게 삽질한.. 아니면.. 고수이시거나..)
원문으로 바로가기
 

로컬에서는 잘 접속되는 MySQL 서버에, 원격지에서 접속이 안되는 경우가 있다.

이럴 때는 다음의 내용을 테스트 해보며 점검해보면 문제점을 확인할 수 있다.



원격 접속 시 겪을 수 있는 에러 메세지는 다음과 같다.


ERROR 2003 (HY000): Can't connect to MySQL server on '...'

ERROR 1045 (28000): Access denied for user 'user'@'host' (using password: ...)


ERROR 2003 은 접속에 실패한 경우로, 아래 점검 리스트 중 (1)부터 시작한다.

ERROR 1045 는 인증에 실패한 경우로, 아래 점검 리스트 중 (7)부터 시작한다.




* 설정 파일(my.cnf / my.ini)보다 실행시 주어지는 옵션의 우선순위가 높으니, 설정 파일과 함께 실행 옵션을 면밀히 살펴보는 것이 중요하다.


(1) skip-networking

mysql 서버 실행시에 --skip-networking 옵션을 주거나, 설정 파일내에 skip-networking이 있는 경우, 서버는 로컬에서의 유닉스 소켓 접속만을 허용하게 된다. 설정되어 있다면 해제한다.



(2) bind-address

설 정 파일 내에 bind-address 값 또는 실행 옵션 중 --bind-address 값이 127.0.0.1 또는 비활성화 되어 있는지 확인한다. 이는, listen과 관련된 TCP/IP 소켓의 바인딩을 어떤 IP로 할 것인지를 결정한다. 127.0.0.1 은 외부 접속을 허용하지 않음을 의미한다. 이를 시스템에 할당된 특정 IP 값으로 지정하거나, 0.0.0.0 으로 지정하여, 시스템이 가지고 있는 모든 IP 주소를 활용하도록 수정한다. 할당된 IP 주소가 2개 이상인 경우, 적절한 값을 지정하는 것이 일반적이다.



(3) port

TCP/IP 소켓 바인딩에 사용될 포트 번호를 확인한다. 기본 값은 3306 이지만, 보안상의 이유 또는 하나의 서버에 여러 개의 MySQL 서버를 구동하기 위해 변경한 경우가 있으니, 이 값을 확인한다. 실행 옵션은 --port=3306, 설정 파일에서는 port=3306 과 같이 지정한다.



(4) listen여부 확인

shell> netstat -na | grep 3306

위 명령어를 통해, 해당 포트로 LISTEN이 되고 있는지 확인한다. 확인할 수 없으면 1~3 까지를 다시 한 번 점검한다. 설정 값을 변경한 이후에는 서버를 반드시 재시작해야 한다. ( 포트 설정 값이 다른 경우에는 해당 포트 번호를 입력한다 )



(5) TCP/IP 소켓으로 접속 시도

mysql client를 로컬에서 실행하면 일반적으로 mysql.sock 파일을 통해 접속하는 것이 일반적이다.

위의 옵션들을 다 확인한 이후에는, 로컬에서 TCP/IP 소켓으로 접속을 시도해본다.

shell> mysql -h 127.0.0.1 -P 3306 -u root -p


localhost와 127.0.0.1은 같은 이름이지만, localhost로 지정하는 경우에는 유닉스 소켓으로 접속을 시도하게 된다.

로컬에서 TCP/IP 접속이 실패한 경우, 1~4 까지를 다시 한 번 점검한다.



(6) 방화벽

로컬에서는 TCP/IP 소켓으로 접속이 잘 되는데, 원격지에서 안되는 경우 일단 텔넷으로 접속을 시도해본다.

shell> telnet -h xxx.xxx.xxx.xxx -P 3306


1~5 까지는 정상적인데, 텔넷 접속이 불가능하다면 이는 방화벽에서 막고 있는 경우가 대부분이다. 방화벽은 접속을 시도하는 호스트의 로컬 방화벽, 접속 대상이 되는 서버의 방화벽, 그리고 해당 경로에 놓여있는 라우팅 내에서의 방화벽 등이 있을 수 있다.

- 로컬 방화벽 : 특정 outgoing 패킷이 제한당하고 있는지 여부를 확인한다.

- 서버 방화벽 : MySQL 서버가 사용하고 있는 포트에 대한 방화벽 옵션을 확인한다.



(7) user / host 조합 확인

접속할 때 사용하는 사용자 이름과 호스트 주소가 올바르게 등록되어 있는지 mysql 데이터베이스내에서 확인한다.

mysql> USE mysql;

mysql> SELECT user, host FROM user WHERE user='사용자이름';


host는 다음과 같이 지정한다.

- % : 모든 호스트로부터의 접속을 허용

- xxx.xxx.xxx.xxx : 특정 호스트로부터의 접속을 허용

- xxx.xxx.% 등 : 특정 대역으로부터의 접속을 허용

- 특정 이름 : 특정 호스트로부터의 접속을 허용 (skip-name-resolve를 사용하는 경우에는 사용 불가)


MySQL의 LIKE에 사용되는 구문과 같이, %를 통해 특정 대역 또는 전체 호스트를 지정할 수 있다.

예) 192.168.0.0/16 => 192.168.%



(8) 패스워드 확인

접속에 사용하고 있는 사용자/호스트/패스워드 조합이 올바른지 확인한다.

mysql> SELECT COUNT(*) FROM user WHERE user='사용자이름' AND host='호스트' AND password=PASSWORD('패스워드')


해당 사용자 이름에 대한 레코드가 여러 개 있다면, 그 중 가장 '특정한' 값을 지정한 레코드를 우선 사용하게 된다.

( 참조 : http://dev.mysql.com/doc/refman/5.0/en/connection-access.html ) 


예 를 들어, user1@% 과 user1@192.168.0.1 의 레코드가 존재할 때, 192.168.0.1 호스트에서 user1 사용자로 접속을 시도하면, user1@%의 값을 사용하지 않고 user1@192.168.0.1의 값을 통해 인증을 수행하게 되므로, 해당 사용자 이름으로 여러 레코드가 있는 경우에는 권한 및 패스워드 설정에 보다 많은 주의를 요한다.



(9) FLUSH PRIVILEGES

user 테이블 및 권한에 관련된 테이블의 값을 추가/변경한 경우에는 반드시 아래 구문을 통해 서버가 새로운 인증 데이터를 사용하도록 한다.

mysql> FLUSH PRIVILEGES;



(10) skip-name-resolve

skip-name-resolve 옵션이 지정되지 않으면, MySQL 서버는 원격 접속하는 호스트의 IP를 DNS를 통해 이름을 확인하는 과정을 거치게 된다. 서버가 설치되어 있는 시스템의 DNS가 올바르게 설정되어 있지 않은 경우에, domain name resolving에 의해 접속 지연이 유발될 수 있으므로, 내부 네트웍에 설치된 서버인 경우에는 이 값을 활성화 시키는 것이 일반적이다.


접속을 시도하는 호스트의 IP가 DNS를 통해 이름이 얻어진 경우에는 IP가 아닌 이름으로 user 테이블을 참조하게 되므로, 이를 통한 혼동을 피하기 위해 지정하기도 한다.



(11) 그 외 특별한 상황들

MySQL 은 4.1 부터 새로운 패스워드 해시 함수를 기본적으로 사용하고 있는데, 4.1 이전의 legacy 클라이언트/ODBC 커넥터들을 사용하는 경우에는 아래의 링크를 참조하여 서버의 secure-auth, old-passwords 등의 옵션을 적절히 조정하여 사용해야 한다.

http://dev.mysql.com/doc/refman/5.0/en/password-hashing.html


1~10 의 과정을 전부 거쳤음에도 불구하고, 1045에러가 발생하는 경우에는 다음의 명령어를 통해 해당 사용자의 암호를 예전 방식의 해시 값으로 지정 후, 접속 테스트를 수행해본다. 드문 일이지만, MySQL 5 버전대의 mysql client가 old-password hashing을 사용하는 경우가 있었다.

mysql> SET PASSWORD FOR 'user'@'host' = OLD_PASSWORD('패스워드');




(12) 최후의 보루

1~11 까지의 점검 리스트에도 해당되지 않는 경우에는 MySQL 커뮤니티를 통해 도움을 구하는 것이 마지막 방법이다. :)

데이터베이스 사랑넷 MySQL 섹션 : http://database.sarang.net/?criteria=mysql


원문출처 : http://blog.naver.com/ez_?Redirect=Log&logNo=140119374985

 

mysql,mysql원격접속,mysql gui,mysql외부접속,mysql3306,mysql telnet,window 환경에서 mysql,window2008,window2008 mysql,윈도우2008,윈도우2008 mysql

저작자 표시
신고
현재 4 개의 댓글이 있습니다.

2013.12.03 23:26

비밀댓글입니다


  • JKUN Dev. Jkun 2013.12.04 09:53 신고

    옙. 말씀해 주세요.^^;
    아는데까진 답변해 드리겠습니다.ㅎㅎ

ldw 2015.09.24 19:26 신고

아! 감사합니다. 2일동안 삽질하다가 겨우 해결했네요.


Comment

Blog

PHP 엑셀다운로드

2011.11.28 21:39 Development/PHP


<?
header( "Content-type: application/vnd.ms-excel; charset=euc-kr" );
header( "Expires: 0" );
header( "Cache-Control: must-revalidate, post-check=0,pre-check=0" );
header( "Pragma: public" );
header( "Content-Disposition: attachment; filename=파일명.xls" );
?>
저작자 표시
신고

'Development > PHP' 카테고리의 다른 글

Visual Studio 에서 PHP 템플릿 적용시키기  (0) 2012.04.23
APM7 의 기본설정  (0) 2011.12.30
PHP 엑셀다운로드  (0) 2011.11.28
PHP 날짜함수 2  (0) 2011.10.10
쿼리 페이징을 최대한 빠르게  (0) 2011.09.22
PHP 기본적인 페이징(Paging)  (0) 2011.09.22
현재 0 개의 댓글이 있습니다.
Comment

Blog

PHP 날짜함수 2

2011.10.10 05:54 Development/PHP



$isToday = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$isToday = date("m.d.y");                         // 03.10.01
$isToday = date("j, n, Y");                       // 10, 3, 2001
$isToday = date("Ymd");                           // 20010310
$isToday = date('h-i-s, j-m-y, it is w Day z ');  // 05-16-17, 10-03-01, 1631 1618 6 Fripm01
$isToday = date('\i\t \i\s \t\h\e jS \d\a\y.');   // It is the 10th day.
$isToday = date("D M j G:i:s T Y");               // Sat Mar 10 15:16:08 MST 2001
$isToday = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:17 m is month
$isToday = date("H:i:s");                         // 17:16:17

// 오늘부터 5일후
echo date("Y-m-d",strtotime("+5 day"));

// 오늘로부터 3일전
echo date("Y-m-d",strtotime("-3 day"));

// 오늘로부터 6주 전
$calyoil = 5 - date("w"); //현재 요일에서 금요일을 구하기 위한 가감 
$needday = strtotime("-6 week"); // 6주전 
$needday = date("Y-m-d" , strtotime("$calyoil days",$needday)); 

// 윤년
if(29==date('t',mktime(0,0,0,2,1,$year)) 
echo "윤년"; 
else echo "윤년아님";
 
//mktime(시,분,초,월,일,년도)--
 
//그 달의 마지막 날짜  가지고 오기
$lastday = date('t',mktime(0,0,1,$month,1,$year));
 
//금주의 시작일 구하기
$now=date("w");
$m=$now-1;
$start=date("Y-n-d",strtotime("-$m day"));

저작자 표시
신고

'Development > PHP' 카테고리의 다른 글

APM7 의 기본설정  (0) 2011.12.30
PHP 엑셀다운로드  (0) 2011.11.28
PHP 날짜함수 2  (0) 2011.10.10
쿼리 페이징을 최대한 빠르게  (0) 2011.09.22
PHP 기본적인 페이징(Paging)  (0) 2011.09.22
PHP 날짜 함수  (0) 2011.09.22
현재 0 개의 댓글이 있습니다.
Comment

Blog

날짜와 시간 함수

2011.09.26 17:13 DataBase/MySQL




출처 : http://www.nazuni.pe.kr/web/dev/mysql/functions_datetime.php#DATE_ADD


DATE 값을 기대하는 함수들은 일반적으로 DATETIME 값을 수용하고, TIME 부분은 무시한다. TIME 값을 기대하는 함수들은 일반적으로 DATETIME 값을 수용하고, DATE 부분은 무시한다.

현재 날짜나 시간을 반환(return)하는 함수들은 쿼리가 실행될 때 단 한번만 그 값을 구한다. 이것은 한 쿼리 안에 NOW()와 같은 함수가 여러번 사용되었을 경우에도 모두 같은 결과값을 참조한다는 것을 의미한다. 이 원칙은 CURDATE()CURTIME()UTC_DATE()UTC_TIME(),UTC_TIMESTAMP() 등의 함수에도 적용된다.

MySQL 4.1.3 버전부터 제공된 CURRENT_TIMESTAMP()CURRENT_TIME()CURRENT_DATE()FROM_UNIXTIME() 함수들은 연결 상태의 현재 시간대에 해당되는 반환값을 갖는다. 또한 UNIX_TIMESTAMP()도 그 인자(argument)가 현재 시간대에 해당되는 DATETIME 값이라는 것을 가정한다.

다음 함수 설명들의 반환값 범위는 완전한 날짜를 요구한다. 날짜가 '0'이거나 '2001-11-00'처럼 불완전하다면, DATE 부분을 추출하는 함수는 '0'을 반환할 것이다. 예를 들어, DAYOFMONTH('2001-11-00')은 '0'을 반환한다.

ADDDATE(date,INTERVAL expr type) , ADDDATE(expr,days)

ADDDATE()는 두번째 인자에서 INTERVAL과 함께 사용되면 DATE_ADD()의 별칭이 된다. 마찬가지로 SUBDATE()는 DATE_SUB()의 별칭이다. INTERVAL 인자에 관해서는 DATE_ADD() 설명을 참조하라.

mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
        -> '1998-02-02'
mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
        -> '1998-02-02'

MySQL 4.1.1 버전부터 두번째 문법이 허용되었다. expr 가 DATE 또는 DATETIME 형식일 때, days 는 expr 에 추가되는 일수이다.

mysql> SELECT ADDDATE('1998-01-02', 31);
        -> '1998-02-02'

ADDTIME(expr,expr2)

ADDTIME()는 expr 에 expr2 를 더하고 그 결과를 반환한다. expr 는 TIME 또는 DATETIME 형식이고, expr2 는 시간 표현이다.

mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999', '1 1:1:1.000002');
        -> '1998-01-02 01:01:01.000001'
mysql> SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');
        -> '03:00:01.999997'

ADDTIME()는 MySQL 4.1.1 버전에서 추가되었다.

CONVERT_TZ(dt,from_tz,to_tz)

CONVERT_TZ()는 DATETIME 값 dt 를 from_tz 시간대에서 to_tz 시간대로 변환하고, 결과값을 반환한다. 이 함수는 인자가 유효하지 않으면 NULL 값을 반환한다.

from_tz 에서 UTC으로 변환될 때 입력값이 TIMESTAMP 형의 범위를 벗어나면 변환은 일어나지 않는다.

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
        -> '2004-01-01 13:00:00'
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','-07:00');
        -> '2004-01-01 05:00:00'

'MET'이나 'Europe/Moscow'와 같은 시간대를 사용하기 위해서는, 시간대 표가 적절하게 설정되어야 한다.

CONVERT_TZ()는 MySQL 4.1.3 버전에서 추가되었다.

CURDATE()

함수가 문자열이나 숫자로 사용되었는지 문맥에 따라서 'YYYY-MM-DD'이나 YYYYMMDD 형식으로 현재 날짜를 반환한다.

mysql> SELECT CURDATE();
        -> '1997-12-15'
mysql> SELECT CURDATE() + 0;
        -> 19971215

CURRENT_DATE , CURRENT_DATE()

CURRENT_DATE와 CURRENT_DATE()는 CURDATE()의 별칭이다.

CURTIME()

함수가 문자열이나 숫자로 사용되었는지 문맥에 따라서 'HH:MM:SS'이나 HHMMSS 형식으로 현재 시간을 반환한다.

mysql> SELECT CURTIME();
        -> '23:50:26'
mysql> SELECT CURTIME() + 0;
        -> 235026

CURRENT_TIME , CURRENT_TIME()

CURRENT_TIME와 CURRENT_TIME()는 CURTIME()의 별칭이다.

CURRENT_TIMESTAMP , CURRENT_TIMESTAMP()

CURRENT_TIMESTAMP와 CURRENT_TIMESTAMP()는 NOW()의 별칭이다.

DATE(expr)

날짜(date)나 DATETIME 표현 expr 에서 DATE 부분을 추출한다.

mysql> SELECT DATE('2003-12-31 01:02:03');
        -> '2003-12-31'

DATE()는 MySQL 4.1.1 버전부터 사용이 가능하다.

DATEDIFF(expr,expr2)

DATEDIFF()는 시작 날짜 expr 와 마지막 날짜 expr2 사이의 일수를 반환한다. expr 와 expr2 는 날짜(date) 또는 date-and-time 표현이다. 반환값의 DATE 부분만 계산된다.

mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
        -> 1
mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31');
        -> -31

DATEDIFF()는 MySQL 4.1.1 버전에서 추가되었다.

DATE_ADD(date,INTERVAL expr type) , DATE_SUB(date,INTERVAL expr type)

이 함수들은 날짜 계산을 수행한다. date 는 시작 날짜를 지정하는 DATETIME 또는 DATE 값이다. expr 는 시작 날짜로부터 더하거나 뺀 간격 값을 지정하는 표현이다. expr 는 문자열이다. 마이너스('-')로 시작될 수도 있다. type 는 어떻게 해석할지를 지정하는 키워드이다.

INTERVAL 키워드와 type 지정자는 대소문자를 구분하지 않는다.

다음 표는 type 와 expr 인자가 어떤 관계인지 보여준다.

type 값기대되는 expr 형식
MICROSECOND MICROSECONDS
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
WEEK WEEKS
MONTH MONTHS
QUARTER QUARTERS
YEAR YEARS
SECOND_MICROSECOND 'SECONDS.MICROSECONDS'
MINUTE_MICROSECOND 'MINUTES.MICROSECONDS'
MINUTE_SECOND 'MINUTES:SECONDS'
HOUR_MICROSECOND 'HOURS.MICROSECONDS'
HOUR_SECOND 'HOURS:MINUTES:SECONDS'
HOUR_MINUTE 'HOURS:MINUTES'
DAY_MICROSECOND 'DAYS.MICROSECONDS'
DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS'
DAY_MINUTE 'DAYS HOURS:MINUTES'
DAY_HOUR 'DAYS HOURS'
YEAR_MONTH 'YEARS-MONTHS'

type 값 DAY_MICROSECOND, HOUR_MICROSECOND, MINUTE_MICROSECOND, SECOND_MICROSECOND, MICROSECOND 는 MySQL 4.1.1 버전부터 사용이 가능하다. 값 QUARTER과 WEEK는 MySQL 5.0.0 버전부터 사용이 가능하다.

MySQL은 expr 형식 안에서 어떤 구문 구획자도 허용한다. 표에서 볼 수 있는 것들은 제안된 구획자들이다. date 인자가 DATE 값이고 단지 YEAR, MONTH, DAY 만 계산하고자 한다면(TIME 부분이 필요 없다면), 결과는 DATE 값이다. 그렇지 않다면, 결과는 DATETIME 값이다.

MySQL 3.23 버전부터, INTERVAL expr type 는 다른 부분이 DATE 또는 DATETIME 값으로 표현되어 있다면 어느 한쪽이라도 + 연산자의 사용을 허용한다. - 연산자는 오른쪽에만 허용된다. 간격에서 DATE 또는 DATETIME 값을 빼는 것은 무의미하기 때문이다. (아래 예문을 참조하라.)

mysql> SELECT '1997-12-31 23:59:59' + INTERVAL 1 SECOND;
        -> '1998-01-01 00:00:00'
mysql> SELECT INTERVAL 1 DAY + '1997-12-31';
        -> '1998-01-01'
mysql> SELECT '1998-01-01' - INTERVAL 1 SECOND;
        -> '1997-12-31 23:59:59'
mysql> SELECT DATE_ADD('1997-12-31 23:59:59', INTERVAL 1 SECOND);
        -> '1998-01-01 00:00:00'
mysql> SELECT DATE_ADD('1997-12-31 23:59:59', INTERVAL 1 DAY);
        -> '1998-01-01 23:59:59'
mysql> SELECT DATE_ADD('1997-12-31 23:59:59', INTERVAL '1:1' MINUTE_SECOND);
        -> '1998-01-01 00:01:00'
mysql> SELECT DATE_SUB('1998-01-01 00:00:00', INTERVAL '1 1:1:1' DAY_SECOND);
        -> '1997-12-30 22:58:59'
mysql> SELECT DATE_ADD('1998-01-01 00:00:00', INTERVAL '-1 10' DAY_HOUR);
        -> '1997-12-30 14:00:00'
mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
        -> '1997-12-02'
mysql> SELECT DATE_ADD('1992-12-31 23:59:59.000002', INTERVAL '1.999999' SECOND_MICROSECOND);
        -> '1993-01-01 00:00:01.000001'

지정한 간격(interval) 값이 너무 짧다면(type 키워드로부터 기대되는 모든 간격 부분이 포함되어 있지 않다면), MySQL은 간격 값의 왼쪽 부분을 남겼다고 가정한다. 예를 들어, type DAY_SECOND를 지정했다면, expr 값은 일, 시, 분, 초 부분이 기대된다. '1:10'과 같은 값을 지정했다면, MySQL은 일, 시 부분이 없는 분, 초 값이라고 가정한다. 다르게 말하면, '1:10' DAY_SECOND는 '1:10' MINUTE_SECOND과 동일한 값으로 해석된다. 이것은 MySQL가 TIME 값을 시각보다 시간으로 해석하는 것과 비슷하다.

TIME 부분을 포함하는 어떤 값에서 date 를 더하거나 뺀다면, 결과는 자동으로 DATETIME 값으로 변환된다.

mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 DAY);
        -> '1999-01-02'
mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR);
        -> '1999-01-01 01:00:00'

기형적인 날짜를 입력하면 결과는 NULL이 된다. 만일 MONTH, YEAR_MONTH, 또는 YEAR를 더해서 새로운 달의 일수보다 더 큰 날짜가 된다면, 날짜는 새로운 달의 마지막 날로 보정된다.

mysql> SELECT DATE_ADD('1998-01-30', INTERVAL 1 MONTH);
        -> '1998-02-28'

DATE_FORMAT(date,format)

format 문자열에 따라 date 값을 형식화한다. format 문자열에는 다음 지정자들이 사용된다.

지정자설명
%a Abbreviated weekday name (Sun..Sat)
%b Abbreviated month name (Jan..Dec)
%c Month, numeric (0..12)
%D Day of the month with English suffix (0th, 1st, 2nd, 3rd, ...)
%d Day of the month, numeric (00..31)
%e Day of the month, numeric (0..31)
%f Microseconds (000000..999999)
%H Hour (00..23)
%h Hour (01..12)
%I Hour (01..12)
%i Minutes, numeric (00..59)
%j Day of year (001..366)
%k Hour (0..23)
%l Hour (1..12)
%M Month name (January..December)
%m Month, numeric (00..12)
%p AM or PM
%r Time, 12-hour (hh:mm:ss followed by AM or PM)
%S Seconds (00..59)
%s Seconds (00..59)
%T Time, 24-hour (hh:mm:ss)
%U Week (00..53), where Sunday is the first day of the week
%u Week (00..53), where Monday is the first day of the week
%V Week (01..53), where Sunday is the first day of the week; used with %X
%v Week (01..53), where Monday is the first day of the week; used with %x
%W Weekday name (Sunday..Saturday)
%w Day of the week (0=Sunday..6=Saturday)
%X Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
%x Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
%Y Year, numeric, four digits
%y Year, numeric, two digits
%% A literal '%'.

다른 모든 문자들은 변환없이 결과에 그대로 복사된다.

%v, %V, %x, %X format 지정자들은 MySQL 3.23.8 버전부터 사용이 가능하고, %f는 MySQL 4.1.1 버전부터 가능하다.

MySQL 3.23 버전부터는 '%' 문자가 format 지정문자 앞에 요구된다. 그 이전 버번에서 '%'는 선택사양이다.

월일의 범위가 '0'으로 시작되기 때문에 MySQL 3.23 버전부터는 '2004-00-00'와 같은 불완전한 날짜가 허용된다.

mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
        -> 'Saturday October 1997'
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
        -> '22:23:00'
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%D %y %a %d %m %b %j');
        -> '4th 97 Sat 04 10 Oct 277'
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w');
        -> '22 22 10 10:23:00 PM 22:23:00 00 6'
mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V');
        -> '1998 52'

DAY(date)

DAY()는 DAYOFMONTH()의 별칭이다. MySQL 4.1.1 버전부터 사용이 가능하다.

DAYNAME(date)

date 에 대한 요일 이름을 반환한다.

mysql> SELECT DAYNAME('1998-02-05');
        -> 'Thursday'

DAYOFMONTH(date)

date 에 대한 당월의 날짜를 반환한다. (범위 1~31)

mysql> SELECT DAYOFMONTH('1998-02-03');
        -> 3

DAYOFWEEK(date)

date 에 대하여 요일 색인(1 = 일요일, 2 = 월요일, ..., 7 = 토요일)을 반환한다. 이 색인값들은 ODBC 표준에 따른다.

mysql> SELECT DAYOFWEEK('1998-02-03');
        -> 3

DAYOFYEAR(date)

date 가 해당 연도에 몇일째인지 반환한다. (범위 1~366)

mysql> SELECT DAYOFYEAR('1998-02-03');
        -> 34

EXTRACT(type FROM date)

EXTRACT() 함수는 DATE_ADD()나 DATE_SUB()와 같은 종류의 간격 지정자를 사용하지만, 날짜를 계산하는 게 아니라 날짜로부터 부분을 추출한다.

mysql> SELECT EXTRACT(YEAR FROM '1999-07-02');
       -> 1999
mysql> SELECT EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03');
       -> 199907
mysql> SELECT EXTRACT(DAY_MINUTE FROM '1999-07-02 01:02:03');
       -> 20102
mysql> SELECT EXTRACT(MICROSECOND FROM '2003-01-02 10:30:00.00123');
        -> 123

EXTRACT()는 MySQL 3.23.0 버전에서 추가되었다.

FROM_DAYS(N)

일수 N 가 주어지면, DATE 값을 반환한다.

mysql> SELECT FROM_DAYS(729669);
        -> '1997-10-07'

FROM_DAYS()는 그레고리안 달력의 출현(1582년) 이전의 값을 사용할 수 있도록 계획되지 않았다. 달력이 바뀌었을 때 손실된 날짜는 고려하지 않는다.

FROM_UNIXTIME(unix_timestamp) , FROM_UNIXTIME(unix_timestamp,format)

함수에 사용된 문맥이 문자열인지 숫자인지에 따라 'YYYY-MM-DD HH:MM:SS' 또는 YYYYMMDDHHMMSS format 값으로 unix_timestamp인자가 표시되어 반환된다.

mysql> SELECT FROM_UNIXTIME(875996580);
        -> '1997-10-04 22:23:00'
mysql> SELECT FROM_UNIXTIME(875996580) + 0;
        -> 19971004222300

format 이 주어진다면 결과는 format 문자열에 따라 형식화된다. format 은 DATE_FORMAT() 함수에 쓰이는 지정자를 똑같이 사용한다.

mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x');
        -> '2003 6th August 06:22:58 2003'

GET_FORMAT(DATE|TIME|DATETIME, 'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL')

형식 문자열을 반환한다. 이 함수는 DATE_FORMAT()과 STR_TO_DATE() 함수와 조합할 때 유용하다.

첫번째 인자로는 3가지 가능한 값이 있고, 두번째 인자로는 5가지 가능한 값이 있어서 결과적으로 15가지 형식 문자열이 가능하다. (사용되는 지정자를 위해서 DATE_FORMAT() 설명을 참조하라.)

함수 호출결과
GET_FORMAT(DATE,'USA') '%m.%d.%Y'
GET_FORMAT(DATE,'JIS') '%Y-%m-%d'
GET_FORMAT(DATE,'ISO') '%Y-%m-%d'
GET_FORMAT(DATE,'EUR') '%d.%m.%Y'
GET_FORMAT(DATE,'INTERNAL') '%Y%m%d'
GET_FORMAT(DATETIME,'USA') '%Y-%m-%d-%H.%i.%s'
GET_FORMAT(DATETIME,'JIS') '%Y-%m-%d %H:%i:%s'
GET_FORMAT(DATETIME,'ISO') '%Y-%m-%d %H:%i:%s'
GET_FORMAT(DATETIME,'EUR') '%Y-%m-%d-%H.%i.%s'
GET_FORMAT(DATETIME,'INTERNAL') '%Y%m%d%H%i%s'
GET_FORMAT(TIME,'USA') '%h:%i:%s %p'
GET_FORMAT(TIME,'JIS') '%H:%i:%s'
GET_FORMAT(TIME,'ISO') '%H:%i:%s'
GET_FORMAT(TIME,'EUR') '%H.%i.%S'
GET_FORMAT(TIME,'INTERNAL') '%H%i%s'

ISO 형식은 ISO 8601이 아니라 ISO 9075이다.

MySQL 4.1.4 버전부터는 TIMESTAMP 또한 사용할 수 있게 되었다. GET_FORMAT() 함수는 같은 값을 DATETIME 형식으로 반환한다.

mysql> SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR'));
        -> '03.10.2003'
mysql> SELECT STR_TO_DATE('10.31.2003',GET_FORMAT(DATE,'USA'));
        -> 2003-10-31

GET_FORMAT()는 MySQL 4.1.1 버전부터 사용이 가능하다.

HOUR(time)

time 에서 시간을 반환한다. (범위 0~23)

mysql> SELECT HOUR('10:05:03');
        -> 10

그러나 TIME 값의 크기는 실제로 훨씬 더 크다. HOUR는 23보다 더 큰 값을 반환할 수 있다.

mysql> SELECT HOUR('272:59:59');
        -> 272

LAST_DAY(date)

DATE 또는 DATETIME 값을 입력하면 당월의 마지막 날에 대한 상응하는 값을 반환한다. 인자가 유효하지 않으면 NULL을 반환한다.

mysql> SELECT LAST_DAY('2003-02-05');
        -> '2003-02-28'
mysql> SELECT LAST_DAY('2004-02-05');
        -> '2004-02-29'
mysql> SELECT LAST_DAY('2004-01-01 01:01:01');
        -> '2004-01-31'
mysql> SELECT LAST_DAY('2003-03-32');
        -> NULL

LAST_DAY()는 MySQL 4.1.1 버전부터 사용이 가능하다.

LOCALTIME , LOCALTIME()

LOCALTIME과 LOCALTIME()은 NOW()의 별칭이다.

두 함수는 MySQL 4.0.6 버전에서 추가되었다.

LOCALTIMESTAMP , LOCALTIMESTAMP()

LOCALTIMESTAMP와 LOCALTIMESTAMP()는 NOW()의 별칭이다.

두 함수는 MySQL 4.0.6 버전에서 추가되었다.

MAKEDATE(year,dayofyear)

year 와 dayofyear 값이 주어지면 날짜를 반환한다. dayofyear 는 0보다 커야 한다. 그렇지 않으면 결과는 NULL이다.

mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);
        -> '2001-01-31', '2001-02-01'
mysql> SELECT MAKEDATE(2001,365), MAKEDATE(2004,365);
        -> '2001-12-31', '2004-12-30'
mysql> SELECT MAKEDATE(2001,0);
        -> NULL

MAKEDATE()는 MySQL 4.1.1 버전부터 사용이 가능하다.

MAKETIME(hour,minute,second)

hour,minute,second 인자로부터 계산된 시간 값을 반환한다.

mysql> SELECT MAKETIME(12,15,30);
        -> '12:15:30'

MAKETIME()는 MySQL 4.1.1 버전부터 사용이 가능하다.

MICROSECOND(expr)

TIME 또는 DATETIME 형식의 expr 로부터 마이크로초를 반환한다. (범위 0~999999)

mysql> SELECT MICROSECOND('12:00:00.123456');
        -> 123456
mysql> SELECT MICROSECOND('1997-12-31 23:59:59.000010');
        -> 10

MICROSECOND()는 MySQL 4.1.1 버전부터 사용이 가능하다.

MINUTE(time)

time 에 대하여 몇 분인지 반환한다. (범위 0~59)

mysql> SELECT MINUTE('98-02-03 10:05:03');
        -> 5

MONTH(date)

date 에 대하여 몇 월인지 반환한다. (범위 1~12)

mysql> SELECT MONTH('1998-02-03');
        -> 2

MONTHNAME(date)

date 에 대하여 당월의 영문 이름을 반환한다.

mysql> SELECT MONTHNAME('1998-02-05');
        -> 'February'

NOW()

함수에 사용된 문맥에 따라 'YYYY-MM-DD HH:MM:SS' 또는 YYYYMMDDHHMMSS 형식으로 현재 날짜와 시간을 반환한다.

mysql> SELECT NOW();
        -> '1997-12-15 23:50:26'
mysql> SELECT NOW() + 0;
        -> 19971215235026

PERIOD_ADD(P,N)

기간 P 에 N 월을 더한다(YYMM 또는 YYYYMM 형식으로). YYYYMM 형식으로 결과를 반환한다. 기간 P 가 DATE 값이 아니라는 것에 주의하라.

mysql> SELECT PERIOD_ADD(9801,2);
        -> 199803

PERIOD_DIFF(P1,P2)

기간 P1P2 사이의 개월수를 반환한다. P1 과 P2 는 YYMM 또는 YYYYMM 형식이어야 한다. 기간 P1P2 가 DATE 값이 아니라는 것에 주의하라.

mysql> SELECT PERIOD_DIFF(9802,199703);
        -> 11

QUARTER(date)

date 가 몇 분기인지 반환한다. (범위 1~4)

mysql> SELECT QUARTER('98-04-01');
        -> 2

SECOND(time)

time 에서 초 값을 반환한다. (범위 0~59)

mysql> SELECT SECOND('10:05:03');
        -> 3

SEC_TO_TIME(seconds)

함수가 어떤 문맥으로 사용되었는지에 따라 seconds 인자를 'HH:MM:SS' 또는 HHMMSS 형식으로 변환시켜서 반환한다.

mysql> SELECT SEC_TO_TIME(2378);
        -> '00:39:38'
mysql> SELECT SEC_TO_TIME(2378) + 0;
        -> 3938

STR_TO_DATE(str,format)

이 함수는 DATE_FORMAT() 함수의 역기능이다. 문자열 str 와 형식 문자열 format 을 입력받는다. STR_TO_DATE()는 형식 문자열이 날짜와 시간을 모두 포함하고 있다면 DATETIME 값을 반환한다. 그렇지 않고 날짜나 시간 둘 중 한 부분만을 포함한다면 DATE 또는 TIME 값을 반환한다.

str 에 포함된 DATE, TIME 또는 DATETIME 값은 format 에 의해 지정된 형식으로 주어져야 한다. format 에 사용할 수 있는 지정자에 대해서는 DATE_FORMAT() 설명을 참조하라. 다른 모든 문자는 해석되지 않고 그대로 반영된다. 만일 str 가 유효하지 않은 값을 포함한다면 NULL이 반환된다. MySQL 5.0.3 버전부터는 잘못된 값 또한 경고를 발생한다.

mysql> SELECT STR_TO_DATE('03.10.2003 09.20', '%d.%m.%Y %H.%i');
        -> '2003-10-03 09:20:00'
mysql> SELECT STR_TO_DATE('10arp', '%carp');
        -> '0000-10-00 00:00:00'
mysql> SELECT STR_TO_DATE('2003-15-10 00:00:00', '%Y-%m-%d %H:%i:%s');
        -> NULL

어떤 달의 일수보다 큰 일수를 가진 날짜는 1-31 범위 안에서 허용된다. 또한 '0'이나 '0'값을 가진 날짜도 허용된다.

mysql> SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y');
        -> '0000-00-00'
mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');
        -> '2004-04-31'

STR_TO_DATE()는 MySQL 4.1.1 버전부터 사용이 가능하다.

SUBDATE(date,INTERVAL expr type) , SUBDATE(expr,days)

두번째 인자 INTERVAL 형식을 포함하여 사용되었을 때 SUBDATE()는 DATE_SUB()의 별칭이다. INTERVAL 인자에 대한 정보는DATE_ADD() 설명을 참조하라.

mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
        -> '1997-12-02'
mysql> SELECT SUBDATE('1998-01-02', INTERVAL 31 DAY);
        -> '1997-12-02'

MySQL 4.1.1 버전부터 두번째 문법이 허용된다. expr 는 DATE 또는 DATETIME 형식이고 days 는 expr 에서 뺄 일수이다.

mysql> SELECT SUBDATE('1998-01-02 12:00:00', 31);
        -> '1997-12-02 12:00:00'

SUBTIME(expr,expr2)

SUBTIME()는 expr 에서 expr2 를 빼고 그 값을 반환한다. expr 는 TIME 또는 DATETIME 형식이고, expr2 는 TIME 형식이다.

mysql> SELECT SUBTIME('1997-12-31 23:59:59.999999',
    ->                '1 1:1:1.000002');
        -> '1997-12-30 22:58:58.999997'
mysql> SELECT SUBTIME('01:00:00.999999', '02:00:00.999998');
        -> '-00:59:59.999999'

SUBTIME()는 MySQL 4.1.1 버전에서 추가되었다.

SYSDATE()

SYSDATE()는 NOW()의 별칭이다.

TIME(expr)

TIME 또는 DATETIME 형식의 expr 에서 TIME 부분을 추출한다.

mysql> SELECT TIME('2003-12-31 01:02:03');
        -> '01:02:03'
mysql> SELECT TIME('2003-12-31 01:02:03.000123');
        -> '01:02:03.000123'

TIME()는 MySQL 4.1.1 버전부터 사용이 가능하다.

TIMEDIFF(expr,expr2)

TIMEDIFF()는 시작 시간 expr 와 마지막 시간 expr2 와의 차이를 TIME 값으로 반환한다. expr 와 expr2 는 TIME 또는 DATETIME 형식이고, 두 형식은 같아야 한다.

mysql> SELECT TIMEDIFF('2000:01:01 00:00:00',
    ->                 '2000:01:01 00:00:00.000001');
        -> '-00:00:00.000001'
mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001',
    ->                 '1997-12-30 01:01:01.000002');
        -> '46:58:57.999999'

TIMEDIFF()는 MySQL 4.1.1 버전에서 추가되었다.

TIMESTAMP(expr) , TIMESTAMP(expr,expr2)

인자 하나만을 사용한다면, DATE 또는 DATETIME expr 를 DATETIME 값으로 반환한다. 인자 두 개를 사용한다면, DATE 또는 DATETIME 형식의 expr 에 TIME 형식의 expr2 를 더하고 그 DATETIME 값을 반환한다.

mysql> SELECT TIMESTAMP('2003-12-31');
        -> '2003-12-31 00:00:00'
mysql> SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00');
        -> '2004-01-01 00:00:00'

TIMESTAMP()는 MySQL 4.1.1 버전부터 사용이 가능하다.

TIMESTAMPADD(interval,int_expr,DATETIME_expr)

DATE 또는 DATETIME 형식의 DATETIME_expr 에 정수 형식의 int_expr 를 더한다. int_expr 의 단위는 interval 인자로 주어지는데, 다음 값 가운데 하나이어야 한다. FRAC_SECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR.

interval 값은 상기된 키워드 가운데 하나를 지정하거나 SQL_TSI_ 접두사를 사용할 수 있다. 예를 들어, DAY 또는 SQL_TSI_DAY 둘 다 모두 허용된다.

mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');
        -> '2003-01-02 00:01:00'
mysql> SELECT TIMESTAMPADD(WEEK,1,'2003-01-02');
        -> '2003-01-09'

TIMESTAMPADD()는 MySQL 5.0.0 버전부터 사용이 가능하다.

TIMESTAMPDIFF(interval,DATETIME_expr1,DATETIME_expr2)

DATE 또는 DATETIME 형식의 DATETIME_expr1,DATETIME_expr2 사이의 격차를 정수값으로 반환한다. 결과값의 단위는 interval 인자에 의해 주어진다. interval 의 허용값은 TIMESTAMPADD() 함수와 같다.

mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
        -> 3
mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
        -> -1

TIMESTAMPDIFF()는 MySQL 5.0.0 버전부터 사용이 가능하다.

TIME_FORMAT(time,format)

이 함수는 DATE_FORMAT() 함수처럼 사용되지만, format 문자열은 시, 분, 초에 관련된 지정자만을 포함할 수 있다. 다른 지정자들은 NULL 값이나 '0'을 발생한다.

time 값이 TIME 부분에서 23보다 큰 값을 갖는다면, %H와 %k 시간 지정자는 일상적인 범위 0-23보다 더 큰 값을 발생한다. 다른 시간 지정자들은 12 법(modulo)의 값을 발생한다.

mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');
        -> '100 100 04 04 4'

TIME_TO_SEC(time)

time 인자를 초로 변환하여 반환한다.

mysql> SELECT TIME_TO_SEC('22:23:00');
        -> 80580
mysql> SELECT TIME_TO_SEC('00:39:38');
        -> 2378

TO_DAYS(date)

날짜 date 가 주어지면, 일수를 반환한다. (0년부터의 일수).

mysql> SELECT TO_DAYS(950501);
        -> 728779
mysql> SELECT TO_DAYS('1997-10-07');
        -> 729669

TO_DAYS()는 그레고리안 달력의 출현(1582년) 이전의 값을 사용할 수 있도록 계획되지 않았다. 달력이 바뀌었을 때 손실된 날짜는 고려하지 않는다.

MySQL는 날짜에 있는 2자리 형식의 연도를 4자리 형식으로 변환한다는 것을 기억하라. 예를 들어, '1997-10-07'과 '97-10-07'는 동일한 날짜로 간주한다.

mysql> SELECT TO_DAYS('1997-10-07'), TO_DAYS('97-10-07');
        -> 729669, 729669

1582년 이전의 다른 날짜에 대해서는 이 함수는 결과값이 정의되지 않았다.

UNIX_TIMESTAMP() , UNIX_TIMESTAMP(date)

인자 없이 호출이 된다면, 부호없는 정수의 유닉스 시간('1970-01-01 00:00:00' GMT부터 계산된 초)을 반환한다. UNIX_TIMESTAMP()가 date인자와 함께 호출된다면, '1970-01-01 00:00:00' GMT부터 계산된 초 값을 반한다. date 는 DATE 문자열, DATETIME 문자열, TIMESTAMP 문자열, YYMMDD 또는 YYYYMMDD 형식의 숫자를 허용한다.

mysql> SELECT UNIX_TIMESTAMP();
        -> 882226357
mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
        -> 875996580

UNIX_TIMESTAMP가 TIMESTAMP 형식으로 사용되었을 때 이 함수는 내부의 TIMESTAMP 값을 직접 반환한다. 무조건 문자열을 유닉스 시간으로 변환하지 않는다. UNIX_TIMESTAMP()에 범위에서 벗어난 날짜를 입력했다면 0이 반환되지만, 기본적인 범위만 확인된다는 것에 주의하라. (연도는1970-2037, 월 01-12, 일 01-31)

UTC_DATE , UTC_DATE()

함수가 사용된 문맥에 따라 'YYYY-MM-DD' 또는 YYYYMMDD 형식으로 현재의 UTC 날짜 값을 반환한다.

mysql> SELECT UTC_DATE(), UTC_DATE() + 0;
        -> '2003-08-14', 20030814

UTC_DATE()는 MySQL 4.1.1 버전부터 사용이 가능하다.

UTC_TIME , UTC_TIME()

함수가 사용된 문맥에 따라 'HH:MM:SS' 또는 HHMMSS 형식으로 현재의 UTC 시간 값을 반환한다.

mysql> SELECT UTC_TIME(), UTC_TIME() + 0;
        -> '18:07:53', 180753

UTC_TIME()는 MySQL 4.1.1 버전부터 사용이 가능하다.

UTC_TIMESTAMP , UTC_TIMESTAMP()

함수가 사용된 문맥에 따라 'YYYY-MM-DD HH:MM:SS' 또는 YYYYMMDDHHMMSS 형식으로 현재의 UTC 일시 값을 반환한다.

mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;
        -> '2003-08-14 18:08:04', 20030814180804

UTC_TIMESTAMP()는 MySQL 4.1.1 버전부터 사용이 가능하다.

WEEK(date[,mode])

date 에 대하여 몇번째 주인지 반환한다. 2개 인자를 사용하는 형식에서는, 한 주의 시작을 일요일로 할 것인지 월요일로 할 것인지, 결과값의 범위를 0-53으로 할 것인지 1-53으로 할 것인지를 지정할 수 있다. mode 인자가 생략되면 시스템 기본값이 사용된다. (MySQL 4.0.14 버전 이전에는 0)

mode 인자는 아래 표와 같이 작동한다.

모드한 주의 시작요일범위Week 1 is the first week...
0 Sunday 0-53 with a Sunday in this year
1 Monday 0-53 with more than 3 days this year
2 Sunday 1-53 with a Sunday in this year
3 Monday 1-53 with more than 3 days this year
4 Sunday 0-53 with more than 3 days this year
5 Monday 0-53 with a Monday in this year
6 Sunday 1-53 with more than 3 days this year
7 Monday 1-53 with a Monday in this year

mode 3은 MySQL 4.0.5 버전부터 사용할 수 있으며, 4 이상의 mode 는 MySQL 4.0.17 버전부터 사용할 수 있다.

mysql> SELECT WEEK('1998-02-20');
        -> 7
mysql> SELECT WEEK('1998-02-20',0);
        -> 7
mysql> SELECT WEEK('1998-02-20',1);
        -> 8
mysql> SELECT WEEK('1998-12-31',1);
        -> 53

주의 : MySQL 4.0 버전에서 WEEK(date,0)는 미국 달력에 알맞게 변했다. 그 전에 WEEK()는 미국 날짜에서 잘못 계산되었다. (사실상 WEEK(date)와 WEEK(date,0)는 모든 경우에 오류가 있었다.)

이전 연도의 마지막주에서 날짜가 맞아떨어지면, mode 인자를 2, 3, 6, 7 으로 선택하지 않는 한 MySQL은 0을 반환한다.

mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);
        -> 2000, 0

어떤 이는 실제로 주어진 날짜가 1999년의 52째주이기 때문에 WEEK() 함수가 52를 반환해야 한다고 주장한다. 우리는 주어진 연도에서 몇 째주인지 반환할 것을 원했기 때문에 그 대신 0을 반환하기로 했다. 이것은 WEEK() 함수를 날짜에서 DATE 부분을 추출하는 다른 함수들과 결합하여 사용할 때 유용하다.

주어진 날짜의 주간 첫날을 포함한 해를 고려한 결과값을 원한다면, mode 인자를 0, 2, 5, 7 로 선택해야 한다.

mysql> SELECT WEEK('2000-01-01',2);
        -> 52

YEARWEEK() 함수를 사용하는 것도 대안이 될 수 있다.

mysql> SELECT YEARWEEK('2000-01-01');
        -> 199952
mysql> SELECT MID(YEARWEEK('2000-01-01'),5,2);
        -> '52'

WEEKDAY(date)

date 에 대한 요일 색인값(0 = 월요일, 1 = 화요일, ... 6 = 일요일)을 반환한다.

mysql> SELECT WEEKDAY('1998-02-03 22:23:00');
        -> 1
mysql> SELECT WEEKDAY('1997-11-05');
        -> 2

WEEKOFYEAR(date)

date 의 달력에서 몇 주째인지 1-53 범위의 값을 반환한다. 이 함수는 WEEK(date,3)과 동일하다.

mysql> SELECT WEEKOFYEAR('1998-02-20');
        -> 8

WEEKOFYEAR()는 MySQL 4.1.1 버전부터 사용이 가능하다.

YEAR(date)

date 에서 해당 연도를 반환한다. (범위 1000-9999)

mysql> SELECT YEAR('98-02-03');
        -> 1998

YEARWEEK(date) , YEARWEEK(date,start)

date 에 대하여 연도와 몇 주째인지 반환한다. 첫번째 인자는 WEEK()의 첫번째 인자와 정확하게 작동한다. 결과 안의 연도는 첫 주와 마지막 주에 한하여 date 인자의 연도와 다를 수 있다.

mysql> SELECT YEARWEEK('1987-01-01');
        -> 198653

주수는 선택 인자 0 또는 1 에 대하여 WEEK() 함수가 반환하는 것과 다르다. WEEK()는 주어진 연도의 문맥에서 주 값을 반환한다.

YEARWEEK()는 MySQL 3.23.8 버전에서 추가되었다.

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment

Blog

PHP / MySQL fetch_array

2011.09.19 17:01 Development/PHP


출처 : http://sysyusung.blog.me/20052469830 

MySQL 테이블에 저장되어있는 값을 쿼리를 통해 선택 한 후에는, 그 값을 바로 사용할 수 없다.

그것을 PHP가 인식할 수 있는 형태로 변환해 주어야 하는데, 그것을 아래의 함수를 통해 할 수 있다.

 

 

테이블

필드명 name value
저장값 CUFFS アメサラサ

 

1. fetch_array

이 함수는 결과를 배열로 뽑아내는데, 번호로 된 배열과 필드 이름으로 된 배열 두가지가 동시에 생성된다.

위와 같은 테이블에서 데이터를 뽑아내면 fetch_array 를 통해 뽑아낸 배열의 구조는 다음과 같다.

Array (

    [0] => CUFFS

    [name] => CUFFS

    [1] => アメサラサ

    [value] => アメサラサ

)

사용법

$data = mysql_fetch_array($data_); or $data = mysqli_fetch_array($data_); or $data = $data_->fetch_array();

echo $data['name'].' => '.$data[1];

 

fetch_array의 경우 설정에 따라 번호로 된 배열로만 뽑아낼 수도 있고, 필드 이름으로만 된 배열을 뽑아낼 수도 있다.

다음과 같은 상수를 사용해서 처리할 수 있다.

MYSQL_BOTH - 기본값

        사용법 -> $data = mysql_fetch_array($data_, MYSQL_BOTH); or $data = mysqli_fetch_array($data_, MYSQL_BOTH); or $data = $data_->fetch_array(MYSQL_BOTH);

        결과 -> 위의 fetch_array 의 결과와 동일

MYSQL_ASSOC

        사용법 -> $data = mysql_fetch_array($data_, MYSQL_ASSOC); or $data = mysqli_fetch_array($data_, MYSQL_ASSOC); or $data = $data_->fetch_array(MYSQL_ASSOC);

        결과 -> 아래의 fetch_assoc 의 결과와 동일

MYSQL_NUM

        사용법 -> $data = mysql_fetch_array($data_, MYSQL_NUM); or $data = mysqli_fetch_array($data_, MYSQL_NUM); or $data = $data_->fetch_array(MYSQL_NUM);

        결과 -> 아래의 fetch_row 의 결과와 동일

 

 

 

2. fetch_assoc

이 함수는 필드 이름으로 된 배열로만 저장한다.

Array (

     [name] => CUFFS

     [value] => アメサラサ

)

사용법

$data = mysql_fetch_assoc($data_); or $data = mysqli_fetch_assoc($data_); or $data = $data_->fetch_assoc();

echo $data['name'].' => '.$data['value'];

 

 

3. fetch_row

이 함수는 숫자로 된 배열로 저장한다.

이 경우 필드의 순서를 바꾸거나 하면 전혀 다른 결과가 나올 수 있기 때문에 그것까지 고려를 해 프로그래밍 해야 한다.

Array (

    [0] => CUFFS

    [1] => アメサラサ

)

사용법

$data = mysql_fetch_row($data_); or $data = mysqli_fetch_row($data_); or $data = $data_->fetch_row();

echo $data[0].' => '.$data[1];

 

 

4. fetch_object

이 함수는 배열이 아닌 객체로 결과값을 받아온다.

stdClass Object (

    [name] => CUFFS

    [value] => アメサラサ

)

사용법

$data = mysql_fetch_object($data_); or $data = mysqli_fetch_object($data_); or $data = $data_->fetch_object();

echo $data->name.' => '.$data->value;

 

 

 

위의 4가지 함수에 대해 알아보았다.

그렇다면 위의 4가지 각각의 함수 속도는 어떻게 될 것인가?

그것에 대해 PHP 매뉴얼은 다음과 같은 답변을 내놓고 있다.

 

1. fetch_array

mysql_fetch_array()는 필드 이름으로 된 색인이 추가되지만, mysql_fetch_row() 보다 느려지지는 않는다.

2. fetch_assoc

mysql_fetch_assoc()는 필드이름으로 된 색인이 추가되지만, mysql_fetch_row() 보다 느려지지는 않는다.

3. fetch_row

언급 없음

4. fetch_object

속도면에서, 이 함수는 mysql_fetch_array()와 비슷하고, mysql_fetch_row()만큼이나 빠르다. 그러나 큰 차이는 없다.

 

그렇다면, 과연 진짜로 그런것일까.

테스트를 위해 다음과 같은 가상 환경을 제작하였다.

 

    1) 21 Fields

    2) 100,000 Records

 

$data_ = $mysqli->query("SELECT * FROM `test_table`");

while($data = $data_->fetch_array()) {}

 

다음과 같은 PHP 코드로 실행되는 함수들은, 각각 10만번의 동작을 거칠 것이다.

 

그리고 그에 대한 결과는 다음과 같이 나타났다.

 

환경: MyISAM & 21 Fields & 100,000 Records

단위: sec

fetch_array

fetch_assoc

fetch_object

fetch_row

1번째 시도

2.2280280590057

1.388512134552

3.3347442150116

1.2834389209747

2번째 시도

1.6447999477386

1.3500959873199

2.7877049446106

1.0823369026184

3번째 시도

1.7114689350128

1.303701877594

2.8545777797699

1.0900609493256

4번째 시도

1.8702390193939

1.5157608985901

3.1205198764801

1.1778881549835

5번째 시도

1.6467909812927

1.3309321403503

2.7673869132996

1.1073391437531

평균

1.82026538848874

1.37780060768126

2.97298674583436

1.14821281433106

 

fetch_object > fetch_array > fetch_assoc > fetch_row 의 순서를 보여주고 있다.

 

결과를 자세히 보면, 10만개의 데이터를 뽑는데 걸리는 시간은 길어봐야 3초 밖에 되지 않는다.

그러나 어느 특정한 경우를 제외하면 10만개의 데이터를 동시에 뽑아내는 사람은 없을 것이다.

그렇기에 PHP 매뉴얼의 말도 일리는 있지만, 차이는 존재한다.

 

기왕 시작한 김에, 위의 fetch_array 시 상수를 통해 컨트롤 할 수 있는 부분의 속도도 체크해보았다.

 

환경: MyISAM & 21 Fields & 100,000 Records fetch_array

단위: sec

MYSQL_BOTH

MYSQL_ASSOC

MYSQL_NUM

1번째 시도

2.0118298530579

1.3998398780823

1.1996338367462

2번째 시도

1.8045439720154

1.630038022995

1.3843371868134

3번째 시도

1.703469991684

1.3845191001892

1.2655489444733

4번째 시도

1.7362868785858

1.393550157547

1.1305871009827

5번째 시도

1.7584209442139

1.3735721111298

1.1451189517975

평균

1.8029103279114

1.43630385398866

1.22504520416262

 

MYSQL_BOTH = fetch_array

MYSQL_ASSOC = fetch_assoc

MYSQL_NUM = fetch_row

와 동일한 속도를 보여주고 있다(당연한 결과겠지만 말이다).

[출처] php/mysql fetch_array|작성자 나옹이

저작자 표시
신고

'Development > PHP' 카테고리의 다른 글

PHP 기본적인 페이징(Paging)  (0) 2011.09.22
PHP 날짜 함수  (0) 2011.09.22
PHP 문자열 함수  (0) 2011.09.22
PHP / MySQL fetch_array  (0) 2011.09.19
UTF-8 형식으로 저장할때 생기는 공백 문제  (0) 2011.09.15
이클립스에 PHP 환경 구현  (2) 2011.08.31
현재 0 개의 댓글이 있습니다.
Comment

Blog

Microsoft가 제안하는 PHP개발의 최적환경 - Microsoft Web Platform

2011.02.10 22:48 Development


Microsoft Web Platform은 MS가 제안하는 개발플랫폼의 통합버전입니다. MS는 Visual Studio 2008 Professional 이상은 유료로 판매하지만 Express Edition이라는 무료개발툴과 SQLServer를 동시에 배포하고 있습니다. VS2008의 경량버전이기는 하지만 목적에 맞게 Visual Basic 2008 Express Edition 등 각각의 제품을 무료로 사용할 수 있도록 배포하고 있는데요. 예를 들어 간단한 웹개발을 위해서는 Visual Web Developer 2008 Exress Edition을 이용하면 됩니다. 또한 개별 DB의 사이즈가 수기가 이내라면 SQLSever 2008 Express Edition을 즉각 비지니스에 이용할 수 있습니다.

http://www.microsoft.com/express/download/ 을 참조하세요. 한국어 버전으로 다운로드 가능합니다. 

자, 여기까지는 이전 Express Edition 2005에서 이미 다 나왔던 이야기고..

Microsoft Web Platform Installer 2.0 Beta최근의 MS의 행보를 보면, 완전히 PHP를 끌어안은 모습입니다. 자사의 대부분의 IDE에서 PHP공식지원합니다. 물론 DB는 MySQL이 아닌 자사의 SQLServer에 제한적이지만 IIS7에서 PHP의 성능이 꽤 우수하다는 외국의 소식들만 보아도 PHP를 안을려고 진심으로 노력하고 있어 보입니다. 대개 Windows 환경에서 PHP개발하면 APM으로 통칭되는 Apache, PHP, MySQL의 Windows설치버전을 적절히 통합한 APMSetup 등과 같은 환경에서 개발을 하게 되는데..MS는 이렇게 제안하고 있지요..ㅎㅎ

거추장스럽게 그 흔한 GUI Tool조차 인색한 Apache, MySQL은 던져버리고..IIS와 SQLServer로 PHP를 개발하라고.. 그래서 나온 MS판 APMsetup인 Microsoft Web Platform Installer ... 짜쟌..~~(게다가 꽁짜..!!!!!!)
현재 2.0 베타버전을 배포중인데, 신기한것은 Windows Server 2008에서 탑재된 IIS7.0과 SQLServer 2008을 사용해 볼 수 있는 환경을 XP에서도 제공합니다. 물론 PHP도.. 거기에 .net은 싸비스..ㅋㅋ

http://www.microsoft.com/web/downloads/platform.aspx 를 참조하세요.

MS가 제안하는 WEB의 세계로 한번 와 보실랑가요??? 여기서 나오는 나의 Adobe 씹기 싸비스..왜 Adobe는 이런거 없는것인가? 맨날 맨날 Flex, Flash... 하나의 완벽한 플랫폼을 만들어줘바바바.. 간단한 Grid에 Data바인딩 하나 하자고.. Flex builder열고 MXML하랴, Actionscript하랴, BlazeDS나, PHP등으로 DB추출 백엔드 만들랴.. 씨바.. 개발자들 편하게 해주겠다고 하더니만.. 할일 더 만들어 주는 쎈스구라쟁이들.. 

자, 설치파일을 열고 몇가지 보면,

Microsoft Web Platform

Microsoft Web Platform

Microsoft Web Platform

저작자 표시
신고
현재 0 개의 댓글이 있습니다.
Comment