문제 설명

추석 트래픽

이번 추석에도 시스템 장애가 없는 명절을 보내고 싶은 어피치는 서버를 증설해야 할지 고민이다. 장애 대비용 서버 증설 여부를 결정하기 위해 작년 추석 기간인 9월 15일 로그 데이터를 분석한 후 초당 최대 처리량을 계산해보기로 했다. 초당 최대 처리량은 요청의 응답 완료 여부에 관계없이 임의 시간부터 1초(=1,000밀리초)간 처리하는 요청의 최대 개수를 의미한다.

입력 형식

  • solution 함수에 전달되는 lines 배열은 N(1 ≦ N ≦ 2,000)개의 로그 문자열로 되어 있으며, 각 로그 문자열마다 요청에 대한 응답완료시간 S와 처리시간 T가 공백으로 구분되어 있다.
  • 응답완료시간 S는 작년 추석인 2016년 9월 15일만 포함하여 고정 길이 2016-09-15 hh:mm:ss.sss 형식으로 되어 있다.
  • 처리시간 T는 0.1s0.312s2s 와 같이 최대 소수점 셋째 자리까지 기록하며 뒤에는 초 단위를 의미하는 s로 끝난다.
  • 예를 들어, 로그 문자열 2016-09-15 03:10:33.020 0.011s은 "2016년 9월 15일 오전 3시 10분 33.010초"부터 "2016년 9월 15일 오전 3시 10분 33.020초"까지 "0.011초" 동안 처리된 요청을 의미한다. (처리시간은 시작시간과 끝시간을 포함)
  • 서버에는 타임아웃이 3초로 적용되어 있기 때문에 처리시간은 0.001 ≦ T ≦ 3.000이다.
  • lines 배열은 응답완료시간 S를 기준으로 오름차순 정렬되어 있다.

출력 형식

  • solution 함수에서는 로그 데이터 lines 배열에 대해 초당 최대 처리량을 리턴한다.

입출력 예제

예제1

  • 입력: [
    "2016-09-15 01:00:04.001 2.0s",
    "2016-09-15 01:00:07.000 2s"
    ]

  • 출력: 1

예제2

  • 입력: [
    "2016-09-15 01:00:04.002 2.0s",
    "2016-09-15 01:00:07.000 2s"
    ]

  • 출력: 2

  • 설명: 처리시간은 시작시간과 끝시간을 포함하므로 
    첫 번째 로그는 01:00:02.003 ~ 01:00:04.002에서 2초 동안 처리되었으며,
    두 번째 로그는 01:00:05.001 ~ 01:00:07.000에서 2초 동안 처리된다.
    따라서, 첫 번째 로그가 끝나는 시점과 두 번째 로그가 시작하는 시점의 구간인 01:00:04.002 ~ 01:00:05.001 1초 동안 최대 2개가 된다.

예제3

  • 입력: [
    "2016-09-15 20:59:57.421 0.351s",
    "2016-09-15 20:59:58.233 1.181s",
    "2016-09-15 20:59:58.299 0.8s",
    "2016-09-15 20:59:58.688 1.041s",
    "2016-09-15 20:59:59.591 1.412s",
    "2016-09-15 21:00:00.464 1.466s",
    "2016-09-15 21:00:00.741 1.581s",
    "2016-09-15 21:00:00.748 2.31s",
    "2016-09-15 21:00:00.966 0.381s",
    "2016-09-15 21:00:02.066 2.62s"
    ]

  • 출력: 7

  • 설명: 아래 타임라인 그림에서 빨간색으로 표시된 1초 각 구간의 처리량을 구해보면 (1)은 4개, (2)는 7개, (3)는 2개임을 알 수 있다. 따라서 초당 최대 처리량은 7이 되며, 동일한 최대 처리량을 갖는 1초 구간은 여러 개 존재할 수 있으므로 이 문제에서는 구간이 아닌 개수만 출력한다.
    Timeline



1. 실행 시간 클레스 만들기



public class TimeChecker {
	
	private long startTime;
	private long endTime;
	private long term;
	
	
	public void setStartTime(){
		startTime = System.currentTimeMillis();
	}

	public void setEndTime(){
		endTime = System.currentTimeMillis();
	}
	
	public double calcTerm(){
		term = endTime - startTime;
		return term/1000.0;
	}
}



2. Main 클레스에서 실행하기


import file.TimeChecker;

public class TimeCheckerTest {
	public static void main(String[] args) {
		TimeChecker mTimeChecker = new TimeChecker();

		mTimeChecker.setStartTime();
		
		for(int i = 0; i < 100000; i++){
			
		}
		
    	mTimeChecker.setEndTime();
		System.out.println(mTimeChecker.calcTerm());
	}
}
CONSOLE 
0.001


'Java' 카테고리의 다른 글

Java 소개  (0) 2017.09.06


eclipse console buffer size


상단 tap에서 window > Preferences > Run/Debug > Console


1. Console buffer size를 올린다. 

2. 퍼버 사이즈를 지정하지 않고 싶으면 Limit console output 체크박스 해제.



'eclipse' 카테고리의 다른 글

이클립스[eclipse] utf-8 설정  (0) 2017.09.09
eclipse에서 php project 만들기  (0) 2017.09.08

JAVA File Read 예제


import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.UnsupportedEncodingException; public class ATest { public static void main(String[] args) throws UnsupportedEncodingException, IOException { BufferedReader in = new BufferedReader(new FileReader("test.txt")); String text = ""; String a1; try { while ((a1 = in.readLine()) != null) { StringBuffer sb = new StringBuffer(a1); text+=sb.toString()+"\n"; } in.close(); } catch (Exception e) { e.printStackTrace(); } System.out.println(text); } }


1. eclipse 상단 tap에 [Window] => [Preferences] 클릭

2. General => Content Types => Java Class File 클릭 후 => Default encoding : utf-8 입력 후 => update

 




3. General => Workspace => Other : UTF-8 입력 후 Apply




4. General => Editors => Text Editors => Spelling 클릭 후 => Encoding : Default UTF-8 버튼 클릭 




5. Preferences 검색창에 encoding 검색후.

 Css Files, Html Files, Jsp Files, Xml Files를 모두 Encoding : ISO 10646/Unicode(UTF-8)로 변경한다. 



'eclipse' 카테고리의 다른 글

eclipse에서 콘솔 버퍼 사이즈 늘리기  (0) 2017.09.09
eclipse에서 php project 만들기  (0) 2017.09.08

 먼저 Apache와 php를 다운로드한다.


자세한 내용은 Windows에서 Apache 2.4.X 와 PHP 5.6.X 설치


위의 내용은 apache와 2.4 버전과 php 5.6버전 설치의 예입니다.


1. eclipse 상위 텝에서 [Window] -> [Preferences] 클릭.




2. PHP Servers 설정.


 [PHP] -> [Servers] 클릭후 오른쪽의 new 버튼을 클릭합니다.

 [PHP]가 없다면 eclipse 상위 tap => [Help] => [Eclipse Marketplace] => find : PHP Development Tools 검색후  install



3. PHP Servers 설정.


   New Server창이 뜨면 

   Name : php

   Base Url : http://localhost

   Local Web Root : C:\Apache24\htdocs   입력합니다.


저는 등록이 되어있기 때문에 Edit Server창이 떴습니다.



4. PHP Excutables설정.


동일 [Preferences]의 PHP Excutables를 클립하고 add 버튼을 누릅니다.


Name : php

Executable path : C:\php56\php.exe

PHP ini file (optional) : C:\php56\php.ini


ok하려는데 Zend Debugger extension is not installed. Error Zend Debugger가 설치되어있지 않다고 나옵니다.

저는 Xdebug를 설치 하겠습니다.





5. Xdebug Debugger 설치.


1. Xdebug 홈페이지

2. 저는 64비트 php56버전이라 

PHP 5.6 VC11 TS (64 bit) (SHA256: 8ac0b0e148e437abcf9acf2baf0b40b356cb1a248c53807a5b956e7f8c5acc68) 을 다운 받았습니다.




3. 다운로드 후, [C:\php56] php56버전이 있는 폴더에  php_xdebug-2.5.5-5.6-vc11-x86_64.dll파일 이동

4. C:\Windows\php.ini 파일을 열고 


파일 가장 밑에 추가

 

[XDebug]

zend_extension = "C:\php56\php_xdebug-2.5.5-5.6-vc11-x86_64.dll"

xdebug.profiler_append = 0

xdebug.profiler_enable = 1

xdebug.profiler_enable_trigger = 0

xdebug.profiler_output_dir = "C:\php56\tmp"

xdebug.profiler_output_name = "cachegrind.out.%t-%s"

xdebug.remote_enable = 1

xdebug.remote_handler = "dbgp"

xdebug.remote_host = "127.0.0.1"

xdebug.trace_output_dir = "C:\php56\tmp"

xdebug.remote_autostart=on

xdebug.remote_enable=on

xdebug.remote_connect_back=1

xdebug.remote_port=9000

xdebug.remote_mode=req

xdebug.idekey="netbeans-xdebug"


6. apache 재시작


1.cmd 관리자 권한으로 실행


2. apache stop


c:\> C:\Apache24\bin\httpd.exe -k stop


3. apache start


c:\> C:\Apache24\bin\httpd.exe -k start



7. PHP Executable 설정완료.




8. PHP project 생성.


1. PHP Explorer 텝에서 오른쪽 버튼 => [New] => [Other] => 검색창에 : [php project] 

2. 밑에 사진과 같이 입력 후 Finish

3. 완료.







'eclipse' 카테고리의 다른 글

eclipse에서 콘솔 버퍼 사이즈 늘리기  (0) 2017.09.09
이클립스[eclipse] utf-8 설정  (0) 2017.09.09

윈도우용 apache 2.4 버전을 설치 하려고 한다.


우선 윈도우용 apache 2.4 버전은


http://www.apachelounge.com/download/


위 경로에서 다운로드 받을수 있다.



아파치 2.0.X 와 2.2.X 버전도 테스트 용으로는 크게 무리가 없지만.


PHP 5.6 버전을 사용하기 위해서는 아파치 2.4를 설치해야 하는듯 하다.


apache 2.2 버전은  phpo 5.4 버전 까지만 지원하는듯 하다.


물론 리눅스는 아닌것 같고 윈도우 버전에서만 그런듯 하다.



한 3일 고생해서 겨우 겨우 깔았다.. 아이고 힘들다...


우선 기본 적으로


Aapche 2.2 와 PHP 5.3 버전의 경우는 윈도우용 설치 파일인 .msi 파일이 존재하여


쉽게 설치할수 있다.


그러나


그 이후 버전부터는 .msi 파일을 지원하지 않는다..


내가 최종적으로 사용한 버전이 딱 저거였다.. 그러니...


PHP 5.6을 사용하려고 용쓰는 작업을 여기에 적어 두기로 한다.


결론부터 말하면


PHP 5.6은 위에서도 말했다 싶이... Apache 2.4 가 아니면 윈도우용은 설치되지 않는다.



자 시작합니다.


http://www.apachelounge.com/download/


위 사이트에서 원하는 Apache 2.4 버전을 다운로드 합니다.


위 사이트 왼쪽 화면에 보시면


VC14, VC11, VC9 등이 표시되어 있습니다.


아파치나, PHP, 등이 비쥬얼C로 만들어지다보니.. 런타임 프로그램이 필요합니다.


이때 필요한 런타임 버전을 표한건데요...


VC11이 무난할듯 합니다.(쓸만한 PHP는 거의 대부분 VC11 인것 같습니다.)


저는 윈도우 32비트 버전으로 다운로드 받겠습니다.


32라고 적힌것 또는 X86 이라고 된것은 32비트 버전이구요.

(php 에서는 Win32 x86이라고 적혀 있습니다.)

(X86은 32비트 64비트 구분이 아닌 다른 의미로 사용될때도 있습니다.)


64라고 적힌건 64비트 버전입니다.


관례 같은거니깐 암기해 두면 좋겠죠? 32비트 버전은 586 이렇게 표기하는 경우도 있습니다.




http://www.apachelounge.com/download/VC11/binaries/httpd-2.4.12-win32-VC11.zip


위 주소에서 다운로드 받으면 됩니다.(오늘자 최신 안정버전 기준)



그리고 위에서 말한 런타임은


http://www.microsoft.com/en-us/download/details.aspx?id=30679



위 주소에서 다운로드 하자 비쥬얼C 2012 런타임이다.(VC11 입니다.)


우선 런타임을 다운로드 받아서 먼저 설치한뒤.




http://www.apachelounge.com/download/VC11/binaries/httpd-2.4.12-win32-VC11.zip


위 주소에서 다운로드 받은 Apahce 2.4 버전의 압축을 풉니다.


압축을 풀어서 들어가보면


Apahce24 라는 기본 폴더가 있을껍니다.(제가 다운받은 버전은 안에 폴더가 있었습니다.)


이걸


C:\ 디렉토리도 복사를 합니다


결론은


C:\Apache24 라는 폴더가 생기는 거죠


윈도우 버전은 저 기본 폴더를 사용하는듯합니다.


자 그럼 설치해 볼까요.


윈도우7의 로고 버튼을 누르고


프로그램 및 파일 검색 란에


CMD라고 입력만 하고 대기 합니다.(입력만 하고 대기 하세요.. 자동으로 찾아 줍니다.)


그럼 자동으로 프로그램을 찾아 줄껍니다.


여기서 바로 엔터키 치지 마시고 기달리면


상단에


프로그램(1)

CMD 라고 나타나는데 여기서 CMD 위에 마우스를 살짝 올리시고


마우스 오른쪽 버튼을 누르시면 관리자 권한으로 실행이 나옵니다.


네 관리자 권한으로 실행을 해주셔야 합니다


그런다음


cd C:\Apache24\bin 이라고 입력하셔서 bin 디렉토리로 이동한 다음


httpd.exe -k install 이라고 입력하면


자동으로 인스톨(설치)가 됩니다.


쉽죠?



아마도 오류 메세지 비슷한게 나올껍니다. 그냥 무시하셔도 됩니다.


서버네임이 없어서 그런 오류가 생기는 것인데.


C:\Apache24\conf\httpd.conf 파일을 열어서


#ServerName www.example.com:80 이라고 되어 있는 것의 앞의 #을 제거해 줍니다.


그리고


httpd.exe -k restart 해보시면 오류 메시지 없이 잘 작동할껍니다.

(이때로 관리자 권한으로 실행되어야 합니다. 앞서 cmd 창 닫으신분들은 다시 관리자 권한으로 실행하세요.)



네 아파치는 다 설치한 것입니다.


작동하는지 확인 하시려


익스플로서나 크롬 주소창에


localhost 라고 입력하시면


It's Work! 라는 화면을 만나실수 있습니다.



자 그럼 이제 PHP를 설치해 볼까요?


PHP도 마찬가지 입니다.


http://windows.php.net/download#php-5.6


위 사이트 주소에서 다운로드 받으면 됩니다.


여기서 다운로드 받으실때는 주의할께 VC11 앞서 설명드린것을 받으시길 권장드리구요.


그리고 하나더


Not Thread Safe 와 Thread Safe  두가지가 존재합니다.


그냥 Thread Safe 모드 받으시길 권장드리구요.

(좀더 자세한 내용은 검색해서 공부하셔도 됩니다만 머리 아프면 그냥 통과)


자 그럼 저는


http://windows.php.net/downloads/releases/php-5.6.10-Win32-VC11-x86.zip


위 주소에서 다운로드 받겠습니다.


다운로드 받아서 압축을 푼뒤


그 폴더 이름을 php56 이라고 변경하겠습니다.


그런다음


이걸 아파치와 같이


C:\php56 에 복사를 하도록 하겠습니다.(이동해도 되구요.)




자 그럼 Apache24와 연동해 볼까요?



여기서 잠깐!!!!!!!!!


앞서 Apache와 PHP를 사용하던 컴퓨터라면 앞서 인스톨 버전을 반드시 삭제 하셔야 합니다.


그리고 조금더 복잡해질수도 있습니다.(제가 그래서 엄청 해맸습니다. ㅠ.ㅠ)



자 그럼 앞서 인스톨이 되었던 안되었던 제거했다 치고 설명 드리겠습니다.


C:\Apache24\conf\httpd.conf 파일을 여세요.


ServerRoot "c:/Apache24"


위 문장을 확인하세요. 안고쳤다면 아마 저렇게 되어 있을 껍니다.


뜻은 저 디렉토리(폴더)에 깔아놨다 뭐 그런뜻입니다.


Listen 80


80번 포트를 기본 웹서버 포트로 하겠다는 뜻입니다.


저걸 만약 


Listen 8080 이렇게 고쳤다면 


익스플로러나 크롬에서(이후 웹브라우저라 통칭합니다.)


localhost:8080 이렇게 접속하시면 됩니다.


#ServerName www.example.com:80


이렇게 #으로 주석 처리된것을 #을 제거합니다.(앞서 설명 드렸습니다.)


DocumentRoot "c:/Apache24/htdocs"


위 부분을 찾으세요..


저건 html 이나 php 파일이 저곳에 있을꺼라는 뜻입니다. 유식하게 홈디렉토리라고 하구요


여러분들이 웹브라우저에서 localhost 라고치면


c:/Apache24/htdocs/index.html 파일이 보여 집니다.


현재로는 It's Work!라고 나오는 문서죠..



그리고



<IfModule dir_module>

    DirectoryIndex index.html

</IfModule>


이렇게 된 문장을 찾으세요.


아무것도 입력안하면 기본적으로 보여질 파일명을 지정하는겁니다


위에 말씀 드린것처럼


localhost 라고면 쳐도


http://localhost/index.html 파일이 보이는 이유가 이겁니다.


근데 이걸


<IfModule dir_module>

    DirectoryIndex index.php index.html index.htm

</IfModule>


위와 같이 고쳐 두세요.


그럼 아무것도 없이


localhost 라고만 치면


제일 먼저 index.php 파일이 보여지구요. 혹시 그파일이 없다면


index.html 파일이 보여지구요. 그것도 없다면 index.htm 파일이 보여집니다.


잘 보시면 확장자가 php, html, htm으로 서로 다릅니다.



가능하면 꼭 위와같이 설정하세요. 그래야 index.php 파일이 잘 작동합니다.


나머지는 더 공부헤서 손보시기로 하구요.




제일 중요한 부분들 시작합니다.


AddType application/x-compress .Z

AddType application/x-gzip .gz .tgz


위 두문장을 찾으세요.. 그런다음


AddType application/x-httpd-php .php .inc .bak .old .c


위 문장을 추가해 줍니다.


결론은


AddType application/x-compress .Z

AddType application/x-gzip .gz .tgz

AddType application/x-httpd-php .php .inc .bak .old .c


이렇게 만들라는 겁니다.


.php .inc .bak .old .c 파일은 php에서 해석해서 화면에 보여 주라는 뜻으로


Apache와 PHP를 연동하는 실제 구문입니다.



그리고 또 중요한 부분


지금 수정중인 httpd.conf 맨 마지막 줄에


#BEGIN PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL

#PHPIniDir "C:\Program Files\PHP\"

#LoadModule php5_module "C:\Program Files\PHP\php5apache2_2.dll"

#PHPIniDir "C:\php54\"

#LoadModule php5_module "C:\php54\php5apache2_4.dll"

PHPIniDir "C:\php56\"

LoadModule php5_module "C:\php56\php5apache2_4.dll"

#END PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL


위 문장을 복사해서 넣으세요.


#으로 시작하는건 주석문인것 이제 아시죠?


보시는 바와 같이.


PHPIniDir "C:\php56\"

LoadModule php5_module "C:\php56\php5apache2_4.dll"


요 두줄만 작동하는데요..


php 버전을 바꾸실꺼면 주석처리 하시고 위에꺼 풀어풀어서 적절히 쓰시면 됩니다.


우리는 php 5.6 버전을 C:\php56에 풀었으니깐 저렇게 적는 겁니다.


자 이제 저장을 하겠습니다.


여기서 할일은 마무리 되었습니다.


그렇다고 연동이 끝난것은 아니구요.



이제 제가 삽질한 것은 여기서 부터 시작합니다.


우선


C:\php56\ 폴더로 이동하시면


php.ini 파일을 찾으셔야 합니다.


근데 없을 껍니다.


php.ini-development


php.ini-production


위 두파일이 존합니다.


이중 아무거나 사용하셔도 크게 문제는 없지만


우린 개발자니깐.. 테스트도 해야 하고 해서


개발자용인


php.ini-development 파일을 php.ini 파일로 변경합니다.( 이름바꾸기에서 -development 이글자를 지우라는 뜻입니다.)


자 그럼 파일을 열어 볼까요.


더블클릭하면 자동으로 안열리니깐.. 메모장에서 여시거나 연결프로그램을 메모장으로 지정하시면 되요.


자 이제 따라가면서 찾아 봅시다.


short_open_tag = Off 되어 있는 것을


short_open_tag = On 으로 변경합니다.


쇼트태그 사용하게 해주는게 정신 건강에 이롭습니다.


<?php


?> 


정식 태그아닌 

<? ?> 


이 쇼트 태그 사용 가능하게 해주는것


error_reporting


위 부분을 찾아서


error_reporting = E_ALL 이렇게 되어 있나 확인하세요.. 


모든 오류를 인정(?) 한다는 뜻입니다. 무시할만한 오류까지 싹 다 보겠다는 거지요.


display_errors  찾으셔셔


display_errors = On 되어 있는지 확인하세요.


모든 오류 메시지를 화면에 보여달라는 뜻입니다.


실 운용서버는 Off 하시는것이 바람직 할수도 있어요 오류 메시지 나올때 경로명이 나와서... 좀 지저분해 보일수도..


위에 모든 에러 다 보이게 해놨으니 미래에 없어질 함수같은것도 막 경고 해주면 귀찮을 수도 있으니 잘 선택하세요.


개발자라면 당연히 On 해서 개발합니다.


;extension_dir = "./" 라고 되어 있은 부분을 앞에 주석 ;(세미콜론) 을 제거하고


extension_dir = "C:\php56\ext"


위와 같이 적어 주세요..(php56은 우리가 설치한 경로 입니다. 딴데 설치 했다면 다르게 적으세요.)


(이거 안하면 엄청 골때립니다. 주의 하세요.)




;extension=php_bz2.dll

;extension=php_curl.dll

;extension=php_fileinfo.dll

;extension=php_gd2.dll

;extension=php_gettext.dll

;extension=php_gmp.dll

;extension=php_intl.dll

;extension=php_imap.dll

;extension=php_interbase.dll

;extension=php_ldap.dll

;extension=php_mbstring.dll

;extension=php_exif.dll      ; Must be after mbstring as it depends on it

;extension=php_mysql.dll

;extension=php_mysqli.dll

;extension=php_oci8_12c.dll  ; Use with Oracle Database 12c Instant Client

;extension=php_openssl.dll

;extension=php_pdo_firebird.dll

;extension=php_pdo_mysql.dll

;extension=php_pdo_oci.dll

;extension=php_pdo_odbc.dll

;extension=php_pdo_pgsql.dll

;extension=php_pdo_sqlite.dll

;extension=php_pgsql.dll

;extension=php_pspell.dll

;extension=php_shmop.dll


위 문장을 찾아서.. 모두 주석을 제거하거나....


필요한 것만 주석을 제거하세요( ; <-- 세미콜론 제거)


저는 보통 


extension=php_bz2.dll

extension=php_curl.dll

extension=php_fileinfo.dll

extension=php_gd2.dll

extension=php_gettext.dll

extension=php_gmp.dll

extension=php_intl.dll

extension=php_imap.dll

extension=php_interbase.dll

extension=php_ldap.dll

extension=php_mbstring.dll

extension=php_exif.dll      ; Must be after mbstring as it depends on it

extension=php_mysql.dll

extension=php_mysqli.dll

extension=php_oci8_12c.dll  ; Use with Oracle Database 12c Instant Client

extension=php_openssl.dll

;extension=php_pdo_firebird.dll

;extension=php_pdo_mysql.dll

;extension=php_pdo_oci.dll

;extension=php_pdo_odbc.dll

;extension=php_pdo_pgsql.dll

;extension=php_pdo_sqlite.dll

;extension=php_pgsql.dll

;extension=php_pspell.dll

extension=php_shmop.dll


이정도 합니다. ㅎㅎㅎ



골치 아프면 다 푸는게 상책이죠, 모든 파일이 로드되면 컴에 이익이 될껀 없지만 


그렇다고 컴이 망가지거나 하는건 안니깐...


궁금하시면 공부해서 하나씩 설정하세요.

(지면 관계 및 지식이 짧아서 자세한 설명은 생략... 그래도 알만큼은 대충 알아요 ㅎㅎ)



그리고


;date.timezone =


윗 부분을 찾아서 주석을 제거하고


date.timezone = Asia/seoul


위와같이 아시아 서울을 추가해 줍니다.


영어 뜻과 같이 타임존인데요.. 저걸 안하면 php 5.3 이상부터는 시간 관련 함수 사용하면 워닝(?)이 나옵니다.


화면이 지저분해집니다.


꼭 설정하세요.



그외 나머지는 DB 관련 설명인데요... 그건


mysql 5 버전을 설치하면 달리 설정할 필요도 없이 기본적으로 포트 3306 에 맞추어져 있고 해서 별문제 없습니다.




자 그럼 php.in 파일을 저장합니다.


그런다음


cmd 명령을 입력한뒤 관리자 권한으로 실행


C:\Apache24\bin\httpd.exe -k restart


하면 될것 같지요?


안됩니다... 제가 여기서 또 삽질을 한것이...




저 php.ini 파일은 기본적으로


C:\windows\  디렉토리로 복사를 해주셔야 합니다.



aaa.jpg


그리고 앞서 아파치와 php를 설치한 적이 있다면


C:\windows\system32 폴더에까지 복사를 해주셔야 합니다.


aaa.jpg


보시는 그림과 같이


Configuration File(php.in) path가 기본적올 C:\Windows 로 잡혀 있습니다.


그래서 C:\windows 디렉토리에 복사를 해줍니다.


근데 그 밑에 보시면


Loaded Configuration File 라고 로드된 ini 파일 위치가 나오는데요.. 저게 처음 설치한거라면


C:\windows 라고 나오는데요


저같은 경우


Apache 2.2와 php 5.3을 .msi 파일로 설치한적이 있었는데...


뭐가 꼬였는지


Loaded Configuration File 부분에서 C:\windows\system32 라고 되어 있어서


제가 새로 설치한 php 5.6의 php.ini 파일이 안먹혔던 겁니다.


이걸로 3일을 고생했네요.


결론은... 처음 설치하는 분이면 그냥



C:\windows 디렉토리에 php.ini 파일을 복사하면 되구요.


처음이 아니신분은 가능하면


C:\windows\system32


저기도 한번더 복사를 해주시라는 겁니다.


근데 복사할때 오류가 나거나 하면 그건


현재 Apache 가 작동 중이라서 오류가 날수도 있습니다.


그러니깐


cmd 하셔서(당연히 관리자 권한입니다.)


C:\Apache24\bin\httpd.exe -k stop 하신뒤 (restart 하지마세죠. 가능하면.....)


C:\Apache24\bin\httpd.exe -k start 하시면 잘 될껍니다.


자 이제 연동이 끝났습니다.


이제

C:\Apache24\htdocs폴더에

index.php 파일 하나 만드시고


<?php

phpinfo();

?>


하신다음 저장하시고


웹 브라우저에


localhost 하고 쳐보시거나


혹시 모으니깐.....(중간에 설정을 빼먹고 하신분들을 위해서)


localhost/index.php 하시면 좀전에 위에 보신 그림 파일과 같이


보라 딩딩한 화면을 보실수 있을 껍니다.


혹시 안되시면 제글을 다시 차근 차근 읽어보세요..


그래도 안되시면 댓글 주시면 제 글이 잘못되거나 빠진거면 수정하도록 하겠습니다.


긴글 읽어 주셔서 감사합니다.



출처 : http://www.comcbt.com

'php' 카테고리의 다른 글

PHP 소개  (0) 2017.09.06
Centos에서 yum으로 php version 5.6 install 및 mysql 연동  (1) 2017.08.31

파이썬 (프로그래밍 언어)


파이썬은 A는 널리 사용되는 높은 수준의 프로그래밍 언어 를위한 범용 프로그래밍 에 의해 만들어진, 귀도 반 로섬 (Guido van Rossum) 과 처음은 1991 년에 출시 된 언어를 해석 , 파이썬 코드를 강조하는 디자인 철학이 가독성을 (특히 사용하여 공백 구분하는 들여 쓰기를 코드 블록을 오히려 중괄호 또는 키워드보다), 프로그래머가 C ++ 또는 Java 와 같은 언어에서 사용되는 것보다 적은 코드 행으로 개념을 표현할 수 있도록하는 구문이 있습니다 . [23] [24]이 언어는 작고 큰 규모로 분명한 프로그램을 작성할 수있는 구조를 제공합니다. [25]


파이썬은 동적 유형 시스템과 자동 메모리 관리 기능을 갖추고 있으며 객체 지향 , 명령형 , 함수형 프로그래밍 및 절차 스타일을 비롯한 여러 프로그래밍 패러다임을 지원 합니다. 크고 포괄적 인 표준 라이브러리가 있습니다. [26]


Python 인터프리터는 많은 운영 체제 에서 사용할 수 있으므로 Python 코드를 다양한 시스템에서 실행할 수 있습니다. 파이썬 의 레퍼런스 구현 인 CPython 은 오픈 소스 소프트웨어 이며 [27] 커뮤니티 기반의 개발 모델을 가지고있다. 거의 모든 변형 된 구현이 그러하다. CPython은 비영리 Python Software Foundation에서 관리 합니다.


역사 


파이썬은 1980 년대 후반에 생각되었다 [28] 과 그 구현은 1989 년 12 월 시작 [29] 에 의해 귀도 반 로섬 (Guido van Rossum) 에서 센트럼 Wiskunde 및 인포매티카 에서 (CWI) 네덜란드 받는 후계자로 ABC 언어 (자체에서 영감을 SETL ) [ 30] 가능한 예외 처리 및 운영 시스템과 인터페이스 아메바 . [6] Van Rossum은 Python의 주요 저자이며, Python의 방향을 결정할 때 그의 계속적인 중심 역할은 Python 공동체 인 Benevolent Dictator For Life (BDFL)에 의해 주어진 제목에 반영됩니다 .


Python의 기원에 대해 Van Rossum은 1996 년에 다음과 같이 썼다. [31]


" 6 년 전인 1989 년 12 월, 저는 크리스마스 주변의 주중에 저를 점령 할 수있는 "취미"프로그램을 찾고있었습니다. 내 사무실은 ... 폐쇄 될 것이지만, 나는 집에있는 컴퓨터를 가지고 있었고, 내 손에는별로 없었다. 필자는 최근에 생각해 보았던 새로운 스크립트 언어에 대한 통역사를 작성하기로 결정했습니다. ABC 의 자손 으로 Unix / C 해커 에게 호소합니다 . 필자는 프로젝트의 작업 제목으로 파이썬을 선택했다. 약간 불투명 한 기분 (그리고 Monty Python의 Flying Circus 팬 )이되었다. "

Python 2.0은 2000 년 10 월 16 일에 릴리스되었으며 주기 감지 가비지 컬렉터 와 유니 코드 지원을 포함하여 여러 가지 새로운 주요 기능이 추가 되었습니다 . 이 릴리스에서는 개발 프로세스가 변경되어보다 투명하고 커뮤니티 기반으로 변경되었습니다. [32]


파이썬 3.0, 주요, 이전 버전과 호환되지 않는 버전 (개발에서 그 초기 일반적 파이썬 3000 py3k로 불렸다) 12 월 3 일 2008 년 출시 된 [33] 테스트의 긴 기간 후. 주요 기능의 대부분은 한 백 포트 거꾸로 호환 파이썬의 2.6.x에 [34] 와 2.7.x 버전 시리즈.


Python 2.7의 수명 종료일 (EOL, 일몰 날짜)은 처음에 2015 년으로 설정되었고, 기존 코드의 많은 부분이 파이썬 3으로 쉽게 포팅 될 수 없다는 우려로 2020 년으로 연기되었습니다 . [35] 년 1 월 2017 년, 구글은하는 파이썬 2.7에 작품을 발표 이동 transcompiler , 기록기는 파이썬 2.7의 계획된 수명 종료에 대한 응답이었다 추측 [37] 그러나 구글이 유일한 동기 부여와 같은 동시 작업 부하 성능을 인용합니다. [38]


특징과 철학


파이썬은 인 다중 패러다임 프로그래밍 언어 : 객체 지향 프로그래밍 및 구조화 프로그래밍을 충분히 지원되며, 다양한 언어 기능 지원 함수형 프로그래밍 및 양태 지향 프로그래밍 (기준 포함한 메타 프로그래밍 [39] 과 metaobjects (매직 메써드)). [40] 계약을 통한 디자인 [41] [42] 과 논리 프로그래밍을 포함한 많은 다른 패러다임이 확장을 통해 지원 된다 . [43]


파이썬은 다이나믹 타이핑 과 참조 카운팅 과 메모리 관리를 위한 사이클 감지 가비지 컬렉터 의 혼합을 사용합니다 . 파이썬의 중요한 특징은 동적 이름 해석 ( 후기 바인딩 )입니다. 이것은 프로그램 실행 중에 메소드와 변수 이름을 바인드합니다.


파이썬의 디자인은 Lisp 전통 에서 함수형 프로그래밍 을 지원합니다 . 언어에는 ,, 및 기능이 있습니다. 목록 내포물 , 사전 및 세트; 및 발전기 표현. [44] 표준 라이브러리에는 하스켈 과 표준 ML 에서 빌린 기능적 도구를 구현하는 두 개의 모듈 (itertools와 functools)이 있습니다. [45]filter()map()reduce()


이 언어의 핵심 철학은 다음 과 같은 격언 을 포함 하는 Zen of Python ( PEP 20 ) 문서에 요약되어 있습니다 : [46]


못생긴 것보다 아름다운 것이 낫다.

암시 적보다 암시적인 것이 낫다.

단순함은 복잡한 것보다 낫다.

복잡한 것은 복잡한 것보다 낫다.

가독성 계산

Python은 원하는 모든 기능을 언어 핵심에 내장 할 필요없이 고도의 확장 성을 갖도록 설계되었습니다. Python은 프로그래밍 가능한 인터페이스가 필요한 기존 응용 프로그램에도 임베드 될 수 있습니다. 큰 표준 라이브러리와 쉽게 확장 할 수있는 통역사가있는이 작은 핵심 언어의 디자인은 처음부터 반 로섬 (Van Rossum) 이 반대 의도 를지지하는 ABC의 좌절로 인해 의도되었습니다 . [28]


코딩 방법론에서 선택의 여지를 제공하면서 파이썬 철학은 Perl 과 같은 거친 문법을 거부합니다 . 문법은 덜 깔끔하고 덜 복잡합니다. 으로 알렉스 마르텔리 넣어 : "있는 그대로 영리 것을 설명하려면 하지 파이썬 문화 칭찬 생각합니다." [47] Python의 철학은 Perl이 " 한 가지 이상 , 바람직하게는 한 가지 분명한 방법이 있어야합니다"라는 측면에서 언어 디자인에 대한 접근 방법이 여러 가지가 있음을 거부합니다 . [46]


Python의 개발자는 조기 최적화 를 피하려고 노력하며 , 또한 CPython의 중요하지 않은 부분에 대한 패치를 거부합니다. 이는 명확성을 희생시키면서 속도를 크게 향상시킵니다. [48] 속도가 중요한 경우, 파이썬 프로그래머는 C와 같은 언어로 작성된 확장 모듈에 시간이 중요한 기능을 이동하거나하여 시도 할 수 PyPy 하는 적시 컴파일러 . 파이썬 스크립트를 C로 변환하고 파이썬 인터프리터로 직접 C 레벨 API 호출을하는 Cython 도 사용할 수 있습니다.


Python 개발자의 중요한 목표는 재미있게 사용하는 것입니다. 이것은에서 오는 이름의 유래에 반영되어 몬티 파이 , [49] 및 스팸과 계란 대신 표준을 참조 예 사용하는 것과 자습서 및 참고 자료,에 가끔 장난 접근 방식에 foo에와 줄을 . [50 ]


Python 커뮤니티 의 일반적인 신조어 는 pythonic 이며 프로그램 스타일과 관련된 다양한 의미를 가질 수 있습니다. 그 코드가 파이썬이라고 말하는 것은 그것이 파이썬의 미니멀리스트 철학과 가독성에 중점을 둔다는 점에서 자연 스럽거나 언어에 유창하다는 것을 나타내는 파이썬 관용구를 잘 사용한다고 말할 수 있습니다. 대조적으로, 다른 프로그래밍 언어의 대략적인 전사처럼 이해하기 어렵거나 읽히는 코드를 unpythonic 이라고 합니다 .


파이썬 사용자, 특히 지식이 풍부하고 경험이 풍부한 사람들은 Pythonists , Pythonistas 및 Pythoneers 라고 불립니다 . [ 53]


구문과 의미 


파이썬은 매우 읽기 쉬운 언어입니다. 다른 언어에서 구두점을 사용하는 경우 영어 키워드를 사용하여 시각적 레이아웃을 정리할 수 있도록 설계되었습니다. 파이썬은 블록을 구분하기 위해 중괄호를 사용하지 않으며 많은 다른 프로그래밍 언어와 달리 세미콜론 after 문은 선택적입니다. 게다가, 파이썬은 C 나 파스칼 보다 구문 론적 예외와 특별한 경우가 적습니다 . [54]

들여 쓰기
주요 기사 : 파이썬 구문과 의미 § 들여 쓰기
파이썬은 공백 들여 쓰기를 사용하여 중괄호 나 키워드 대신 블록 을 구분 합니다. 들여 쓰기의 증가는 특정 진술 이후에옵니다. 들여 쓰기가 감소하면 현재 블록의 끝을 의미합니다. [55] 이 기능은 때로는 오프 사이드 규칙 이라고도합니다 .

문장 및 제어 흐름
파이썬의 진술 은 다음을 포함한다.

할당 문 (토큰 '=', 등호). 이것은 기존의 명령형 프로그래밍 언어와 다르게 작동 하며,이 기본 메커니즘 (Python 버전 변수 의 특성 포함 )은 언어의 다른 많은 기능을 조명합니다. 예를 들어, C의 지정은 x = 2"유형이 지정된 변수 이름 x가 숫자 값 2의 사본을 수신합니다"로 변환됩니다. (오른쪽) 값은 (왼쪽) 변수 이름 이 기호 주소 인 할당 된 저장 위치 에 복사됩니다 . 변수에 할당 된 메모리는 선언 된 유형에 대해 충분히 크다 . 동일한 예제를 사용하여 파이썬 할당의 가장 간단한 경우,x = 2, "(generic) name x는 숫자 2의 동적으로 할당 된 별도의 객체 (numeric (int) type of value 2 )에 대한 참조 를 받습니다 ." 이것은 이름을 오브젝트에 바인딩 하는 것입니다. 이름의 저장 위치 에는 표시된 값 이 없기 때문에 이름을 변수 로 부르는 것은 부적절 합니다 . 문자열, 프로 시저, 데이터 및 메서드가있는 복잡한 개체 등 다양한 유형의 개체에 언제든지 이름을 리바운드 할 수 있습니다. 예를 들어 여러 이름에 공통 값을 연속적으로 할당합니다 . ;x = 2y = 2z = 2결과적으로 저장 장치를 (최대) 3 개의 이름과 하나의 숫자 개체에 할당합니다.이 개체에는 세 개의 이름이 모두 바인딩됩니다. 이름은 일반 참조 홀더이므로 고정 데이터 유형 을 해당 참조 데이터 와 연결하는 것은 무리 입니다. 그러나 주어진 시간에 이름은 어떤 객체에 바인딩 될 것이다 . 따라서 동적 타이핑이 있습니다.
if조건과 함께, 코드 블록을 실행 문, else그리고 elif(다른-경우의 수축).
for반복 가능한 객체를 반복 하는 문으로, 첨부 된 블록에서 사용할 각 요소를 로컬 변수에 캡처합니다.
while만큼 그 조건이 참으로 코드 블록을 실행 문.
try의 연결 코드 블록에서 제기 예외를 잡아서 처리 할 수 있도록 문, except절; 또한 finally블록의 정리 방법에 관계없이 블록의 정리 코드 가 항상 실행되도록합니다.
classA를 로컬 네임 스페이스를 코드 블록을 실행하고 첨부 문, 클래스 에 사용하기 위해, 객체 지향 프로그래밍 .
def정의 문, 기능 또는 방법 .
with문 (A 획득, 예를 들어 컨텍스트 관리자 내에서 코드 블록을 둘러싸, (파이썬 2.5) 잠금 코드 블록이 실행되기 전에, 그 후 잠금을 해제하거나 열 파일을 허용 닫을 다음과) 자원 획득을 초기화 (RAII)와 유사한 동작입니다.
이 pass명령문은 NOP로 사용 됩니다. 빈 코드 블록을 작성하려면 구문 적으로 필요합니다.
assert디버깅하는 동안 사용 문, 조건을 확인하는 그 적용해야한다.
yieldA로부터 값을 돌려 문, 발전기 기능을. 파이썬 2.5에서, yield또한 연산자입니다. 이 양식은 코 루틴 을 구현하는 데 사용됩니다 .
import그 함수 또는 변수 현재 program.There에서 사용할 수있는 수입을 이용하는 두 가지 방법이 가져 오기 모듈에 사용되는 문. from <module name> import * 또는 import <module name>.
print문으로 변경 한 print()파이썬 3. 함수 [56]
파이썬은 꼬리 호출 최적화 또는 일류 지속을 지원하지 않으며 , Guido van Rossum에 따르면 결코 그렇지 않습니다 . [57] [58] 그러나 Python의 생성자 를 확장 하여 코 루틴 과 같은 기능을 더 잘 지원할 수 있습니다. [59] 2.5 전에 발전기이었다 지연 반복기 ; 정보가 발전기에서 단방향으로 전달되었습니다. 파이썬 2.5부터는 정보를 생성기 함수로 다시 전달할 수 있으며, 파이썬 3.3부터 정보는 여러 스택 레벨을 통과 할 수 있습니다. [60]

표현식
일부 Python 표현식 은 C 및 Java 와 같은 언어와 유사 하지만 일부는 그렇지 않습니다.

더하기, 빼기 및 곱셈은 동일하지만 나누기의 동작이 다릅니다. 파이썬은 **지수 연산을 추가했습니다 .
Python 3.5부터는 @연산자 와 직접적으로 행렬 곱셈을 지원합니다. C와 Java는 라이브러리 함수로이를 구현합니다. 이전 버전의 Python에서는 중위 연산자 대신 메서드를 사용했습니다. [61 ]
파이썬에서 ==값 수치를 비교 자바 비해, 비교 값 [63] 을 참조하여 물체. [64] (객체에 대한 자바에서의 값 비교는이 equals()메소드 로 수행 될 수있다 .) 파이썬의 is연산자는 객체 식별자를 비교하는 데 사용될 수있다 (참조에 의한 비교). 파이썬에서는 비교가 연결될 수 있습니다 a <= b <= c.
파이썬 단어를 사용 and, or, not의 부울 연산자보다는 상징적 위해 &&, ||, !자바와 C에 사용
파이썬에는 목록 이해 라는 표현 유형이 있습니다. 파이썬 2.4는 발전기 표현 이라고 불리는 좀 더 일반적인 표현으로리스트 명료화를 확장했다 . [44]
익명 함수 는 람다 식을 사용하여 구현됩니다 . 그러나 이것들은 몸이 하나의 표현 일 수 있다는 점에서 제한적이다.
파이썬의 조건식은 x if c else y[65] 와 같이 작성됩니다 (다른 c ? x : y많은 언어에서 공통적 인 연산자 와 피연산자 순서가 다릅니다 ).
파이썬은 목록 과 튜플을 구별 합니다 . 리스트는로 쓰여지고 [1, 2, 3]변경 가능하며 사전의 키로 사용할 수 없습니다 (사전 키는 Python에서 불변 이어야합니다 ). 터플은 (1, 2, 3)불변이므로 터플의 모든 요소가 불변 인 경우 사전의 키로 사용할 수 있습니다. 그러나 값은 __add __ (<다른 튜플>)을 사용하여 튜플에 추가 될 수 있습니다. 두 개의 튜플에 가입 할 수 있습니다. 간접적으로 우리는 튜플에 값을 추가 할 수 있습니다. 터플 주위의 괄호는 일부 상황에서는 선택 사항입니다. 튜플은 등호의 왼쪽에 나타날 수 있습니다. 따라서 같은 문을 x, y = y, x사용하여 두 변수를 교환 할 수 있습니다.
파이썬에는 "문자열 형식"연산자가 %있습니다. 이 함수 printf는 C의 형식 문자열 과 유사하게 작동합니다 ( 예 "spam=%s eggs=%d" % ("blah", 2):) "spam=blah eggs=2". 파이썬 3과 2.6+에서는 클래스 의 format()메소드를 보완했습니다. str예를 들어 "spam={0} eggs={1}".format("blah", 2)파이썬 3.6에 "f-strings"가 추가되었습니다 : f'spam={"blah"} eggs={2}'. [66]
파이썬에는 다양한 종류의 문자열 리터럴이 있습니다 .
문자열은 작은 따옴표 또는 큰 따옴표로 구분됩니다. Unix 셸 , Perl 및 Perl이 영향을주는 언어와 달리 작은 따옴표와 큰 따옴표는 동일하게 작동합니다. 두 종류의 문자열 모두 백 슬래시 ( \)를 이스케이프 문자 로 사용합니다 . 문자열 보간법 은 파이썬 3.6에서 "형식화 된 문자열 리터럴"로 사용 가능하게되었습니다. [66]
삼중 따옴표로 묶인 문자열로 일련의 세 개의 작은 따옴표 나 큰 따옴표로 시작하고 끝납니다. 그것들은 여러 줄에 걸쳐 있고 쉘, Perl, Ruby 에서이 문서 와 같은 기능을 합니다.
문자열 리터럴 접두사로 표시되는 원시 문자열 종류 r. 이스케이프 시퀀스는 해석되지 않습니다. 따라서 원시 문자열은 일반 표현식 이나 Windows 스타일의 경로 와 같이 리터럴 백 슬래시가 일반적 인 곳에서 유용 합니다. C #@ 에서 "- quoting"을 비교하십시오 .
파이썬은 리스트에 배열 인덱스 및 배열 슬라이싱 표현식을 a[key], a[start:stop]또는 로 표시 a[start:stop:step]합니다. 인덱스는 0 부터 시작하고 음수 인덱스는 끝에서부터 시작됩니다. 슬라이스는 시작 색인에서 중지 색인 까지의 요소를 취합니다 . step 또는 stride 라고하는 세 번째 슬라이스 매개 변수를 사용하면 요소를 건너 뛰고 뒤집을 수 있습니다. 슬라이스 인덱스는 생략 될 수 있습니다. 예를 들어 a[:]전체 목록의 복사본을 반환합니다. 슬라이스의 각 요소는 얕은 복사본 입니다.
Python에서는 Common Lisp , Scheme 또는 Ruby 와는 달리 표현식과 명령문을 구별 합니다. 이로 인해 일부 기능이 중복됩니다. 예 :

List comprehensions vs. for-loops
조건부 표현식과 if블록 비교
eval()대 exec()내장 기능 (파이썬 2, exec성명이다); 전자는 표현을위한 것이고, 후자는 진술을위한 것이다.
명령문은 표현식의 일부가 될 수 없으므로 목록 및 기타 보급 또는 람다 표현식 에는 모두 표현식이 포함될 수 없습니다. 이에 대한 특별한 경우 a = 1는 조건문의 조건식의 일부를 구성 할 수없는 것과 같은 할당 문입니다. 이것은 조건에서 =동등 연산자 ==에 대한 대입 연산자 를 오인하는 고전적인 C 오류를 피할 수있는 장점이 있습니다. if (c = 1) { ... }구문 적으로 유효하지만 (의도하지 않은) C 코드이지만 if c = 1: ...Python에서 구문 오류가 발생합니다.

방법
객체에 대한 메소드 는 객체의 클래스에 첨부 된 함수입니다 . 문법 instance.method(argument)은 일반적인 방법과 함수를 위한 구문적인 설탕 이다 Class.method(instance, argument). 파이썬 메소드는 다른 객체 지향 프로그래밍 언어 (예 : C ++ , Java , Objective-C 또는 Ruby ) 에서 암시 적 (또는 ) 과 달리 인스턴스 데이터self 에 액세스하기 위한 명시적인 매개 변수 를가 집니다. [67]selfthis

타이핑
파이썬은 오리 타이핑을 사용 하고 유형이 객체이지만 타입이 지정되지 않은 변수 이름을가집니다. 형식 제약 조건은 컴파일 타임에 확인되지 않습니다 . 오히려 객체에 대한 작업이 실패 할 수 있습니다. 이는 주어진 객체가 적절한 유형이 아님을 나타냅니다. 동적으로 타입이 지정되어 있음에도 불구하고 , Python은 강력하게 타입 지정 되며, 자동적으로 그것들을 이해하려고 시도하지 않고 잘 정의되지 않은 연산 (예 : 문자열에 숫자를 추가하는 것)을 금지합니다.

파이썬은 프로그래머가 객체 지향 프로그래밍에 가장 자주 사용되는 클래스를 사용하여 자신의 유형을 정의 할 수 있도록 합니다 . 클래스의 새 인스턴스 는 클래스 (예 : SpamClass()또는 EggsClass()) 를 호출하여 생성되며 클래스는 메타 매크로 type 의 인스턴스 (자체는 자체 인스턴스)이므로 메타 프로그래밍 및 리플렉션을 허용 합니다.

버전 3.0 이전에는 파이썬에는 구식 과 새 스타일 의 두 종류가있었습니다 . [68] 모두 스타일 구문이 동일 클래스가 존재하는지 여부의 차이 object를 직접 또는 간접적로부터 상속된다 (모든 새로운 스타일의 클래스에서 상속 object및 인스턴스 type). Python 2.2 이후 버전의 Python 2에서는 두 가지 종류의 클래스를 사용할 수 있습니다. 구식 클래스는 Python 3.0에서 제거되었습니다.

장기 계획을 지원하는 점진적 입력 [69] 및 Python 3.5로서, 언어의 문법 정적 타입을 지정 허용하지만,이 기본 구현 CPython을 체크하지 않는다. 실험적으로 선택 가능한 정적 유형 검사기 인 mypy 는 컴파일 타임 유형 검사를 지원합니다. [70]

Summary of Python 3's built-in types
TypemutableDescriptionSyntax example
boolimmutableBoolean valueTrue
False
bytearraymutableSequence of bytesbytearray(b'Some ASCII')
bytearray(b"Some ASCII")
bytearray([119, 105, 107, 105])
bytesimmutableSequence of bytesb'Some ASCII'
b"Some ASCII"
bytes([119, 105, 107, 105])
compleximmutableComplex number with real and imaginary parts3+2.7j
dictmutableAssociative array (or dictionary) of key and value pairs; can contain mixed types (keys and values), keys must be a hashable type{'key1': 1.0, 3: False}
ellipsisAn ellipsis placeholder to be used as an index in NumPy arrays...
floatimmutableFloating point number, system-defined precision3.1415927
frozensetimmutableUnordered set, contains no duplicates; can contain mixed types, if hashablefrozenset([4.0, 'string', True])
intimmutableInteger of unlimited magnitude[71]42
listmutableList, can contain mixed types[4.0, 'string', True]
setmutableUnordered set, contains no duplicates; can contain mixed types, if hashable{4.0, 'string', True}
strimmutablecharacter string: sequence of Unicode codepoints'Wikipedia'
"Wikipedia"
"""Spanning
multiple
lines"""
tupleimmutableCan contain mixed types(4.0, 'string', True)But we can append elements using __add__ .

a = (4.0, 'string' , True).__add__(('hi' ,))

now a gives (4.0, 'string', True ,'hi')



수학

파이썬은 보통 C의 산술 연산자 (가 +, -, *, /, %)를. 또한 **예를 들어 5**3 == 125, and 9**0.5 == 3.0, 그리고 새로운 행렬 곱셈 @연산자가 버전 3.5에 포함되어 있습니다. [72] 또한,는 단항 연산자 (갖는 ~본질적 한 인수의 모든 바이트 반전). 정수의 경우 이것은 의미 ~x=-x-1합니다. [73] 다른 연산자는 비트 쉬프트 연산자를 포함 x << y이행하는 x왼쪽으로 y, 장소와 동일 x*(2**y)하고, x >> y시프트되는 x오른쪽 y장소와 동일 x/(2**y). [74]


분단의 행동은 시간이 지남에 따라 크게 변했다 .


Python 2.1 및 이전 버전에서는 C 부분 동작을 사용합니다. /오퍼레이터는 달리 정수 피연산자가 모두 정수 분할 인 경우, 부동 소수점 나눗셈이다. 정수 나누기는 0, 예를 들어쪽으로 반올림 7/3 == 2하고 -7/3 == -2.

파이썬 2.2 변경 정수 나눗셈은 마이너스 무한대 등으로 반올림 7/3 == 2하고 -7/3 == -3. 바닥 분할 //연산자가 도입되었습니다. 그래서 7//3 == 2, -7//3 == -3, 7.5//3 == 2.0와 -7.5//3 == -3.0. 추가를 from __future__ import division하면 모듈이 파이썬 3.0 규칙을 나눗셈에 사용합니다 (다음 참조).

Python 3.0 /은 항상 부동 소수점으로 변경 됩니다. 파이썬 측면에서 사전 3.0 /입니다 고전 부문 의 버전 3.0 /입니다 실제 부문 , 그리고 //이다 바닥 부문 .

대부분의 언어와 다르지만 음의 무한대로 반올림하면 일관성이 추가됩니다. 예를 들어 방정식 (a + b)//b == a//b + 1은 항상 참 이라는 의미입니다 . 또한 방정식 b*(a//b) + a%b == a이 양수 및 음수 값 모두에 유효 함을 의미합니다 a. 그러나,이 식의 유효성을 유지하는 결과의 동안을 의미 a%b하고, 예상 한대로의 반 개방 구간 [0, B ), 여기서, b는 양의 정수이고, 그 간격 (거짓말하는 B , 0] 때 b제외된다. [76]


파이썬은 float를 가장 가까운 정수로 반올림 하는 round함수를 제공합니다 . 들어 타이 브레이크 3 사용 라운드 멀리에서 제로가되기 전에, 버전 : 1.0, -1.0입니다. [77] Python 3은 round to even을 사용합니다 : 2는 2 입니다. [78]round(0.5)round(-0.5)round(1.5)round(2.5)


파이썬은 수학에서 일반적으로 사용되는 방식과 동일한 방식으로 여러 개의 동등한 관계가있는 부울 표현식을 허용합니다. 예를 들어, 발현 a < b < c실험 여부 a미만 b및 b보다 작다 c. C에서 파생 된 언어는이 표현을 다르게 해석합니다. C에서는 표현식이 먼저 평가 a < b되어 결과가 0 또는 1이되고 그 결과는 다음과 비교됩니다 c. [79] [ 필요한 페이지 ]


파이썬은 임의 정밀도 산술 을 지원합니다 . 정수는 파이썬 유형에 속한 기계 지원 최대 고정 정밀도 (대개 32 또는 64 비트) 에서 필요에 따라 int파이썬 유형에 속한 임의의 정밀도 로 투명하게 전환됩니다 long. 후자는 텍스트 표현에 "L"접미사가 있습니다. [80] (파이썬 3에서는 타입 int과 long타입 의 구분 이 제거되었으므로,이 행위는 int클래스에 의해 완전히 포함된다 .) Decimal모듈 의 타입 / 클래스 decimal(버전 2.4 이후)는 소수점 이하의 부동 소수점 수를 임의의 정밀도와 여러 라운딩으로 제공한다 모드. [81]Fraction 모듈 의 유형fractions(버전 2.6 이후)는 유리수에 대해 임의의 정밀도를 제공합니다. [82]


파이썬의 광범위한 수학 라이브러리와 원시 기능을 더욱 확장 한 써드 파티 라이브러리 인 NumPy 로 인해 숫자 데이터 처리 및 조작과 같은 문제를 돕기 위해 과학 스크립팅 언어로 자주 사용됩니다.


Library


파이썬에는 파이썬의 가장 큰 강점 중 하나로 인용 되는 커다란 표준 라이브러리가 있습니다 . [83] 많은 작업에 적합한 도구를 제공합니다. 이는 고의적이며 "배터리 포함" [26] Python 철학 으로 묘사되었습니다 . 인터넷 연결 응용 프로그램의 경우 많은 표준 형식 및 프로토콜 (예 : MIME 및 HTTP )이 지원됩니다. 생성 모듈 그래픽 사용자 인터페이스 에 연결 관계형 데이터베이스 , 생성하는 의사 난수 산술 임의 정밀도 소수점과, [84] 조작 정규식 및 고 단위 테스트 또한 포함되어 있습니다.


표준 라이브러리의 일부는 사양에 포함되어 있습니다 (예 : Web Server Gateway Interface (WSGI) 구현 wsgiref은 PEP 333 [85]를 따릅니다 ). 그러나 대부분의 모듈은 그렇지 않습니다. 이들은 코드, 내부 문서 및 테스트 스위트 (제공되는 경우)로 지정됩니다. 그러나 대부분의 표준 라이브러리는 크로스 플랫폼 Python 코드이기 때문에 변형 모듈을 수정하거나 다시 작성해야하는 모듈은 극소수입니다.


2017 년 5 월 현재 Python 용 타사 소프트웨어가 포함 된 공식 저장소 인 Python Package Index 에는 107,000 개 이상의 [86] 패키지가 포함되어있어 다음과 같은 다양한 기능을 제공합니다.


그래픽 사용자 인터페이스, 웹 프레임 워크, 멀티미디어, 데이터베이스, 네트워킹 및 통신

테스트 프레임 워크, 자동화 및 웹 스크래핑, 문서 도구, 시스템 관리

과학 계산, 텍스트 처리, 이미지 처리


개발 환경


대부분의 Python 구현 (CPython 포함)에는 REPL ( read-eval-print loop )이 포함 되어있어 사용자가 명령문을 순차적으로 입력하고 즉시 결과를받는 명령 행 해석기 로 작동 할 수 있습니다 .


다른 셸은 IDLE 및 IPython을 포함하여 기본 인터프리터의 기능을 능가하는 기능을 추가합니다 . 일반적으로 파이썬 셸의 시각적 스타일을 따르는 동안 자동 완성, 세션 상태 보존 및 구문 강조 와 같은 기능을 구현합니다 .


표준 데스크탑 통합 개발 환경 ( Python IDE ) 외에도 웹 브라우저 기반 IDE, SageMath (과학 및 수학 관련 Python 프로그램 개발 용), 브라우저 기반 IDE 및 호스팅 환경 PythonAnywhere가 있습니다. 또한 Canopy IDE는 Python 프로그램을 작성하기위한 옵션입니다. [87]


구현


참조 구현
CPython으로 명명 된 주요 Python 구현 은 C 로 작성되었으며 일부 C99 기능을 선택 하여 C89 표준을 충족합니다 . [88] 은 중간에 파이썬 프로그램을 컴파일하여 바이트 코드 , [89] 에 의해 실행되는 가상 머신 . [90] CPython은 C와 Python이 혼합 된 대형 표준 라이브러리와 함께 배포됩니다. Windows 및 최신 유닉스 계열 시스템을 포함한 많은 플랫폼 용 버전에서 사용할 수 있습니다. CPython은 거의 개념 상 크로스 플랫폼을 지향합니다. [91]

다른 구현
PyPy 는 Python 2.7 및 3.5 의 신속하고 호환되는 [92] 해석기입니다. 그것의 적시 (just-in-time) 컴파일러는 CPython에 비해 상당한 속도 향상을 제공합니다. [93] 소프트웨어 트랜잭션 메모리를 사용 하는 멀티 코어 프로세서를 이용하는 버전 이 만들어지고 있습니다. [94]

Stackless Python 은 마이크로 스레드 를 구현하는 중요한 CPython 포크입니다 . C 메모리 스택을 사용하지 않으므로 대량의 동시 프로그램을 사용할 수 있습니다. PyPy는 스택없는 버전도 가지고있다. [95]

MicroPython 은 마이크로 컨트롤러 에서 실행되도록 최적화 된 Python 3 변형입니다 .

더 이상 지원되지 않는 구현
다른 적시 컴파일러는 과거에 개발되었지만 현재 지원되지 않습니다 :

Google은 LLVM 을 사용하여 Python 인터프리터의 속도를 5 배 향상시키고 수천 개의 코어로 확장 할 수있는 멀티 스레딩 기능을 개선하기 위해 2009 년 Unladen Swallow 라는 프로젝트를 시작했습니다 . [96]
Psyco 는 CPython과 통합되고 런타임시 바이트 코드를 기계 코드로 변환 하는 JIT (just-in-time) 전문 컴파일러입니다. 방출 된 코드는 특정 데이터 유형에 특화되어 있으며 표준 Python 코드보다 빠릅니다.
2005 년 Nokia 는 PyS60 이라는 Series 60 휴대 전화 용 Python 인터프리터를 출시했습니다 . 여기에는 CPython 구현의 많은 모듈과 Symbian 운영 체제 와 통합 할 수있는 몇 가지 추가 모듈이 포함 됩니다. 이 프로젝트는 S60 플랫폼의 모든 변형을 실행하기 위해 최신 상태로 유지되었으며 몇 가지 타사 모듈을 사용할 수 있습니다. Nokia N900 은 또한 GTK 위젯 라이브러리 가있는 Python을 지원하며 , 대상 장치에서 프로그램을 작성하고 실행할 수 있습니다. [97]

다른 언어로 크로스 컴파일러
제한없는 Python, 제한된 Python 하위 집합 또는 원본 언어와 비슷한 Python과 유사한 언어 를 사용하여 상위 수준 개체 언어에 대한 여러 가지 컴파일러가 있습니다.

자이 썬 은 자바 바이트 코드로 컴파일하고 모든 자바 가상 머신 구현에 의해 실행될 수있다 . 또한 Python 프로그램에서 Java 클래스 라이브러리 함수를 사용할 수 있습니다.
IronPython 은 .NET Common Language Runtime 에서 Python 프로그램을 실행하기 위해 유사한 접근법을 따른다 .
RPython의 언어로 컴파일 할 수 있습니다 C , 자바 바이트 코드 , 또는 공통 중간 언어 , 파이썬의 PyPy 인터프리터를 구축하는 데 사용됩니다.
Pyjs는 Python을 JavaScript로 컴파일합니다 .
Cython은 Python을 C 및 C ++로 컴파일합니다 .
Pythran은 Python을 C ++로 컴파일합니다 .
다소 Pyrex (2010 년 최신 릴리스)와 Shed Skin (2013 년 최신 릴리스)은 각각 C 및 C ++로 컴파일됩니다.
Google의 Grumpy는 Python을 컴파일하여 실행 합니다 .
Nuitka는 Python을 C ++로 컴파일합니다. [98]
성능
EuroSciPy '13에서 비 숫자 (조합) 작업 부하에 대한 다양한 Python 구현의 성능 비교가 제공되었습니다. [99]

개발


파이썬의 개발은 대부분 PEP ( Python Enhancement Proposal ) 프로세스를 통해 이루어 집니다. PEP 프로세스는 주요 새로운 기능을 제안하고 문제에 대한 커뮤니티 입력을 수집하며 Python으로 들어간 디자인 결정을 문서화하기위한 기본 메커니즘입니다. [100] 뛰어난하는 PEP는 검토하고 파이썬 커뮤니티와 반 로섬, 파이썬 프로젝트에 의해에 주석 자애로운 종신 독재자 . [100]


언어의 향상은 CPython 레퍼런스 구현의 개발과 함께 진행됩니다. 메일 링리스트 인 python-dev는 언어 개발에 대한 토론을위한 기본 포럼입니다. 특정 문제는 python.org에서 유지 관리 되는 Roundup 버그 추적기 에서 논의됩니다 . [201] 2017 년 1 월 Python이 GitHub 로 옮겨 질 때까지 Mercurial을 실행 하는 자체 호스팅 소스 코드 저장소에서 개발이 이루어 졌습니다 .


CPython의 공개 릴리스에는 버전 번호의 어느 부분이 증가하는지에 따라 구분되는 세 가지 유형이 있습니다.


이전 버전과 호환되지 않는 버전으로 코드가 중단 될 것으로 예상되며 수동으로 이식 해야합니다 . 버전 번호의 첫 번째 부분이 증가합니다. 이러한 릴리스는 드물게 발생합니다. 예를 들어 버전 3.0은 2.0 이후 8 년 후에 릴리스되었습니다.

주요 기능이나 "기능"버전은 호환되지만 새로운 기능을 도입합니다. 버전 번호의 두 번째 부분이 증가합니다. 이 릴리스는 대략 18 개월마다 발생하도록 계획되어 있으며 각 주요 버전은 출시 후 몇 년 동안 버그 수정을 통해 지원됩니다. [103]

Bugfix는 새로운 기능은 없지만 버그를 수정합니다. 버전 번호의 세 번째이자 마지막 부분이 증가합니다. 이 릴리즈는 최종 릴리즈 이후로, 또는 약 3 개월마다 충분한 수의 버그가 업스트림에 고정 될 때마다 만들어집니다. 보안 취약점은 버그 수정 릴리즈에서도 패치됩니다. [104]

많은 알파, 베타 및 릴리스 후보 도 최종 릴리스 전에 미리보기 및 테스트 용으로 출시됩니다. 각 릴리스에 대해 거친 일정이 있지만 코드가 준비되지 않은 경우에는 종종 푸시 백됩니다. 개발 팀은 개발 중에 대규모 단위 테스트 슈트 를 실행 하고 BuildBot 연속 통합 시스템을 사용하여 코드 상태를 모니터링합니다 . [105]


파이썬 개발자 커뮤니티는 86,000 이상 기여하고있다 [106] (2016년 8월 20일의 같은 소프트웨어 모듈을 받는) 파이썬 패키지 색인 (PyPI), 파이썬 타사 라이브러리의 공식 저장소.


파이썬에 관한 주요 학술 대회 는 PyCon 입니다. Pyladies 와 같은 특별 멘토링 프로그램이 있습니다 .


명명


파이썬의 이름은 TV 시리즈에서 파생 몬티 파이썬의 플라잉 서커스 , [107] 그리고 예제 코드 몬티 파이썬 참조를 사용하는 것이 일반적이다. [108] 예를 들어, metasyntactic 변수 들은 파이썬 문헌에서 사용은 스팸 과 계란 대신에 기존의, foo는 및 바 . [108] [109] 또한, 공식 Python 문서 및 많은 코드 예제에는 종종 모호한 Monty Python 참조가 포함되어 있습니다. [ 111]


접두사 Py- 는 뭔가가 파이썬과 관련이 있음을 보여주기 위해 사용됩니다. 파이썬 응용 프로그램 또는 라이브러리의 이름이 접두사의 사용 예는 파이 게임 하는 바인딩 의 SDL 파이썬 (일반적으로 게임을 만드는 데 사용)에를; Symbian S60 운영 체제 용 구현 인 Python for S60 ; PyQt 와 PyGTK 는 각각 Qt 와 GTK 를 파이썬에 바인딩합니다 . 및 PyPy , 파이썬 구현은 원래 파이썬으로 작성.


용도 


2003 년 이래로 Python은 TIOBE Programming Community Index 에서 측정 한 가장 인기있는 프로그래밍 언어 상위 10 위 안에 지속적으로 선정되었습니다 . 2017 년 3 월 현재이 언어는 5 번째로 많이 사용되는 언어입니다. [112] 그것은 2007 년과 2010 년의 올해의 프로그래밍 언어로 선정되었습니다. [113] 문법적 구문 이 주로 C에 기반하지 않는 세 번째로 인기있는 언어입니다 ( 예 : C ++, Objective-C (참고, C # 및 Java는 중괄호 사용과 같이 C와 부분적으로 유사한 구문 유사성을 가지며 C보다 서로 유사합니다.


경험적 연구에 따르면 Python과 같은 스크립팅 언어는 문자열 조작 및 사전 검색과 관련된 프로그래밍 문제로 인해 C 및 Java와 같은 기존 언어보다 생산성이 높아졌습니다. 메모리 소비는 종종 "Java보다 좋았고 C 나 C ++보다 훨씬 나빴습니다." [114]


파이썬의 사용을 대규모 조직을 포함 위키피디아 , 구글 , [115] 야후! , [116] CERN , [117] NASA , [118] 와 같은 일부 작은 엔티티 ILM , [119] 및 ITA . [120] 소셜 뉴스 네트워킹 사이트 인 Reddit 은 전적으로 파이썬으로 작성되었습니다.


파이썬은 아파치 웹 서버를 위한 mod_wsgi 같은 웹 어플리케이션을 위한 스크립팅 언어의 역할을 할 수있다 . [121] 와 웹 서버 게이트웨이 인터페이스 , 표준 API는 이러한 응용 프로그램을 촉진하기 위해 진화했다. Django , Pylons , Pyramid , TurboGears , web2py , Tornado , Flask , Bottle 및 Zope 와 같은 웹 프레임 워크 는 복잡한 응용 프로그램의 설계 및 유지 보수를 지원합니다. Pyjs 및IronPython 은 Ajax 기반 애플리케이션의 클라이언트 측 개발에 사용될 수 있습니다. SQLAlchemy 는 관계형 데이터베이스에 대한 데이터 맵퍼 로 사용될 수 있습니다 . Twisted 는 컴퓨터 간의 통신을 프로그래밍하는 프레임 워크이며 Dropbox에 의해 (예를 들어) 사용됩니다 .


같은 라이브러리 NumPy와 , SciPy 및 하기 matplotlib은 과학적 컴퓨팅 파이썬의 효과적인 사용을 허용 [122] [123] 등의 특수 라이브러리와 바이오 파이썬 과 Astropy은 도메인 특정 기능을 제공한다. SageMath 는 파이썬으로 프로그래밍 가능한 " 노트북 "을 갖춘 수학 소프트웨어 입니다 .이 라이브러리는 대수학 , 조합론 , 수치 수학 , 수론 및 미적분학을 포함하여 수학의 여러 측면을 다루고 있습니다.. Java 플랫폼 에서 재 구현 된 파이썬 언어 는 DMelt 프로젝트에 의한 2D / 3D 시각화와 함께 수치 및 통계 계산에 사용됩니다 . [124 ]


Python은 Abaqus 와 같은 유한 요소 방법 소프트웨어 , FreeCAD 와 같은 3D 매개 변수 모델러 , 3ds Max , Blender , Cinema 4D , Lightwave , Houdini , Maya , modo 와 같은 3D 애니메이션 패키지를 비롯하여 많은 소프트웨어 제품에 스크립팅 언어로 성공적으로 포함되었습니다. , 모션 빌더 , 소프트 이미지 , 시각 효과 합성기 누크 등에 2D 영상 프로그램 GIMP , [126] 잉크 스케이프 , Scribus에 및 프로 숍 페인트 , [127] 와 악보 같은 프로그램 악보 작성 프로그램 과 아카펠라를 . GNU Debugger 는 Python을 예쁜 프린터 로 사용 하여 C ++ 컨테이너와 같은 복잡한 구조를 보여줍니다. Esri 는 ArcGIS 에서 스크립트를 작성하기위한 최상의 선택으로 Python을 권장 합니다. [128] 또한 여러 비디오 게임에 사용 된, [129] [130] 과 세 가지의 처음으로 채택 된 프로그래밍 언어 에서 구글 앱 엔진 , 인 다른 두 개의 자바 와 이동합니다 . [131]파이썬은 또한 알고리즘 거래 및 양적 금융에 사용됩니다. [132] Python은 래퍼를 사용하여 다른 언어로 실행되는 온라인 중개 API의 API로 구현 될 수도 있습니다. [133]


파이썬은 인공 지능 작업 에 사용되었습니다 . [134] [ 137 ] [137] 모듈 아키텍처, 간단한 구문 및 리치 텍스트 처리 도구를 갖춘 스크립팅 언어로서, 파이썬은 종종 자연어 처리 작업에 사용됩니다. 또한,


많은 운영 체제에는 Python이 표준 구성 요소로 포함되어 있습니다. 언어는 대부분의 Linux 배포판 , AmigaOS 4 , FreeBSD , NetBSD , OpenBSD 및 macOS 와 함께 제공되며 터미널에서 사용할 수 있습니다. 많은 리눅스 배포판은 Python으로 작성된 설치 프로그램을 사용합니다 : Ubuntu 는 Ubiquity 설치 프로그램을 사용하고 Red Hat Linux 와 Fedora 는 Anaconda 설치 프로그램을 사용합니다 . Gentoo Linux 는 패키지 관리 시스템 인 Portage 에서 Python을 사용합니다 .


파이썬은 또한 악용 개발을 포함 하여 정보 보안 업계 에서 광범위하게 사용됩니다 . [139 ]


Sugar Labs 에서 개발 된 Child XO 당 One Laptop 용 Sugar 소프트웨어의 대부분은 Python으로 작성되었습니다. [141]


라즈베리 파이 싱글 보드 컴퓨터 프로젝트는 주요 사용자 프로그래밍 언어로 파이썬을 채택했다.


LibreOffice 는 Python을 포함하며 Python으로 Java를 대체하고자합니다. 파이썬 스크립팅 제공자는 핵심 기능입니다 [142] 버전 4.0 이후 2013년 2월 7일에서.


파이썬의 영향을받은 언어


파이썬의 디자인과 철학은 다음과 같은 여러 프로그래밍 언어에 영향을 미쳤습니다.

Boo 는 들여 쓰기, 유사한 문법 및 유사한 객체 모델을 사용합니다. 그러나 Boo는 정적 타이핑 (및 선택적 오리 타이핑 )을 사용하며 .NET Framework 와 밀접하게 통합되어 있습니다. 또한,
코브라 는 들여 쓰기와 비슷한 구문을 사용합니다. Cobra의 "Acknowledgements"문서는 파이썬을 영향을 미치는 언어 중 첫 번째로 나열합니다. [144] 그러나 Cobra는 계약 별 설계 , 단위 테스트 및 선택적 정적 유형 지정을 직접 지원합니다 . [145]
CoffeeScript 는 JavaScript로 크로스 컴파일하는 프로그래밍 언어입니다. Python에서 영감을 얻은 구문을 사용합니다.
ECMAScript는 반복자 , 생성자 및 파이썬의 목록 이해력 을 빌렸다 . [146]
Go 는 "Python과 같은 동적 언어로 작업하는 개발 속도"를 통합하는 것으로 설명됩니다. [147]
Groovy 는 Python 디자인 철학을 Java 로 가져 오려는 바람에 자극 받았습니다 . [148]
줄리아 는 " 진정한 매크로 로 파이썬과 같은 일반 프로그래밍에 쓸모있게 설계되었습니다 ." [20] 줄리아에서 또는 줄리아로 전화하는 것이 가능합니다. to PyCall.jl 과 Python 패키지 pyjulia를 사용하면 Python 에서 다른 방향으로 호출 할 수 있습니다.
OCaml 은 Python과 Haskell 에서 영감을 얻은 twt (The Whitespace Thing)라는 선택적 구문을 사용합니다 . [149]
루비 의 창시자 마츠모토 유키히로 (Yukihiro Matsumoto )는 "필자는 Perl보다 강력하고 스크립팅 언어가 Python보다 객체 지향적 이길 원했기 때문에 내 자신의 언어를 디자인하기로 결정했다"고 말했다. [150]
스위프트 는 애플이 발명 한 프로그래밍 언어이다. 파이썬에서 영감을 얻은 구문을 가지고 있습니다. [151]
파이썬의 개발 관행 또한 다른 언어로 에뮬레이션되었습니다. Python의 영향 때문에 Tcl [152] 과 Erlang [153] 에서 언어 변경의 근거를 기술 한 문서 (Python의 경우 PEP)를 요구하는 관행이 사용됩니다 .

파이썬은 TIOBE 지수에 의해 측정 된 1 년 동안 인기가 가장 높은 언어에 주어지는 TIOBE 프로그래밍 언어 올해의 상을 두 번 (2007 년과 2010 년) 수상했습니다 . [154]


'python' 카테고리의 다른 글

python print  (1) 2017.09.24
python exe 실행파일 만들기  (0) 2017.09.05

MySQL


MySQL의 (공식적으로 발음 /의 m aɪ ˌ ɛ S K JU ɛ L / "내 SQL", [6] )가있다 오픈 소스 관계형 데이터베이스 관리 시스템 (RDBMS)에. [7] 그 이름은 "My", 공동 설립자 Michael Widenius 의 딸 이름 [8] 과 " Structured Query Language "의 약어 인 " SQL "의 조합 입니다. MySQL의 개발 프로젝트는 만든 소스 코드 의 조건에 따라 사용할 수 GNU 일반 공중 사용 허가서뿐만 아니라 다양한 독점 계약을 맺고 있습니다. MySQL은 소유하고 단일 후원 한 비영리 기업의 스웨덴어 기업 의 MySQL AB 지금 소유, 오라클 . [9] 독점 사용을 위해, 여러 지불 버전을 사용할 수 있습니다 및 추가 기능을 제공합니다.


MySQL은 LAMP 오픈 소스 웹 애플리케이션 소프트웨어 스택 (및 다른 " AMP "스택) 의 핵심 구성 요소입니다 . LAMP는 " Linux , Apache , MySQL, Perl / PHP / Python " 의 머리 글자입니다 . MySQL 데이터베이스를 사용하는 응용 프로그램에는 TYPO3 , MODx , Joomla , WordPress , phpBB , MyBB 및 Drupal이 있습니다. MySQL은 Google [10] [11] (검색은 아닐지라도)을 포함하여 많은 유명하고 대규모 인 웹 사이트 에서도 사용됩니다 .페이스 북 , [12] [13] [14] 트위터 , [15] 플리커 , [16] 그리고 유튜브 . [17]


개요


MySQL은 C 및 C ++로 작성되었습니다 . SQL 구문 분석기는 yacc 로 작성 되었지만 자체 추출 된 어휘 분석기를 사용 합니다. [18] MySQL은 많은 작동 시스템 플랫폼 을 포함하여, AIX , BSDi의 , FreeBSD의 , HP-UX , eComStation , I5 / OS , IRIX , 리눅스 , 맥 OS , 마이크로 소프트 윈도우 , NetBSD의 , 노벨 넷웨어 , 오픈 BSD , 오픈 솔라리스 , OS / 2Warp, QNX , Oracle Solaris , Symbian , SunOS , SCO OpenServer , SCO UnixWare , Sanos 및 Tru64 등이 있습니다. OpenVMS에 대한 MySQL 포트 도 존재합니다. [19]


MySQL 서버 소프트웨어 자체와 클라이언트 라이브러리는 이중 라이센스 배포를 사용합니다. 그들은 GPL 버전 2에서 제공되는 [20] 2000년 6월 28 일부터 시작 [21] (2009 년에 확장 된 FLOSS의 라이센스 예외) [22] 또는 독점 라이센스를 사용합니다. [23]


지원은 공식 매뉴얼에서 얻을 수 있습니다. [24] 무료 IRC 채널과 포럼에서 추가 지원이 가능합니다. 오라클은 MySQL Enterprise 제품을 통해 유료 지원을 제공합니다. 그들은 서비스의 범위와 가격면에서 다릅니다. 또한 MariaDB 및 Percona를 비롯한 여러 가지 타사 조직이 지원 및 서비스를 제공합니다 .


MySQL은 긍정적 인 리뷰를 받았으며 리뷰어는 "평균적인 경우에 매우 잘 수행됩니다."그리고 "개발자 인터페이스가 있으며 문서 (웹 사이트 등을 통해 실제 세계에서의 피드백은 물론) 아주 좋아. " [25] 또한 "빠르고 안정적이고 진정한 다중 사용자, 다중 스레드 SQL 데이터베이스 서버"로 테스트되었습니다. [26]


역사


MySQL은 David Axmark , Allan Larsson 및 Michael "Monty"Widenius가 설립 한 스웨덴 회사 인 MySQL AB 가 만들었습니다 . Widenius와 Axmark에 의한 MySQL의 원래 개발은 1994 년에 시작되었다. [27] MySQL의 첫 번째 버전은 1995 년 5 월 23 일에 등장했다. 처음에는 저급 언어 ISAM을 기반으로 mSQL 에서 개인용으로 제작되었는데, 유연하지 못합니다. 그들은 mSQL 과 동일한 API 를 유지하면서 새로운 SQL 인터페이스를 만들었습니다 . API를 mSQL 시스템과 일관되게 유지함으로써 많은 개발자는 (전적으로 라이센스가 부여 된) mSQL 전례 대신에 MySQL을 사용할 수있었습니다. [[ 표창장은 필요로했다 ][ 반신 반의 - 토론 ]


이정표

MySQL 개발의 추가 이정표 :


1995 년 5 월 23 일 최초의 내부 릴리즈

버전 3.19 : 1996 년 말, www.tcx.se에서

버전 3.20 : 1997 년 1 월

Windows 버전은 Windows 95 및 NT 용으로 1998 년 1 월 8 일에 릴리스되었습니다.

버전 3.21 : www.mysql.com의 프로덕션 릴리스 1998

버전 3.22 : 1998 년부터의 알파, 베타

버전 3.23 : 2000 년 6 월 베타, 2001 년 1 월 22 일 프로덕션 릴리스 [28]

버전 4.0 : 베타 2002 년 8 월, 2003 년 3 월 생산 릴리스 ( 노동 조합 ).

버전 4.01 : 베타 2003 년 8 월부터, 죠티는 [ 명확한 설명이 필요 ] [ 표창장은 필요가 ] 데이터베이스 추적을 위해 MySQL을 채택

버전 4.1 : 2004 년 6 월 베타 버전, 2004 년 10 월 릴리즈 ( R-trees 및 B-tree , 하위 쿼리, prepared statements).

버전 5.0 : 2005 년 3 월의 베타, 2005 년 10 월 프로덕션 릴리스 (커서, 저장 프로 시저, 트리거, 뷰, XA 트랜잭션 )

Federated Storage Engine의 개발자는 "Federated Storage Engine은 개념 증명 (proof-of-concept) 스토리지 엔진입니다." [29] 그러나 MySQL 버전 5.0의 주요 배포판에는 기본 저장소가 포함되어 있습니다. 단점에 대한 문서는 "MySQL 페더 레이 티드 테이블 : 누락 매뉴얼"에 나와 있습니다. [30]

Sun Microsystems 는 2008 년에 MySQL AB를 인수했습니다 .

버전 5.1 : 프로덕션 릴리스 2008 년 11 월 27 일 (이벤트 스케줄러, 분할 , 플러그인 API, 행 기반 복제, 서버 로그 테이블)

버전 5.1에는 버전 5.0에있는 35 개에 추가 된 20 개의 알려진 크래시 및 잘못된 결과 버그 (거의 모든 것이 릴리스 5.1.51에서 수정 됨)가 포함되어 있습니다. [32]

MySQL 5.1 및 6.0-alpha는  단일 쿼리 처리를 위해 여러 CPU 코어를 사용할 수 없기 때문에 데이터웨어 하우징에 사용할 때 성능이 좋지 않았습니다 . [33]

오라클은 2010 년 1 월 27 일 Sun Microsystems를 인수했습니다. [34] [35] [36]

오라클은 썬 인수를 발표 한 마이클 "Monty"Widenius가 MySQL을 포크 에 넣고 MariaDB를 출시 하고 MySQL 개발자들과 함께했습니다. [37]

MySQL Server 5.5는 일반적으로 사용 가능했습니다 (2010 년 12 월 현재 ). 향상된 기능 및 기능은 다음과 같습니다.

디폴트의 ​​스토리지 엔진은 트랜잭션과 참조 무결성 제약 조건을 지원하는 InnoDB이다.

개선 된 InnoDB I / O 서브 시스템 [38]

개선 된 SMP 지원 [39]

반자동 복제.

SQL 표준을 준수하는 SIGNAL 및 RESIGNAL 문

보완 유니 코드 문자 세트 utf16, utf32 및 utf8mb4 지원.

사용자 정의 파티셔닝을위한 새로운 옵션.

MySQL Server 6.0.11-alpha는 2009 년 5 월 22 일에 6.0 라인의 마지막 릴리스 로 발표되었습니다 [40] . 미래의 MySQL 서버 개발은 새로운 릴리스 모델을 사용합니다. 6.0 용으로 개발 된 기능은 향후 릴리스에 통합됩니다.

MySQL 5.6의 일반적인 가용성은 2013 년 2 월에 발표되었습니다. 새로운 기능으로는 쿼리 최적화 프로그램의 성능 향상 , InnoDB의 높은 트랜잭션 처리량, 새로운 NoSQL 스타일의 memcached API, 초대형 테이블 쿼리 및 관리를위한 파티셔닝 개선, TIMESTAMP 컬럼 유형 PERFORMANCE_SCHEMA를 통해 사용 가능한 데이터를 확장하여 밀리 초, 복제 개선 및 성능 모니터링을 올바르게 저장합니다 . [41] InnoDB 스토리지 엔진은 또한 전체 텍스트 검색과 그룹 커밋 성능 향상을 지원합니다.

MySQL 5.7의 일반적인 가용성은 2015 년 10 월에 발표되었습니다 .

MySQL Server 8.0.0-dmr (Milestone Release)는 2016 년 9 월 12 일에 발표되었습니다. [43]


출시 이력 

해제일반 가용성최신 부 버전최신 릴리스
5.12008-11-14 [44]5.1.73 [45]2013-12-03
5.52010-12-03 [46]5.5.562017-05-02
5.62013-02-05 [47]5.6.362017-04-10
5.72015-10-21 [48]5.7.192017-07-17
8.0N / A8.0.1 [49]2017-04-10
전설:
구 버전
여전히 지원되는 이전 버전
최신 버전
최신 미리보기 버전


법적 분쟁 및 인수

2001 년 6 월 15 일, NuSphere 는 MySQL AB, TcX DataKonsult AB 및 원래 저자 인 Michael ( "Monty") Widenius와 David Axmark를 "계약 위반, 제 3 자 계약 및 관계 및 불공정 경쟁에 대한 불법적 인 간섭 ". [50 ]


2002 년 MySQL AB는 Progress NuSphere를 미국 지방 법원 에서 저작권 및 상표권 침해 로 소송했습니다 . NuSphere는 라이선스의 준수없이 MySQL의 GPL 코드와 NuSphere Gemini 테이블을 연결하여 MySQL의 저작권을 침해 한 것으로 추정됩니다. [52] 2002 년 2 월 27 일 Patti Saris 판사 의 예비 심리 후에 당사자들은 합의 회담에 들어가 결국 합의했다. [53] 청문회 후, FSF는 "판사 사리 그녀가 GNU GPL은 집행과 결합 라이센스로 보는 것이 분명했다."논평 [54]


2005 년 10 월, 오라클 은 트랜잭션 및 외래 키 와 같은 기능을 MySQL이 제공 할 수있게 해주는 타사 InnoDB 스토리지 엔진을 개발 한 Finnish 회사 인 Innobase OY를 인수했습니다 . 인수 후 Oracle의 보도 자료에 따르면 MySQL AB 가 사용할 수있는 소프트웨어를 제공하는 계약 은 2006 년에 갱신 (및 재협상) 될 예정입니다. [55] 2006 년 4 월 MySQL 사용자 회의에서 MySQL은 MySQL과 Innobase OY가 라이선스 계약의 "다년간"연장에 동의했음을 확인한 보도 자료. [56]


2006 년 2 월, 오라클은 인수 슬리피 캣 소프트웨어 , [57] 의 업체 버클리 DB , 다른 MySQL의 스토리지 엔진의 기초를 제공하는 데이터베이스 엔진. 버클리 DB는 널리 사용되지 않았기 때문에 거의 영향을 미치지 않았고 2006 년 10 월에 출시 된 MySQL 5.1의 GA 이전 릴리스 인 MySQL 5.1.12에서 삭제되었습니다 (사용 부족으로 인해) .


2008 년 1 월, Sun Microsystems는 MySQL을 10 억 달러에 구입했습니다. [59]


2009 년 4 월, 오라클은 썬 마이크로 시스템즈에 대한 매입 계약을 체결 [60] 다음 MySQL의 저작권 및 상표의 소유자. 썬의 이사회는 만장일치로이 거래를 승인했다. 2009 년 8 월 20 일, 썬의 주주 및 미국 정부의 승인을 받았습니다. [61] 2009 년 12 월 14 일에 오라클 은 지난 4 년 동안했던 것처럼 MySQL [62] 을 계속 개선하겠다고 약속 했습니다.


MySQL은 오라클의 인수에 대해 이동, "MySQL의 저장"하기 [63] 오라클은 MySQL의 설립자 중 하나에 의해 시작되었다 몬티 Widenius에 . 50,000 명 이상의 개발자와 사용자의 청원은 유럽 집행위원회에 인수 승인을 요청했습니다. 동시에, 여러 자유 소프트웨어 오피니언 리더 (포함 에벤 모글렌 , 파멜라 존스 의 그록로 (Groklaw) , 얀 와일데보어 와 카를로 피아 또한 합병 규제 절차의 공동 변호인으로 행동) 합병의 조건없는 승인을 옹호했다. [ 표창장은 필요로했다 ]유럽위원회와의 협상의 일환으로 오라클은 독점 및 GPL 버전을 사용할 수있는 MySQL AB에서 오래 동안 사용하던 이중 라이센스 전략을 사용하기 위해 적어도 2015 년까지 MySQL 서버를 계속 사용할 것이라고 약속했습니다. 유럽 ​​연합 (EU)의 독점 금지법은 "합병 승인을위한 조건으로 MySQL을 포기하도록 압력을 가했다"고 전했다. 그러나 위키 리크 스 (WikiLeaks )에 의해 밝혀진 바와 같이 미 법무부는 오라클의 요청에 따라 EU에 무조건 합병을 승인하도록 압력을 가했다. [64] 유럽 ​​집행위원회는 결국 2010 년 1 월 21 일 오라클의 MySQL 인수를 무조건적으로 승인했다 .


2009 년 1 월 오라클이 MySQL을 인수하기 전에 Monty Widenius는 GPL 전용 포크 인 MariaDB를 시작했습니다 . MariaDB는 MySQL 서버 5.5와 동일한 코드 기반을 기반으로하며 Oracle 제공 버전과의 호환성을 유지하는 것을 목표로합니다. [66]


특징


MySQL은 오픈 소스 MySQL Community Server와 독점 Enterprise Server의 두 가지 버전으로 제공됩니다 . [67] 의 MySQL Enterprise Server는 서버 플러그인으로 설치 독점 확장하는 일련의 구별하지만, 그 버전 번호 체계를 공유하고 동일한 코드베이스에서 내장되어있다.


MySQL 5.6에서 사용 가능한 주요 기능 :


확장 기능뿐 아니라 ANSI SQL 99 의 광범위한 하위 집합

플랫폼 간 지원

SQL / PSM 과 밀접하게 부합하는 절차 언어를 사용하는 저장 프로 시저 [68]

방아쇠

커서

업데이트 가능한 보기

InnoDB 스토리지 엔진을 사용할 때의 온라인 DDL .

정보 스키마

모니터링 목적으로 서버 실행 및 쿼리 성능에 대한 통계를 수집하고 집계하는 성능 스키마입니다. [69]

SQL 표준을보다 잘 준수하기위한 엄격 모드를 포함하여 런타임 동작을 제어하는 ​​SQL 모드 옵션 세트입니다.

X / Open XA 분산 트랜잭션 처리 (DTP) 지원; 디폴트의 InnoDB 스토리지 엔진을 사용하여 2 단계 커밋

기본 InnoDB 스토리지 엔진을 사용할 때 세이브 포인트 와의 트랜잭션 . NDB Cluster Storage Engine은 또한 트랜잭션을 지원합니다.

InnoDB 및 NDB Cluster 스토리지 엔진을 사용할 때의 ACID 준수 [70]

SSL 지원

쿼리 캐싱

하위 SELECT (즉, 중첩 된 SELECT)

마스터 당 하나의 마스터, 마스터 당 많은 슬레이브를 갖춘 내장 된 복제 지원 (마스터 마스터 복제 및 마스터 - 슬레이브 복제). [71] 다중 마스터 복제가 제공된다 MySQL 클러스터 , [72] 및 다중 마스터 지원 갈레 클러스터를 사용하여 클러스터링 구성에 추가 될 수있다. [73]

전체 텍스트 인덱싱 및 검색 [a]

내장 데이터베이스 라이브러리

유니 코드 지원 [b]

최적화 프로그램에 파티션 정리 기능이있는 분할 된 테이블

MySQL 클러스터를 통한 비공유 클러스터링

여러 스토리지 엔진을 통해 애플리케이션의 각 테이블에 대해 가장 효과적인 것을 선택할 수 있습니다. [기음]

네이티브 스토리지 엔진 InnoDB , MyISAM , Merge, Memory (heap), Federated , Archive, CSV , Blackhole, NDB Cluster.

그룹화를 커밋하고 여러 연결에서 여러 트랜잭션을 수집하여 초당 커밋 수를 늘립니다.

개발자는 약 2 개월마다 MySQL 서버의 마이너 업데이트를 릴리스합니다. 소스는 MySQL의 웹 사이트 또는 MySQL의 GitHub 저장소에서 GPL 라이센스에 따라 얻을 수 있습니다 .


제한 

이노의 기본 이외의 스토리지 엔진을 사용하는 경우, MySQL은 전체 준수하지 않는 SQL의 외래 키 참조를 포함하여 구현 된 기능 중 일부에 대한 표준, [74] , 체크 제약. [75]


MySQL 5.7까지, 트리거는 액션 / 타이밍 당 하나씩으로 제한됩니다. 즉, 최대 하나의 트리거를 INSERT 작업 후에 실행하도록 정의 할 수 있으며 동일한 테이블에서 INSERT 이전에 트리거를 정의 할 수 있습니다 . [76] 뷰에는 트리거를 정의 할 수 없습니다. [76]


UNIX_TIMESTAMP 같은 MySQL 데이터베이스의 붙박이 기능 () 03:14:07 후 0을 반환 UTC 에 2038년 1월 19일 . [77]


배포 


LAMP 소프트웨어 번들, 여기 오징어 와 함께 표시됩니다 .

MySQL은 소스 코드에서 수동으로 빌드하고 설치할 수 있지만 특별한 사용자 정의가 필요하지 않으면 바이너리 패키지에서 설치하는 것이 더 일반적입니다. 대부분의 Linux 배포판 에서 패키지 관리 시스템 은 최소한의 노력으로 MySQL을 다운로드하고 설치할 수 있지만 보안 및 최적화 설정을 조정할 때 종종 추가 구성이 필요합니다.


MySQL은보다 독점적 인 데이터베이스에 대한 저가형 대안으로 시작되었지만 점차적으로 더 큰 규모의 요구 사항을 지원하기 위해 발전해 왔습니다. LAMP 기반 웹 응용 프로그램 의 구성 요소 또는 독립 실행 형 데이터베이스 서버 로 중소 규모 단일 서버 배포에서 가장 일반적으로 사용됩니다 . MySQL의 매력 중 상당 부분은 phpMyAdmin 과 같은 오픈 소스 도구의 생태계에 의해 가능해진 비교적 단순하고 사용 용이성에서 기인 합니다. 중간 범위의 경우, MySQL은 기가 바이트의 메모리가있는 멀티 프로세서 서버와 같이 더 강력한 하드웨어에 배포하여 확장 할 수 있습니다.


그러나 단일 서버에서 성능을 확장 할 수있는 한계가 있기 때문에 규모가 커질수록 향상된 성능과 신뢰성을 제공하기 위해 다중 서버 MySQL ( '스케일 아웃') 배포가 필요합니다. 일반적인 하이 엔드 구성에는 데이터 쓰기 작업 을 처리하고 모든 읽기 작업을 처리하는 여러 슬레이브에 복제 되는 강력한 마스터 데이터베이스가 포함될 수 있습니다 . [78] 마스터 서버는 계속해서 오류시 슬레이브 중단 시간을 최소화하는 새로운 마스터가 촉진 될 수 있도록 연결된 슬레이브 바이너리 로그 이벤트를 민다. 성능 향상은 memcached를 사용하여 메모리에서 데이터베이스 쿼리의 결과를 캐싱 하거나 데이터베이스를 작은 청크로 분해 하여 성능을 향상시킬 수 있습니다.파편 분산 서버 클러스터의 수에 분산 될 수있다. [79]


백업 소프트웨어

mysqldump 는 MySQL의 커뮤니티 에디션과 엔터프라이즈 에디션에 포함 된 논리적 인 백업 툴이다. 모든 스토리지 엔진에서 백업을 지원합니다. MySQL Enterprise Backup은 오라클의 MySQL Enterprise 구독의 일부로 포함 된 핫 백업 유틸리티로, 다른 스토리지 엔진을위한 백업뿐만 아니라 원시 InnoDB 핫 백업을 제공합니다.


XtraBackup 은 오픈 소스 MySQL 핫 백업 소프트웨어 프로그램입니다. 기능으로는 InnoDB 스토리지를위한 핫 (hot), 비 록 (non-locking) 백업, 증분 백업, 스트리밍, 병렬 압축 백업, 초당 입출력 작업 수를 기반으로 한 스로틀 링 등이 있습니다 .


고 가용성 소프트웨어

MySQL Fabric은 MySQL 서버 모음을 관리하기위한 통합 시스템 이며 고 가용성 및 데이터베이스 샤딩이 구축 된 프레임 워크 입니다. MySQL Fabric은 오픈 소스이며, 장애 발생시 프로 시저 실행을 지원하며, 일반적으로 복원 실행 이라고하는 실행 모델을 제공합니다 . MySQL 클라이언트 라이브러리는 확장되어 서버 오류시에도 장애 조치 를 처리하는 복잡성을 숨길 뿐만 아니라 트랜잭션을 샤드에 올바르게 디스패치합니다. [81]


클라우드 배치

주요 기사 : 구름 데이타베이스

MySQL은 Amazon EC2 와 같은 클라우드 컴퓨팅 플랫폼 에서도 실행할 수 있습니다 . 클라우드에있는 MySQL의 일반적인 배포 모델은 다음과 같습니다.


가상 시스템 이미지

이 구현에서는 클라우드 사용자가 MySQL을 설치 한 상태에서 자신의 머신 이미지를 업로드하거나 Amazon EC2에서 제공하는 것과 같이 MySQL의 최적화 된 설치로 기성품 이미지를 사용할 수 있습니다. [82]

서비스로서의 MySQL

일부 클라우드 플랫폼은 MySQL을 "서비스"로 제공합니다. 이 구성에서 응용 프로그램 소유자는 MySQL 데이터베이스를 자체적으로 설치하고 유지 관리 할 필요가 없습니다. 대신 데이터베이스 서비스 공급자가 데이터베이스 설치 및 유지 관리 책임을 맡고 응용 프로그램 소유자는 사용법에 따라 비용을 지불합니다. [83] 주목할만한 클라우드 기반의 MySQL 서비스가 있습니다 아마존 관계형 데이터베이스 서비스 ; 랙 스페이스 ; HP 수렴형 클라우드 ; Heroku 와 Jelastic .


사용자 인터페이스


그래픽 사용자 인터페이스

그래픽 사용자 인터페이스 (GUI)는 텍스트 기반 인터페이스가 아닌 명령 라벨 또는 텍스트 탐색을 입력으로서 사용자가 전자 장치 또는 그래픽 아이콘 및 보조 악보 시각적 표시기를 통해 프로그램과 상호 작용할 수 있도록 인터페이스의 일종이다. GUI는 키보드에서 명령을 입력해야하는 명령 행 인터페이스 (CLI)보다 배우기가 쉽습니다.


MySQL과 통합되고 사용자가 데이터베이스 구조 및 데이터를 시각적으로 작업 할 수있게 해주는 타사 독점 및 무료 그래픽 관리 응용 프로그램 (또는 "프런트 엔드")을 사용할 수 있습니다. 몇 가지 잘 알려진 프런트 엔드는 다음과 같습니다.



MacOS에서 실행되는 MySQL Workbench

MySQL 워크 벤치

MySQL Workbench 는 MySQL을 위한 공식 통합 환경입니다. 이것은 MySQL AB가 개발했으며, 사용자는 그래픽으로 MySQL 데이터베이스를 관리하고 데이터베이스 구조를 시각적으로 디자인 할 수 있습니다. MySQL Workbench는 이전의 소프트웨어 패키지 인 MySQL GUI Tools를 대체합니다 . MySQL Workbench는 다른 써드 파티 패키지와 마찬가지로 여전히 권위있는 MySQL 프론트 엔드로 간주되며, 데이터베이스 디자인 및 모델링, SQL 개발 (MySQL 쿼리 브라우저 대체) 및 데이터베이스 관리 (MySQL 관리자 대체)를 관리 할 수 ​​있습니다.

MySQL Workbench 에는 MySQL 웹 사이트에서 다운로드 할 수 있는 일반 무료 및 오픈 소스 커뮤니티 에디션 과 커뮤니티 에디션 의 기능 세트를 확장하고 개선하는 독점 표준 에디션 두 가지 가 있습니다 .

관리자

관리자 (이전의 phpMinAdmin)는 MySQL 데이터베이스의 내용을 관리하기위한 무료 MySQL 프론트 엔드입니다 (버전 2 이후로 PostgreSQL, MS SQL, SQLite 및 Oracle SQL 데이터베이스에서도 작동합니다). 관리자는 Apache 라이센스 (또는 GPL v2)로 단일 PHP 파일 (약 300KB 크기) 형태로 배포되며 여러 CSS를 사용할 수있는 여러 데이터베이스를 관리 할 수 ​​있습니다. 필자는 Jakub Vrána가 2007 년 7 월 phpMyAdmin의 경량 대체품으로이 도구를 개발하기 시작했습니다.

데이터베이스 워크 벤치

Database Workbench 는 UPscene Productions에서 개발 한 여러 데이터베이스 시스템 간의 상호 운용성을 통해 SQL을 사용하여 여러 관계형 데이터베이스를 개발하고 관리하는 소프트웨어 응용 프로그램입니다.

Databases Workbench는 다중 데이터베이스 시스템을 지원하기 때문에 소프트웨어 개발자에게 다른 데이터베이스 시스템과 동일한 인터페이스 및 개발 환경을 제공 할 수 있으며 크로스 데이터베이스 도구도 포함 할 수 있습니다.

Database Workbench는 Oracle Database, Microsoft SQL Server, SQL Anywhere, Firebird, NexusDB, InterBase, MySQL 및 MariaDB와 같은 관계형 데이터베이스를 지원합니다. Database Workbench 5는 32 비트 또는 64 비트 Windows 플랫폼에서 실행됩니다. Linux에서 FreeBSD 또는 macOS Database Workbench는 Wine을 사용하여 작동 할 수 있습니다.

DBEdit

DBEdit 는 Oracle, DB2, MySQL 및 JDBC 드라이버를 제공하는 모든 데이터베이스에 연결할 수있는 데이터베이스 편집기입니다. Windows, Linux 및 Solaris에서 실행됩니다. DBEdit은 무료이며 오픈 소스 소프트웨어이며 GNU General Public License하에 배포됩니다. 소스 코드는 SourceForge에서 호스팅됩니다.

HeidiSQL

이전에 MySQL-Front로 알려진 HeidiSQL 은 무료 오픈 소스 클라이언트 또는 MySQL (그리고 MariaDB 및 Percona Server와 같은 포크), Microsoft SQL Server 및 PostgreSQL의 프론트 엔드입니다. HeidiSQL은 독일 프로그래머 Ansgar Becker와 Delphi의 다른 기고가들에 의해 개발되었습니다. HeidiSQL을 사용하여 데이터베이스를 관리하려면 사용자는 허용 가능한 자격 증명을 사용하여 로컬 또는 원격 MySQL 서버에 로그인하여 세션을 만들어야합니다. 이 세션 내에서 사용자는 연결된 MySQL 서버 내에서 MySQL 데이터베이스를 관리하고 완료되면 서버와의 연결을 끊을 수 있습니다. 이 기능 세트는 대부분의 일반적이고 고급 데이터베이스, 테이블 및 데이터 레코드 작업에는 충분하지만 MySQL Frontend에서 예상되는 모든 기능을 사용하기 위해 적극적인 개발을 계속하고 있습니다.

오픈 오피스 자료

LibreOffice Base는 최종 사용자가 데이터에 쉽게 액세스 할 수 있도록 데이터베이스 작성, 양식 및 보고서 준비를 가능하게합니다. Microsoft Access 와 마찬가지로 Access 데이터베이스 (JET), ODBC 데이터 소스 및 MySQL 또는 PostgreSQL [84]을 비롯한 다양한 데이터베이스 시스템의 프런트 엔드로 사용할 수 있습니다 .

Navicat

Navicat 은 MySQL, MariaDB, Oracle, SQLite, PostgreSQL 및 Microsoft SQL Server 용으로 PremiumSoft CyberTech Ltd.에서 만든 일련의 그래픽 데이터베이스 관리 및 개발 소프트웨어입니다. 탐색기와 같은 그래픽 사용자 인터페이스가 있으며 로컬 및 원격 데이터베이스에 대한 다중 데이터베이스 연결을 지원합니다. 이 디자인은 데이터베이스 관리자 및 프로그래머부터 고객에게 서비스를 제공하고 파트너와 정보를 공유하는 다양한 비즈니스 / 회사에 이르기까지 다양한 고객의 요구를 충족시키기 위해 만들어졌습니다.

Navicat은 크로스 플랫폼 도구이며 Microsoft Windows, OS X 및 Linux 플랫폼에서 작동합니다. 구매시 사용자는 영어, 프랑스어, 독일어, 스페인어, 일본어, 폴란드어, 중국어 (간체 및 번체)의 8 가지 언어에서 소프트웨어 언어를 선택할 수 있습니다.

OpenOffice.org

OpenOffice.org Base 는 무료로 사용할 수 있으며 전체 제품군이 설치된 경우 MySQL 데이터베이스를 관리 할 수 ​​있습니다.

phpMyAdmin

phpMyAdmin 은 웹 브라우저를 사용하여 MySQL 관리를 처리하기위한 PHP로 작성된 무료 오픈 소스 도구입니다. 데이터베이스, 테이블, 필드 또는 행 작성, 수정 또는 삭제와 같은 다양한 작업을 수행 할 수 있습니다. SQL 문 실행. 또는 사용자 및 권한 관리 78 개 언어로 제공되는이 소프트웨어는 [ phpMyAdmin Project ] 에서 관리합니다 [85] . [86]

CSV 및 SQL에서 데이터를 가져올 수 있으며 이미지 또는 다운로드 링크로 BLOB 데이터를 표시하는 것과 같이 사전 정의 된 기능 세트를 사용하여 저장된 데이터를 모든 형식으로 변환 할 수 있습니다.

SQLBuddy

SQLBuddy 는 웹 브라우저를 사용하여 MySQL 및 SQLite 관리를 처리하기위한 PHP로 작성된 오픈 소스 웹 기반 응용 프로그램입니다. 이 프로젝트는 설치가 쉽고 간단한 사용자 인터페이스에 중점을 둡니다.

SQLyog

SQLyog 는 유료 버전뿐만 아니라 무료로 사용할 수있는 GUI 도구입니다. 데이터 조작 (예 : 삽입, 업데이트 및 삭제)은 스프레드 시트와 같은 인터페이스에서 수행 할 수 있습니다. 편집기의 구문 강조 기능 과 다양한 자동 서식 옵션이 있습니다. 원시 테이블 데이터와 쿼리의 결과 집합을 모두 조작 할 수 있습니다. 데이터 검색 기능은 Google과 유사한 검색 구문을 사용하며 사용자에게 투명하게 SQL로 변환됩니다. 무인 백업을 수행하기위한 백업 도구가 있습니다. 백업은 압축되어 선택적으로 테이블 당 파일로 저장 될 수 있으며 타임 스탬프로 식별됩니다.

Toad for MySQL

Toad for MySQL 은 Dell 소프트웨어의 소프트웨어 응용 프로그램으로, 데이터베이스 개발자, 데이터베이스 관리자 및 데이터 분석가가 SQL을 사용하여 관계형 및 비 관계형 데이터베이스를 모두 관리하는 데 사용됩니다. Toad는 많은 데이터베이스와 환경을 지원합니다. Microsoft Windows Server, Windows XP, Windows Vista, Windows 7 및 8 (32 비트 또는 64 비트)을 포함하여 모든 32 비트 / 64 비트 Windows 플랫폼에서 실행됩니다. Dell 소프트웨어는 Toad Mac Edition도 출시했습니다. Dell은 상용 및 시험판 / 프리웨어 버전으로 Toad를 제공합니다. 프리웨어 버전은 ToadWorld.com 커뮤니티에서 구할 수 있습니다.

Webmin

Webmin 은 Unix 계열 시스템 용 웹 기반 시스템 구성 도구입니다. 최신 버전도 Windows에 설치하여 실행할 수 있습니다. 이를 통해 사용자, 디스크 할당량, 서비스 또는 구성 파일과 같은 운영 체제 내부 구성을 비롯하여 Apache HTTP Server, PHP 또는 MySQL과 같은 오픈 소스 응용 프로그램을 수정하고 제어 할 수 있습니다.

Webmin은 주로 자체 프로세스 및 웹 서버로 실행되는 Perl을 기반으로합니다. 통신을 위해 기본적으로 TCP 포트 10000으로 설정되며, OpenSSL에 추가로 필요한 Perl 모듈이 설치된 경우 SSL을 사용하도록 구성 할 수 있습니다.

구성 파일과 Webmin 서버에 대한 인터페이스가있는 모듈을 중심으로 구성됩니다. 따라서 새로운 기능을 쉽게 추가 할 수 있습니다. Webmin의 모듈 식 설계로 인해 관심있는 모든 사람들이 데스크탑 구성을위한 플러그인을 작성할 수 있습니다.

또한 Webmin은 단일 인터페이스 또는 동일한 서브넷이나 LAN상의 다른 Webmin 호스트에 대한 완벽한 로그인을 통해 많은 시스템을 제어 할 수 있습니다.

명령 행 인터페이스

명령 라인 인터페이스는 사용자가 문제가 텍스트의 연속적인 라인들 (커맨드 라인)를 입력하여, 프로그램에 명령하는 컴퓨터 프로그램과 상호 작용하는 수단이다. MySQL에는 많은 명령 줄 도구가 제공되며,이 도구의 기본 인터페이스는 mysql 클라이언트입니다. [87 ]


MySQL 유틸리티는 공통 유지 보수 및 관리 작업을 수행하도록 설계된 유틸리티 세트입니다. 원래 MySQL Workbench의 일부로 포함 된 유틸리티는 Oracle에서 제공하는 독립 실행 형 다운로드입니다.


Percona Toolkit은 Perl로 개발 된 MySQL을위한 크로스 플랫폼 툴킷입니다 . [89] Percona 툴킷은 복제가 제대로 작동 증명 손상된 데이터를 수정, 반복적 인 작업을 자동화하고, 서버의 속도를하는 데 사용할 수 있습니다. Percona Toolkit은 CentOS 및 Debian 과 같은 여러 Linux 배포판에 포함되어 있으며 패키지는 Fedora 및 Ubuntu 에서도 사용할 수 있습니다. Percona Toolkit은 원래 Maatkit으로 개발되었지만 2011 년 말부터 Maatkit은 더 이상 개발되지 않았습니다.


응용 프로그래밍 인터페이스 


언어 별 API가 있는 많은 프로그래밍 언어 에는 MySQL 데이터베이스에 액세스하기위한 라이브러리 가 포함되어 있습니다. 여기에는 Microsoft의 Visual Studio ( C # 및 VB 와 같은 언어 가 가장 일반적으로 사용되는 언어) 및 Java 용 JDBC 드라이버와의 통합을위한 MySQL Connector / Net가 포함됩니다 . 또한, ODBC의 호출 인터페이스를 MySQL의 커넥터 / ODBC는 같은 MySQL 데이터베이스와 통신 할 ODBC 인터페이스 지원 추가 프로그래밍 언어 수 있습니다 ASP 또는 ColdFusion은 . HTSQL  - URL기반 쿼리 메소드는 MySQL 어댑터와 함께 제공되므로 구조화 된 URL을 통해 MySQL 데이터베이스와 모든 웹 클라이언트간에 직접 상호 작용할 수 있습니다.


프로젝트 포크 


에서 소프트웨어 공학 개발자의 사본을 찍을 때, 프로젝트 포크가 발생 소스 코드를 하나 개 의 소프트웨어 패키지 소프트웨어의 독특하고 별도의 조각을 만들고, 거기에 독립적 인 개발을 시작 - 새로운 (제 3 자) 버전. 이 용어는 개발 지점을 만드는 것 뿐만 아니라 개발자 커뮤니티에서 분열 하는 것을 의미합니다 ( 분열의 한 형태 ). [90] MySQL 포크에는 다음이 포함됩니다 :


현재

MariaDB

MariaDB 는 지역 사회에서 개발 한 MySQL 관계형 데이터베이스 관리 시스템으로, GNU GPL 하에서 무료로 사용할 수 있습니다. 선도적 인 오픈 소스 소프트웨어 시스템을 기반으로하는 오라클의 인수에 대한 우려로 MySQL을 처음으로 개발 한 개발자가이 소프트웨어를 개발 한 것은 주목할만한 특징입니다. [37] 참여자는 자신의 저작권을 MariaDB Foundation과 공유해야합니다. [91] MariaDB는 MySQL과 높은 호환성을 유지하면서 라이브러리 바이너리 동등성 및 MySQL API 및 명령 과의 정확히 일치하는 "드롭 인 (drop-in)"대체 기능을 보장 합니다. [92] MySQL과 MariaDB의 버전 간에는 문서화 된 차이점과 비 호환성이 있습니다. [92]그러나 MySQL Workbench 와 같이 MySQL과 상호 작용하는 일부 도구는 MariaDB와 완벽하게 호환되지 않습니다. [93] 그것은 포함 XtraDB의 교체 스토리지 엔진 이노를 , [94] 뿐만 아니라 새로운 스토리지 엔진 등 아리아 심지어 MySQL의 이후 버전에 포함 된 트랜잭션이 아닌 트랜잭션 엔진 모두가 될 예정. [95]

Percona Server

Percona Server 는 Percona 가 공식 MySQL 릴리스와의 긴밀한 호환성을 유지하면서 서버 운영에 대한 성능과 가시성을 중시하는 것을 목표로 삼고 있습니다. [96] 또한 Percona Server에는 Percona의 InnoDB 스토리지 엔진 포크 인 XtraDB 가 포함되어 있습니다. Percona는 MySQL의 상업용 Enterprise 에디션에서만 사용 가능한 많은 확장 성, 가용성, 보안 및 백업 기능을 자유롭게 포함합니다. [97]

버림받은

이슬비

Drizzle 은 MySQL DBMS의 현재 개발되지 않은 6.0 개발 지점에서 파생 된 무료 소프트웨어 / 오픈 소스 관계형 데이터베이스 관리 시스템 (DBMS)이었습니다. [98] Drizzle은 MySQL과 마찬가지로 클라이언트 / 서버 아키텍처를 사용하고 SQL 을 기본 명령어 언어로 사용 합니다. Drizzle은 GNU General Public License (GPL) 의 버전 2와 3에 BSD 라이센스에 따라 프로토콜 드라이버와 복제 메시징을 포함하여 배포되었습니다.

WebScaleSQL

WebScaleSQL 은 MySQL 5.6의 소프트웨어 계열 이었으며, 2014 년 3 월 27 일 Facebook, Google, LinkedIn 및 Twitter에 의해 발표되었습니다. 이는 대규모 배포와 관련된 새로운 기능으로 MySQL을 확장하기위한 중앙 집중식 개발 구조를 제공하기위한 공동 노력입니다. 서버 팜에서 실행되는 대규모 복제 데이터베이스 구축 따라서 WebScaleSQL은 각 회사가 자체 MySQL 분기를 유지하고 더 많은 개발자를 끌어 들이기 위해 노력한 노력을 중복 제거하는 방향으로 나아갔습니다. 이러한 기업의 노력을 결합하고 다양한 변경 사항과 새로운 기능을 MySQL에 통합함으로써 WebScaleSQL은 대규모 환경에서 MySQL 배포를 지원하는 것을 목표로 삼았습니다. [99 ]이 프로젝트의 소스 코드는 GNU General Public License 버전 2에 따라 사용이 허가되며 GitHub에서 호스팅됩니다 . [101 ]


출처 위키백과

'MySQL' 카테고리의 다른 글

Windows MySQL 버전 확인  (0) 2017.08.31

PHP


PHP 는 주로 웹 개발 용으로 설계된 서버 측 스크립팅 언어 이지만 범용 프로그래밍 언어 로도 사용 됩니다 . 원래 1994 년 에 Rasmus Lerdorf 에 의해 만들어졌으며  PHP 레퍼런스 구현 은 PHP 개발팀에 의해 만들어졌습니다. [5] PHP는 원래 위해 서 개인 홈 페이지 , 하지만 지금의 약자 재귀 적 약어의 하이퍼 텍스트 전 처리기 : PHP . 


PHP 코드는 HTML 또는 HTML5 마크 업 에 포함되거나 다양한 웹 템플리트 시스템 , 웹 컨텐트 관리 시스템 및 웹 프레임 워크 와 함께 사용될 수 있습니다 . PHP 코드는 일반적으로 웹 서버 의 모듈 또는 CGI ( Common Gateway Interface ) 실행 파일 로 구현 된 PHP 인터프리터에 의해 처리됩니다 . 웹 서버 소프트웨어로 생성 된 이미지를 포함하는 데이터의 임의의 타입 일 수있는 해석되고 실행될 PHP 코드의 조합 결과 웹 페이지 . PHP 코드는 명령 행 인터페이스 로 실행될 수도 있습니다.(CLI)이며 독립형 그래픽 응용 프로그램 을 구현하는 데 사용할 수 있습니다 . 


에 의해 구동 표준 PHP 인터프리터, 젠드 엔진 이며, 무료 소프트웨어 언더 발표 PHP 라이센스 . PHP는 널리 포팅되어 거의 모든 운영체제 와 플랫폼 에서 대부분의 웹 서버에 무료 로 배포 할 수 있습니다 . 


PHP 언어 는 정식 PHP 인터프리터를 사실상의 표준 으로 남겨둔 채 2014 년까지 공식 표준 이나 표준 없이 작성 되었습니다 . 2014 년 이래로 공식 PHP 사양을 작성했습니다.


역사


초기의 역사




PHP 3을 구성한 파서 를 다시 작성한 Andi Gutmans ( 중간)와 Zeev Suraski (오른쪽) 와 함께 원래의 Common Gateway Interface (CGI) 구성 요소 를 작성한 Rasmus Lerdorf (왼쪽) .

때 PHP 개발은 1995 년에 시작 라스무스 레르도프 여러 썼다 공용 게이트웨이 인터페이스 C에서 (CGI) 프로그램을, [10] [11] [12] 그의 유지하는 데 사용 개인 홈페이지 . 웹 폼 작업 및 데이터베이스 와의 통신 을 위해 이들을 확장 하고이 구현을 "Personal Home Page / Forms Interpreter"또는 PHP / FI라고했습니다.


PHP / FI는 간단하고 동적 인 웹 애플리케이션 을 구축하는 데 도움이 될 수 있습니다. 버그 보고 를 가속화 하고 코드를 개선하기 위해 Lerdorf는 처음에 유즈넷 토론 그룹 comp.infosystems.www.authoring.cgi 에서 "개인 홈 페이지 도구 (PHP 도구) 버전 1.0"으로 PHP / FI의 릴리스 를 2008 년 6 월 8 일에 발표했습니다. 1995. [13] [14] 이 릴리스에는 PHP가 2013 년에 이미 가지고있는 기본 기능이 있습니다. 여기에는 Perl과 유사한 변수 , 양식 처리 및 HTML을 포함 할 수있는 기능이 포함되었습니다. 구문은 펄의 닮은하지만, 간단하게 더 제한하고 덜 일치했다. [5]


Lerdorf는 초기 PHP가 새로운 프로그래밍 언어가 될 의도는 없었지만, Lerdorf가 회고 적으로 다음과 같이 지적하면서 유기적으로 성장했습니다. "어떻게 멈추는 지 모르지만 프로그래밍 언어를 작성하려는 의도는 전혀 없었습니다. [...] I 프로그래밍 언어를 작성하는 방법을 전혀 모르는 채로, 나는 그 길에 다음 논리적 인 단계를 계속 추가했다. " [15] 개발 팀이 형성되기 시작했으며 , 1997 년 11 월 PHP와 FI 2 공식 발표 와 베타 테스트를 거쳤습니다.


PHP가 원래의 전체적인 디자인이 없었지만 대신 유기적으로 개발됨에 따라 함수의 이름이 일관되지 않고 매개 변수의 순서가 일관되지 않게되었습니다. [16] 어떤 경우에는 함수 이름이 PHP가 "wrapping"하는 하위 라이브러리와 일치하도록 선택 되었지만 [17] PHP의 초기 버전에서는 함수 이름의 길이가 내부적으로 해시 함수 로 사용되었습니다 그래서 해시 값의 분포를 향상시키기 위해 이름이 선택되었습니다. [18]


PHP 3과 4

Zeev Suraski 와 Andi Gutmans 는 1997 년 파서 를 다시 작성하여 PHP 3의 기본을 구성하여 언어 이름을 재귀 적 약어 인 PHP : Hypertext Preprocessor로 변경했습니다 . [5] [19] 이후, PHP 3의 공개 테스트를 시작하고, 수라 스키와 거트 먼스는 다음 새로운 시작 1998 년 공식 출시 6 월에 와서 재 작성 생산, PHP의 코어를 젠드 엔진을 1999 년에 [20] 그들은 또한 설립 젠드 기술 의 라 마트 간 , 이스라엘. [5]


2000 년 5 월 22 일 Zend Engine 1.0에 의해 구동되는 PHP 4가 릴리스되었습니다. [5] 2008 년 8 월 현재이 지점은 버전 4.4.9에 도달했습니다. PHP 4는 더 이상 개발 중이 아니며 보안 업데이트가 릴리스되지 않습니다. [21] [22]


PHP 5

2004 년 7 월 13 일, 새로운 Zend Engine II가 제공하는 PHP 5가 릴리스되었습니다. [5] PHP 5는 향상된 지원과 같은 새로운 기능을 포함 객체 지향 프로그래밍 (데이터베이스에 액세스하기위한 경량의 일관된 인터페이스를 정의)에 PHP 데이터 객체 (PDO) 확장 및 다양한 성능 향상. [23] 2008 년 PHP 5가 개발중인 유일한 안정 버전이되었습니다. PHP에서 후기 정적 바인딩 이 누락되어 버전 5.3에 추가되었습니다. [24] [25]


많은 오픈 소스 프로젝트에 때문에 GoPHP5 이니셔티브의 월 (5), 2008 년 새로운 코드에서 PHP 4를 지원하기 위해 정지, [26] PHP 5로 PHP 4의 전환을 촉진 PHP 개발자의 컨소시엄에 의해 제공 [ 27] [28]


시간이 지남에 따라 PHP 인터프리터는 PHP 소스 코드에서 빌드하거나 미리 빌드 된 바이너리를 사용하여 대부분의 기존 32 비트 및 64 비트 운영 체제에서 사용할 수있게되었습니다. [29] 는 PHP 버전 5.3 및 5.4의 경우, 사용할 수있는 유일한 마이크로 소프트 윈도우 바이너리 배포판했다 32 비트 의 x86이 빌드 [30] [31] 사용하는 동안 Windows 32 비트 호환 모드를 요구하는 인터넷 정보 서비스 64-에 (IIS)를 bit Windows 플랫폼. PHP 버전 5.5는 Microsoft Windows 에서 64 비트 x86-64 빌드를 사용할 수있게했습니다. [32]


PHP 6 및 유니 코드

PHP는 핵심 언어 수준의 유니 코드 지원 이 부족 하여 바이트 문자열 만 지원 하기 때문에 비판을 받았습니다 . 2005 년 Andrei Zmievski가 이끄는 프로젝트는 ICU ( International Components for Unicode ) 라이브러리를 내장하고 텍스트 문자열을 UTF-16으로 내부적 으로 표현 함으로써 PHP 전체에 유니 코드 지원을 제공하기 시작했습니다 . [33] 이 사용자 코드 언어의 내부와에 모두 큰 변화를 일으킬 것입니다 때문에, 다음 개발에 주요 기능과 함께 언어의 버전 6.0로이를 출시 할 계획되었다. [34]


그러나 웹 컨텍스트에서 거의 사용되지 않는 UTF-16과의 변환으로 인해 필요한 변경 사항과 성능 문제를 이해하는 개발자 부족으로 인해 프로젝트가 지연되었습니다. [35] 결과적으로, PHP 5.3 릴리즈가 2009 년에 만들어졌으며 많은 비 유니 코드 기능이 PHP 6, 특히 네임 스페이스에서 백 포트되었습니다. 2010 년 3 월에는 현재의 형태로 진행된 프로젝트가 공식적으로 포기되었으며, PHP 5.4의 특징 중 PHP 6의 나머지 유니 코드가 아닌 기능 (예 : 형질 및 클로저 재 바인딩)이 포함되어 준비되었습니다. [36] 초기 희망은 새로운 계획이 유니 코드 통합을 위해 형성 될 것이지만, 2014 년까지 채택 된 계획은 없었습니다.


PHP 7

2014 년과 2015 년 동안 새로운 주요 PHP 버전이 개발되었으며 PHP 7로 번호가 매겨졌습니다.이 버전의 번호 매기기에는 몇 가지 논쟁이있었습니다. [37] PHP 6 유니 코드 실험은 한번도 공개되지 않았지만 몇 가지 기사와 서적 제목이 PHP 6 이름을 참조했습니다. 새 릴리스에서 이름을 다시 사용하게되면 혼란을 야기 할 수 있습니다. [38] 투표 후에 PHP 7이라는 이름이 선택되었습니다. [39]


PHP 7의 기초 는 원래 PHP 차세대 ( phpng ) 라고 불리는 PHP 지사 입니다 . Dmitry Stogov, Xinchen Hui 및 Nikita Popov [40] 가 작성했으며 Zend Engine을 리팩터링하여 PHP 성능을 최적화하여 거의 완벽한 언어 호환성을 유지하면서 캐시 지역 이 개선 된 보다 소형 데이터 구조 를 사용하도록했습니다 . [41] 2014 년 7 월 14로서 , 워드phpng 프로젝트의 주요 벤치 마크 슈트였던 기반 벤치 마크는 거의 100 % 성능 향상을 보였습니다. phpng의 변경 사항은 JIT (Just -In- Time) 컴파일러 로의 성공적인 마이그레이션에 더 적합한보다 소형 데이터 구조 및 기타 변경 사항이 나타나기 때문에 향후 성능을 향상시키는 것이 더 쉬워 질 것으로 예상됩니다 . [42] 중대한 변화 때문에 재 작업 된 Zend Engine은 PHP 5에서 사용 된 Zend Engine 2를 이어 받은 Zend Engine 3 이라고합니다 .


phpng의 내부적 인 주요 변경으로 인해, PHP의 릴리스 프로세스에 따르면, PHP 5의 마이너 버전 보다는 새로운 주요 버전 의 PHP를 받아야합니다 . [44] PHP의 메이저 버전의 넓은 사용을 포함하는 후방 호환성을 바꿈 필요 phpng 이후 다른 개선의 기회를 제공 PHP 7 때문에 코드의 역방향 호환성을 나눌 수있는 예외를 , [45] [46] 변수 구문을 재가공 보다 일관되고 완벽 해지며, [47] 다양한 레거시 기능의 사용이 중단되거나 제거됩니다. [48] [49]


PHP 7도 기능에 대한 반환 유형 선언을 포함하여, 새로운 언어 기능을 도입, [50] 매개 변수의 스칼라 유형 (정수, 부동 소수점, 문자열 및 부울)에 대한 기존 매개 변수 유형 선언 및 지원을 보완하고 유형 선언을 반환한다. [51]


출시 이력 


색깔의미개발
빨간이전 버전개발 없음
노랑안정적 출시보안 수정
녹색안정적 출시버그 및 보안 픽스
푸른미래 출시새로운 기능
번역출시일~까지 지원 [52]노트
1.01995 년 6 월 8 일공식적으로 "개인 홈 페이지 도구 (PHP 도구)"라고합니다. 이것은 "PHP"라는 이름의 첫 번째 사용입니다. [5]
2.01997 년 11 월 1 일공식적으로 "PHP / FI 2.0"이라고합니다. 이것은 실제로 PHP로 특성화 될 수있는 첫 번째 릴리스이며, 현재까지 견디는 많은 기능을 갖춘 독립형 언어입니다.
3.01998 년 6 월 6 일2000 년 10 월 20 일 [52]개발은 한 사람에서 여러 개발자로 이동합니다. Zeev Suraski와 Andi Gutmans가이 버전의 기본을 다시 작성합니다. [5]
4.02000 년 5 월 22 일2001 년 6 월 23 일 [52]Zend 엔진이라고하는 고급 2 단계 구문 분석 / 실행 태그 구문 분석 시스템이 추가되었습니다. [53]
4.12001 년 12 월 10 일2002 년 3 월 12 일 [52]도입 된 "슈퍼 전역"( $_GET$_POST$_SESSION등) [53]
4.22002 년 4 월 22 일2002 년 9 월 6 일 [52]register_globals기본적으로 비활성화 되어 있습니다. 네트워크를 통해받은 데이터는 더 이상 전역 네임 스페이스에 직접 삽입되지 않으므로 응용 프로그램의 보안 허점을 막을 수 있습니다. [53]
4.32002 년 12 월 27 일2005 년 3 월 31 일 [52]CGI를 보완하기 위해 CLI (Command -Line Interface)를 도입했습니다 . [53 ]
4.42005 년 7 월 11 일2008 년 8 월 7 일 [52]PHP 버전 4.3.x에 대해 컴파일 된 확장 기능과의 이진 호환성을 깨뜨리는 메모리 손상 버그가 수정되었습니다. [55]
5.02004 년 7 월 13 일2005 년 9 월 5 일 [52]Zend Engine II에 새로운 객체 모델이 추가되었습니다. [56]
5.12005 년 11 월 24 일2006 년 8 월 24 일 [52]재 설계된 PHP 엔진에서 컴파일러 변수를 도입하여 성능이 향상되었습니다. [56] PHP 데이터 객체 (PDO)를 데이터베이스에 액세스하기위한 일관된 인터페이스로 추가했습니다. [57]
5.22006 년 11 월 2 일2011 년 1 월 6 일 [52]기본적으로 필터 확장을 사용합니다. 기본 JSON 지원. [56]
5.32009 년 6 월 30 일2014 년 8 월 14 일 [52]네임 스페이스 지원; 늦게 정적 바인딩 , 라벨 (제한 점프 고토 ), 폐쇄 , PHP 아카이브 (의 Phar) , 가비지 컬렉션을 순환 참조에 대한 개선 윈도우 작업 확장을위한 기본 라이브러리로 libmysql을 대체 등의 지원, sqlite3를, mysqlnd MySQL을 로에서는 FileInfo를, 향상된 MIME 지원, 국제화 확장 및 ereg 확장의 사용 중단을 위해 mime_magic을 대체했습니다 .
5.42012 년 3 월 1 일2015 년 9 월 3 일 [52]특성 지원, 짧은 배열 구문 지원. 삭제 된 항목 : register_globalssafe_modeallow_call_time_pass_reference, , 와 . 내장 웹 서버. [58] 기존 기능, 성능 및 메모리 요구 사항 감소에 대한 몇 가지 개선 사항.session_register()session_unregister()session_is_registered()
5.52013 년 6 월 20 일2016 년 7 월 21 일 [52]예외 처리를 위한 생성기 , finally블록, 공식 배포판에 번들 된 OpCache (Zend Optimizer + 기반) 지원. [59]
5.62014 년 8 월 28 일2018 년 12 월 31 일 [60]상수 스칼라 표현식, variadic 함수 , 인수 unpacking, 새로운 지수 연산자, 함수 및 상수에 대한 use 문의 확장 , SAPI 모듈로서의 새로운 phpdbg 디버거 및 기타 작은 개선. [61]
6.x공개되지 않음N / A네이티브 유니 코드 지원을 포함 할 예정인 버려진 PHP 버전. [62 ]
7.02015 년 12 월 3 일 [2]2018 년 12 월 3 일 [60]젠드 엔진 3 (성능 향상 [42] 및 Windows 64 비트 정수 지원 [64] ), 균일 변수 구문 [47] AST 기반 편집 방법은, [65]를 첨가하여 , [66] 비트 플랫폼 일관성 시프트 [ 67] ( null coalesce ) 연산자, [68] 유니 코드 코드 포인트 이스케이프 시퀀스 , 69 반환 유형 선언, 50 스칼라 유형 (정수, 부동, 문자열 및 부울) 선언, [51] "우주선" 3 방향 비교 연산자 , [70] 발전기Closure::call() ??<=> 대표단 [71] 익명 클래스 , [72] 간단하고 지속적으로 사용할 수 CSPRNG의 API, [73] 더 현대적인 많은 나머지 내부 PHP "오류"대체 예외 , [45] 네임 스페이스에서 여러 항목을 가져 오기 및 약식 구문 . [74]
7.12016 년 12 월 1 일 [75] [76]2019 년 12 월 1 일 [60]무효 반환 유형 , [77] 클래스 상수 가시성 수정 자 , [78] Nullable 유형 , [79] iterable 의사 유형, [80] 여러 예외 유형 catch. [81]
7.22017 년 11 월 30 일 [82]2020 년 11 월 30 일 [60]


2011 년 6 월 28 일부터 PHP 그룹은 PHP의 새 버전 출시 일정을 수립했습니다. [44] 이 시스템 하에서 매달 최소한 하나의 석방이 이루어져야한다. 1 년에 한 번, 새로운 기능이 포함될 수있는 사소한 릴리스가 발생해야합니다. 모든 마이너 릴리스는 최소한 보안 및 버그 수정을 포함하여 2 년 동안 지원되어야하며, 적어도 1 년의 보안 수정만으로 모든 마이너 릴리스에 대해 총 3 년의 릴리스 프로세스가 이루어져야합니다. 작고 독립적 인 기능을 제외하고는 새로운 기능을 3 년 동안 출시 할 때 사소한 내용으로 소개하지 않습니다.


구문


다음 "Hello, World!" 프로그램 은 HTML 문서에 삽입 된 PHP 코드로 작성됩니다 .


<! DOCTYPE HTML> 
< HTML > 
    < 머리 > 
        < 제목 > PHP 테스트 </ 제목 > 
    </ 머리 > 
    < > 
<? PHP는 에코 '<p> 안녕하세요 </ P>' ; ?> </ body > </ html >           
    
그러나 PHP 코드가 HTML에 포함될 필요가 없으므로 Hello, World! 의 가장 간단한 버전입니다 . 순수한 PHP 코드 [85]가 들어있는 파일에서 닫는 태그를 생략 한 상태에서 이와 같이 작성할 수 있습니다 .

<? = "Hello, world" ;

PHP 인터프리터는 구분 기호 내에서만 PHP 코드를 실행 합니다. PHP 코드 가 아닌 텍스트는 여전히 PHP 코드에서 설명 하는 제어 구조의 대상이되지만 구분 기호를 벗어난 항목은 PHP에서 처리하지 않습니다 . 가장 일반적인 구분 기호는 <? php open and ?> PHP 섹션을 닫는 것입니다. 단축 된 형식 <? 또한 존재합니다. 이 짧은 구분자 (delimiter)는 스크립트 파일을 로컬 PHP 구성에서 비활성화 할 수 있으므로 스크립트 파일의 이식성을 떨어 뜨리기 때문에 사용하지 않는 것이 좋습니다. [86] [87] 그러나, 에코 짧은 태그 <? = 의 사용에 대한 추천은 없습니다 . [5.4] PHP 5.4.0 이전 버전에서는echo () 는 short_open_tag 구성 설정을 사용 하는 경우에만 작동하며 PHP 5.4.0 이상에서는 항상 사용할 수 있습니다. [86] [89] [90] 모든 분리의 목적은 비 PHP 콘텐츠로부터 PHP 코드 분리하는 자바 스크립트 코드 또는 HTML 마크 업. [91]


XHTML 및 기타 XML 문서 에서 구분 기호의 첫 번째 형식 인 <? php 및 ?> 은 올바르게 구성된 XML 처리 명령을 작성합니다. [92] 이것은 결과적으로 PHP 코드와 서버 측 파일에있는 다른 마크 업의 혼합이 그 자체로 잘 구성된 XML임을 의미합니다.


변수는 앞에 붙 달러 기호 및 유형은 사전에 지정할 필요가 없습니다. PHP 5 에서는 함수가 매개 변수를 특정 클래스, 배열, 인터페이스 또는 콜백 함수의 객체로 만들 수있는 유형 힌팅 을 도입했습니다 . 그러나 PHP 7.0 이전에는 정수 또는 문자열과 같은 스칼라 유형과 함께 유형 힌트를 사용할 수 없었습니다. [51]


함수 및 클래스 이름과 달리 변수 이름은 대소 문자를 구분합니다. 큰 따옴표 ( "")와 heredoc 문자열은 변수의 값을 문자열에 보간하는 기능을 제공합니다. [93] PHP가 취급 개행 으로 공백 (A)의 방법으로 자유 형식 언어 및 문장들은 세미콜론으로 종료된다. [94] PHP에는 세 가지 유형의 주석 구문이 있습니다 : /* */마크 블록과 인라인 주석; //뿐만 아니라 #한 줄 주석으로 사용됩니다. [95]echo 문은 PHP가 출력 텍스트로 제공하는 여러 시설 중 하나입니다 예를 들어, 웹 브라우저,.


키워드와 언어 구문의 관점에서 PHP는 C 스타일 구문과 유사합니다. 경우 조건 에 대한 그리고 동안 루프, 함수 반환은 C, C ++, C #을, Java 및 Perl과 같은 언어에 대한 구문과 유사하다.


다음은 PHP for 루프의 예입니다.


<? php  
for  ( $ x  =  0 ;  $ x  <=  100 ;  $ x ++ )  { 
    echo  "숫자는 $ x <br>" ; 
}  
?>


데이터 유형 


PHP는 정수를 C 언어 long 타입 과 동일한 64 비트 또는 32 비트 부호있는 정수 로 플랫폼 종속 범위에 저장 합니다 . 특정 상황에서는 부호없는 정수가 부호있는 값으로 변환됩니다. 이 동작은 다른 프로그래밍 언어의 동작과 다릅니다. [96] 정수 변수는 10 진수 (양수 및 음수), 8 진수 , 16 진수 및 2 진수 표기법을 사용하여 할당 할 수 있습니다 .

부동 소수점 숫자는 플랫폼 별 범위에도 저장됩니다. 부동 소수점 표기법이나 두 가지 형식의 과학 표기법을 사용하여 지정할 수 있습니다 . [97] PHP 네이티브 갖는 부울 네이티브 부울 타입과 유사한 유형 자바 및 C ++를 . 부울 유형 변환 규칙을 사용하면 Perl 및 C ++ 에서 와 같이 0이 아닌 값은 true로 해석되고 0은 false로 해석됩니다 . [97]

null 데이터 유형은 값이없는 변수를 나타냅니다. NULL이 데이터 형식에 대해 유일하게 허용되는 값입니다. [97]

"자원"유형의 변수는 외부 소스의 자원에 대한 참조를 나타냅니다. 이들은 일반적으로 특정 확장 기능의 함수에 의해 생성되며 동일한 확장자의 함수로만 처리 할 수 ​​있습니다. 예에는 파일, 이미지 및 데이터베이스 자원이 포함됩니다. [97]

배열은 PHP가 처리 할 수있는 모든 유형의 요소 (예 : 자원, 객체 및 기타 배열)를 포함 할 수 있습니다. 순서는 값 목록과 키와 값 모두가 있는 해시에 보존되며 두 항목은 혼합 될 수 있습니다. [97] PHP도 지원 문자열 따옴표 따옴표, nowdoc 또는 함께 사용할 수 히어 닥 구. [98]

표준 PHP 라이브러리 (SPL)는 표준 문제를 해결하려고 시도하고 효율적인 데이터 액세스 인터페이스와 클래스를 구현합니다. [99]

함수
PHP는 핵심 언어로 많은 함수를 정의하고 있으며 많은 함수가 다양한 확장 기능으로 제공됩니다. 이 함수들은 온라인 PHP 문서에 잘 설명되어 있습니다. [100] 에서 설명하지만, 내장 된 라이브러리는, 명명 규칙과 연관된 불일치 다양한 갖는다 이력 상술.

사용자 정의 함수는 개발자가 정의 할 수 있습니다 (예 :

function  myAge ( $ birthYear )  {                                   // 함수를 정의합니다.이 이름은 "myAge"입니다. 
    $ yearsOld  =  date ( 'Y' )  -  $ birthYear ;                        // 연령 
    반환  $ yearsOld를  계산합니다 .  '년'  .  ( $ yearsOld  ! =  1  ?  ''  :  '' );  // 설명적인 형식으로 나이를 반환합니다. 
}

에코  '나는 현재'  입니다.  myAge ( 1981 )  .  ' 늙은.' ;                // 
                                                              myAge ()의 반환 값으로 
연결된 텍스트를 // 출력합니다. // 이 구문의 결과로 myAge ()가 호출됩니다.

2017 년에 위의 샘플 프로그램의 결과물은 '저는 현재 36 세입니다.'


함수 포인터 대신 PHP의 함수는 이름이 들어있는 문자열로 참조 할 수 있습니다. 이런 식으로 일반적인 PHP 함수를 콜백 이나 함수 테이블 과 같이 사용할 수 있습니다 . [101] 사용자 정의 함수는 프로토 타이핑을 하지 않고 언제든지 만들 수 있습니다 . [100] [101] 함수는 허가 코드 블록 내에 정의 할 수 런타임 결정 함수가 정의되어야하는지 여부에있다. 가 function_exists소정의 이름을 가진 함수는 이미 정의되어 있는지 여부를 판단 기능. 함수 호출은 인자가없는 클래스 생성자를 제외하고 괄호를 사용해야합니다.PHP 연산자 new로 호출되는 함수 .이 경우 괄호는 선택 사항입니다.


PHP 5.3까지 익명 함수 및 클로저에 대한 지원 은 PHP에 존재하지 않았습니다. create_function()PHP 4.0.1부터 존재 하지만 , eval()프로그램 실행 중에 일반적인 PHP 함수를 만들 수 있는 단순한 랩퍼 일뿐 입니다. [102] PHP 5.3 익명 함수 또는 "폐쇄"를 정의하는 신택스를 추가 [103] 주변 영역의 변수를 캡처 할 수 :

함수  getAdder ( $ x )  { 
    return  함수 ( $ y )  사용  ( $ x )  { 
        return  $ x  +  $ y ; 
    }; 
}

$ adder  =  getAdder ( 8 ); 
echo  $ adder ( 2 );  // "10"을 인쇄합니다.

위의 예제에서 getAdder()함수는 전달 된 인수 $x(키워드 use가 어휘 컨텍스트에서 변수를 가져옴) $y를 사용하여 클로저를 작성합니다.이 인수는 추가 인수 를 사용하여 작성된 클로저를 호출자에게 리턴합니다. 이러한 함수는 first-class 객체로서, 변수에 저장되거나 다른 함수에 매개 변수로 전달 될 수 있습니다 .


동적으로 타입이 지정되는 언어의 경우, PHP는 런타임에 적용되는 함수 매개 변수에 대한 유형 선언을 지원합니다. 이것은 PHP 5.0 이후부터, PHP 5.4 이후의 "callables" , PHP 7.0 이후의 스칼라 (정수, 부동, 문자열 및 부울) 유형에 대한 PHP 5.1 이후의 클래스 및 인터페이스에 대해 지원되었습니다 . [51] PHP 7.0은 또한 매개 변수 목록 다음에 콜론이 오는 유형 이름을 삽입하여 표현 된 함수 리턴 유형에 대한 유형 선언을 가지고 있습니다. [50] 예를 들어, getAdder이전의 예에서 함수이므로 PHP 7과 같은 종류로 주석 될 수있다 :


함수  getAdder ( int  $ x ) :  \ Closure  { 
    return  function ( int  $ y )  use  ( $ x )  :  int  { 
        return  $ x  +  $ y ; 
    }; 
}

$ adder  =  getAdder ( 8 ); 
echo  $ adder ( 2 );         // "10"을 
출력합니다. echo  $ adder ( null );      잘못된 유형이 전달 되었기 때문에 예외를 throw합니다. 
$ adder  =  getAdder ([]);  // 또한 예외를 throw합니다.

기본적으로 스칼라 유형 선언은 약한 타이핑 원칙을 따릅니다. 예를 들어, 매개 변수의 유형이 intPHP 인 경우 정수뿐만 아니라 변환 가능한 숫자 문자열, 부동 소수점 또는 부울을 해당 함수에 전달할 수 있으며 변환 할 수 있습니다. [51] 그러나 PHP 7은 "strict typing"모드를 사용합니다.이 모드는 함수 호출시 이러한 변환을 허용하지 않고 파일 내에서 반환합니다. [51]


객체 지향 프로그래밍

기본 객체 지향 프로그래밍 기능은 PHP 3에서 추가되었으며 PHP 4에서 향상되었습니다. [5] 이것은 PHP가 언어를 사용하는 프로그래머가 창의적인 작업을 쉽게 수행 할 수 있도록 더 많은 추상화를 가능하게합니다. PHP 5에서는 객체 처리가 완전히 다시 작성되어 기능 집합이 확장되고 성능이 향상되었습니다. [105] PHP 이전 버전은 오브젝트가 같이 처리 한 치형 . [105] 이 방법의 단점은 코드가 PHP의 복사본을 만드는 것이 아니라 전달 된 객체를 수정하려는 경우 PHP의 "참조"변수를 많이 사용해야한다는 것입니다. 새로운 접근법에서 객체는 값이 아닌 핸들 에 의해 참조됩니다 .


PHP 5는 추상 클래스 , 최종 클래스 , 추상 메소드 및 최종 메소드 와 함께 private 및 protected 멤버 변수 및 메소드를 도입했습니다 . 또한 C ++ 와 같은 다른 객체 지향 언어 및 표준 예외 처리 모델 과 유사한 생성자 및 소멸자 를 선언하는 표준 방법을 소개했습니다 . 또한 PHP 5는 인터페이스를 추가 하고 여러 인터페이스를 구현할 수있었습니다. 객체가 런타임 시스템과 상호 작용할 수있게 해주는 특별한 인터페이스가 있습니다. ArrayAccess를 구현하는 객체 는 다음과 함께 사용할 수 있습니다.Iterator 또는 IteratorAggregate를 구현하는 배열 구문 및 객체를 foreach 언어 구문 과 함께 사용할 수 있습니다 . 아무 없다 가상 테이블 엔진의 특징은, 그래서 정적 변수는 이름 대신 컴파일시에 참조 바인딩됩니다. [106]


개발자가 예약어를 사용하여 객체의 사본을 생성 clone하면 Zend 엔진은 __clone()메소드가 정의 되었는지 여부를 확인합니다 . 그렇지 않은 경우 __clone()객체의 속성을 복사 하는 기본값 을 호출 합니다. __clone()메소드가 정의 된 경우 , 작성된 오브젝트에서 필요한 특성을 설정하는 책임이 있습니다. 편의상 엔진은 소스 객체의 속성을 가져 오는 함수를 제공하므로 프로그래머는 원본 객체의 값순 복제본 으로 시작하고 변경할 필요가있는 속성 만 재정의 할 수 있습니다. [107]


다음은 PHP에서 의 객체 지향 프로그래밍 의 기본 예제입니다 .


class  Person 
{ 
    public  $ firstName ; 
    public  $ lastName ;

    공용  함수  __construct ( $ firstName ,  $ lastName  =  '' )  {  // 선택적인 두 번째 인수 
        $ this -> firstName  =  $ firstName ; 
        $ this- > lastName   =  $ lastName ; 
    }

    public  function  greet ()  { 
        return  '안녕하세요, 제 이름은'  입니다.  $ this -> firstName  . 
               (( $ this- > lastName  ! =  '' )  ?  ( ''  .  $ this- > lastName )  :  '' )  .  '.' ; 
    }

    public  static  function  staticGreet ( $ firstName ,  $ lastName )  { 
        return  '안녕하세요, 제 이름은'  입니다.  $ firstName  .  ''  .  $ lastName  .  '.' ; 
    } 
}

$ he     =  새로운  사람 ( 'John' ,  'Smith' ); 
$ she    =  new  Person ( '샐리' ,  '데이비스' ); 
$ other  =  new  Person ( 'iAmine' );

echo  $ he -> greet ();  // "여보세요, 제 이름은 존 스미스입니다." 
echo  '<br />' ;

echo  $ she -> greet ();  // "여보세요, 제 이름은 샐리 데이비스입니다." 
echo  '<br />' ;

echo  $ other -> greet ();  // "Hello, my name is iAmine"을 출력합니다. 
echo  '<br />' ;

echo  Person :: staticGreet ( 'Jane' ,  'Doe' );  // "여보세요, 제 이름은 Jane Doe입니다."


가시성 PHP의 속성 및 메서드는 사용하여 정의 키워드를 public , private하고 protected. var 만 사용되는 경우 기본값은 public 입니다. var에 대한 동의어입니다 public. 선언 된 항목은 public어디에서나 액세스 할 수 있습니다. 상속 된 클래스 (및 항목을 정의하는 클래스)에 protected대한 액세스를 제한합니다 . 항목을 정의하는 클래스에만 가시성을 제한합니다. [108] 동일한 유형의 객체가 같은 인스턴스가 아닌 경우에도 서로의 개인 보호 멤버에 액세스 할 수 있습니다. PHP의 멤버 가시성 기능은 "매우 유용합니다."라고 때때로 기술되었습니다. [109]private그러나 때로는 "부적절하고 최악의 경우에는 긍정적 인 해로움"이라고 묘사되기도합니다. [110]


구현


독창적이고 완벽하고 광범위하게 사용되는 PHP 구현은 젠드 엔진에 의해 구동되며 단순히 PHP로만 알려져 있습니다. 다른 구현체와의 모순을 없애기 위해 비공식적으로 "Zend PHP"라고합니다. Zend Engine은 PHP 소스 코드 를 실행 가능한 내부 형식으로 컴파일 하므로 인터프리터 로 작동합니다 . [111] [112] 이것은 PHP의 "레퍼런스 구현"이기도합니다. PHP는 정식 명세가 없기 때문에 젠드 PHP의 의미는 PHP 자체의 의미를 정의합니다. 젠드 (Zend)의 작동 방식에 의해 정의 된 PHP의 복잡하고 미묘한 의미론 때문에, 경쟁하는 구현체가 완전한 호환성을 제공하기가 어렵습니다.


PHP의 스크립트 당 단일 요청 실행 모델과 Zend Engine이 인터프리터라는 사실은 비효율적입니다. 결과적으로 PHP 성능을 향상시키는 데 도움이되는 다양한 제품이 개발되었습니다. 사용하여 PHP 소스 코드를 웹 페이지, PHP 스크립트는 또한 PHP 엔진의 내부 형식으로 배포 할 수 있습니다 액세스 할 때마다 컴파일해야 실행 시간을 단축하지하기 위해 연산 코드 에 의해 작동 캐시, 캐시 의 컴파일 된 양식을 스크립트가 실행될 때마다 코드 를 파싱 하고 컴파일 하는 오버 헤드를 피하기 위해 공유 메모리 에 있는 PHP 스크립트 (opcode) . Opcode 캐시 Zend Opcache 는 버전 5.5부터 PHP에 내장되어 있습니다. [113]널리 사용되는 opcode 캐시의 또 다른 예 는 PECL 확장으로 사용할 수 있는 대체 PHP 캐시 (APC) 입니다. [114]


Zend PHP가 여전히 가장 보편적 인 구현이지만 다른 여러 구현이 개발되었습니다. 이들 중 일부는 컴파일러 이거나 JIT 컴파일을 지원 하므로 완전한 PHP 호환성이 없더라도 Zend PHP보다 성능 이점을 제공합니다. 대체 구현에는 다음이 포함됩니다.


힙합 가상 머신 (HHVM) - 페이스 북에서 개발되고 오픈 소스로 사용 가능하며, PHP 코드를 상위 바이트 코드 (일반적으로 중간 언어로 알려져 있음 )로 변환 한 다음 런타임시 동적으로 x86-64 기계 코드로 변환합니다. JIT ( just-in-time ) 컴파일러를 사용하여 최대 6 배의 성능 개선 효과를 얻을 수 있습니다. [115]

Parrot  - 동적 언어를 효율적으로 실행하도록 설계된 가상 시스템입니다. Pipp은 PHP 소스 코드를 Parrot 중간 표현으로 변환 한 다음 Parrot의 바이트 코드로 변환하고 가상 시스템에서 실행합니다.

Phalanger  - PHP를 CIL ( Common Intermediate Language ) 바이트 코드로 컴파일

HipHop  - Facebook에서 개발되고 오픈 소스로 사용 가능하며, PHP 스크립트를 C ++ 코드 로 변환 한 다음 결과 코드를 컴파일하여 서버로드를 최대 50 %까지 줄입니다. 2013 년 초, Facebook은 배포의 어려움과 create_function () 및 eval () 구문을 비롯한 전체 PHP 언어에 대한 지원 부족을 비롯하여 여러 가지 이유로 인해 HHVM을 선호했습니다 . [116]


라이센스 


PHP는 다음과 같은 PHP 라이센스에 따라 배포되는 자유 소프트웨어 입니다. [117]


이 소프트웨어에서 파생 된 제품은 group@php.net의 사전 서면 승인 없이는 "PHP"라고 할 수 없으며 이름에 "PHP"를 사용할 수 없습니다. 귀하의 소프트웨어가 "PHP Foo"또는 "phpfoo"가 아닌 " Foo for PHP" 라고 말하면 PHP와 연계하여 작동 함을 나타낼 수 있습니다 .


"PHP"사용에 대한이 제한은 PHP 라이센스를 GPL ( General Public License) 과 호환하지 못하게 만드는 반면, 젠드 라이센스는 원본 BSD 라이센스 와 유사한 광고 조항으로 인해 호환되지 않습니다 . [118]


개발과 커뮤니티 


PHP는 소스 배포판에 다양한 무료 및 오픈 소스 라이브러리 를 포함하거나 PHP 바이너리 빌드 결과로 사용합니다. PHP는 근본적으로 FTP ( File Transfer Protocol ) 서버와 PostgreSQL , MySQL , Microsoft SQL Server 및 SQLite (임베디드 데이터베이스), LDAP 서버 등을 비롯한 많은 데이터베이스 서버 에 액세스하기위한 모듈이 내장 된 인터넷 기반 시스템입니다. . stdio 계열 과 같은 C 프로그래머에게 익숙한 수많은 함수 는 표준 PHP 빌드에서 사용할 수 있습니다. [119]


PHP는 개발자가 쓸 수있는 확장 에서 C를 PHP 언어에 기능을 추가 할 수 있습니다. PHP 확장은 PHP로 정적으로 컴파일되거나 런타임에 동적으로로드 될 수 있습니다. Windows API , Unix 계열 운영 체제의 프로세스 관리 , 멀티 바이트 문자열 ( Unicode ), cURL 및 여러 가지 널리 사용되는 압축 형식에 대한 지원을 추가하기 위해 수많은 확장이 작성되었습니다 . 확장을 통해 제공되는 다른 PHP 기능으로는 IRC 와의 통합 , 이미지 및 Adobe Flash 컨텐츠 의 동적 생성 , PHP Data Objects데이터베이스에 액세스하기 위해 사용되는 추상 계층 (PDO), [120] [121] [122] [123] [124] [125] [126] , 심지어 음성 합성 . 문자열과 배열을 다루는 것과 같은 언어의 핵심 기능 중 일부는 확장 기능으로도 구현됩니다. [127] PHP 확장 커뮤니티 도서관 (PECL) 프로젝트는 PHP 언어의 확장을위한 저장소입니다. [128]


제퍼 (Zephir )와 같은 일부 프로젝트 는 PHP 확장을 고급 언어로 작성하고 기본 PHP 확장으로 컴파일 할 수있는 기능을 제공합니다. C에서 PHP 확장을 직접 작성하는 대신 이러한 접근 방식은 확장 개발을 단순화하고 프로그래밍 및 테스트에 필요한 시간을 단축합니다. [129]


PHP의 그룹 (2015 십명 구성 :) 티에스 C 안츤 , 스티그 바켄 , 셰인 카라베오 , 앤디 굿먼스 , 라스무스 러 도프 , 샘 루비 , 사스카 슈만 , 지브 수라스키 , 짐 윈스테드 , 안드레이 즈미에비스키 . [130]


Zend Technologies 는 프로그래머가 공인 PHP 개발자가 될 수 있도록 PHP 5.5 [131] 시험을 기반으로 PHP 인증을 제공합니다 .


설치 및 구성


PHP에 대한 지원을 웹 서버에 추가하는 데는 네이티브 웹 서버 모듈 또는 CGI 실행 파일의 두 가지 주요 방법이 있습니다. PHP에는 Apache HTTP Server , Microsoft IIS , Netscape (현재 제공되지 않음) 및 iPlanet을 포함한 많은 웹 서버에서 지원되는 SAPI ( Server Application Programming Interface) 라는 직접 모듈 인터페이스 가 있습니다. OmniHTTPd와 같은 일부 다른 웹 서버 는 Microsoft 의 웹 서버 모듈 인터페이스 인 ISAPI ( Internet Server Application Programming Interface)를 지원합니다 . PHP에 웹 서버에 대한 모듈 지원이 없다면, CGI ( Common Gateway Interface ) 또는 FastCGI프로세서; 이 경우 웹 서버는 PHP의 CGI 실행 파일을 사용하여 PHP 파일에 대한 모든 요청을 처리하도록 구성됩니다. [132]


PHP-FPM (FastCGI 프로세스 관리자)은 5.3.3 버전 이후 공식 PHP 배포판에 번들로 제공되는 PHP 용 대안 FastCGI 구현입니다. [133] 이전 FastCGI 구현과 비교할 때, 여기에는 몇 가지 추가 기능이 포함되어 있으며 대부분로드가 많은 웹 서버에 유용합니다. [134]


명령 줄 스크립팅을 위해 PHP를 사용하는 경우 PHP 명령 줄 인터페이스 (CLI) 실행 파일이 필요합니다. PHP는 PHP 4.3.0부터 CLI SAPI를 지원합니다. [135] 이 SAPI의 주요 초점은 PHP를 사용하여 셸 응용 프로그램을 개발 하는 것입니다. CLI SAPI와 다른 SAPI 간에는 많은 차이점이 있지만 동일한 동작을 많이 공유합니다. [136]


PHP는 다른 웹 서버에 SAPI라는 직접 모듈 인터페이스를 가지고 있습니다. [137] 윈도우에 PHP 5 아파치 2.0의 경우에는,이 (A)의 형태로 제공되어 DLL을 호출 파일 php5apache2.dll , [138] , 다른 기능 중에서, PHP와 웹 서버 사이의 인터페이스를 제공하는 모듈이다 서버가 이해할 수있는 형태로 구현됩니다. 이 양식은 SAPI로 알려져 있습니다.


다양한 웹 서버 확장을위한 다양한 종류의 SAPI가 있습니다. 예를 들어 위에 나열된 것 외에도 PHP 언어에 대한 기타 SAPI에는 CGI ( Common Gateway Interface ) 및 CLI (Command -Line Interface )가 포함됩니다. [ 139]


PHP는 또한 PHP-GTK 확장 을 사용하여 데스크탑 그래픽 사용자 인터페이스 (GUI) 응용 프로그램 을 작성하는 데 사용할 수 있습니다 . PHP-GTK는 공식 PHP 배포판에 포함되어 있지 않으며 [132] , 확장 버전으로 PHP 버전 5.1.0 이상에서만 사용할 수 있습니다. PHP-GTK를 설치하는 가장 일반적인 방법은 소스 코드에서 컴파일하는 것입니다. [140]


PHP가 클라우드 환경 에 설치되고 사용될 때 클라우드 관련 기능을 사용하기위한 소프트웨어 개발 키트 (SDK)가 제공됩니다. 예 :


Amazon Web Services 는 PHP 용 AWS SDK [141] 를 제공합니다 .

Windows Azure 는 Windows Azure SDK for PHP와 함께 사용할 수 있습니다. 또한,

수많은 PHP 구성 요소와 확장 기능에 영향을 미치는 수많은 구성 옵션이 지원됩니다. [144] [144]php.ini PHP가 사용되는 방식에 따라 설정 파일 이 다른 위치에서 검색됩니다. [145] 구성 파일이 여러 부분들로 분할된다 [146] 의 구성 옵션 중 일부는 웹 서버 구성에서 설정 될 수있다. [147]


사용


PHP는 서버 측 웹 개발에 특히 적합한 범용 스크립팅 언어입니다.이 경우 PHP는 일반적으로 웹 서버 에서 실행됩니다 . 요청 된 파일의 모든 PHP 코드 는 PHP 런타임에 의해 실행 되며 일반적으로 웹 사이트 또는 다른 곳에서 사용되는 동적 웹 페이지 컨텐츠 또는 동적 이미지 를 작성 합니다. [148] 또한 명령 행 스크립팅 및 클라이언트 측 그래픽 사용자 인터페이스 (GUI) 응용 프로그램에도 사용할 수 있습니다. PHP는 대부분의 웹 서버, 많은 운영 체제 및 플랫폼 에 배포 할 수 있으며 많은 관계형 데이터베이스 관리 시스템 과 함께 사용할 수 있습니다(RDBMS). 대부분의 웹 호스팅 제공 업체는 고객이 PHP를 사용할 수 있도록 지원합니다. PHP 그룹은 무료로 사용할 수 있으며 PHP 그룹은 사용자가 자신 만의 용도로 빌드, 사용자 정의 및 확장 할 수있는 완전한 소스 코드를 제공합니다. [8]



동적 웹 페이지 : 서버 측 스크립팅 예제 (PHP 및 MySQL).

PHP가 주로 역할 필터 , [149] 파일 또는 스트림에 포함 된 텍스트 및 / 또는 PHP 지시 입력을 취하고 다른 데이터 스트림을 출력한다. JSON , XML 또는 이미지 또는 오디오 형식과 같은 이진 데이터 가 될 수 있지만 일반적으로 출력은 HTML 입니다. PHP 4 이후, PHP 파서는 입력을 컴파일 하여 젠드 엔진에 의한 처리 를 위해 바이트 코드 를 생성하여 이전 인터프리터에 비해 향상된 성능을 제공 합니다. [150]


원래 동적 생성하기위한 웹 페이지를 , PHP는 지금에 주로 초점을 맞추고 서버 측 스크립트 , [151] 그리고 그것은에 웹 서버에서 동적 콘텐츠를 제공하는 다른 서버 측 스크립트 언어와 유사하다 클라이언트 와 같은, 마이크로 소프트 의 클래식 ASP, 썬 마이크로 ' 자바 서버 페이지 , [152] 및 mod_perl이 . PHP는 많은 개발 끌고있다 소프트웨어 프레임 워크 빌딩 블록 및 홍보 할 수있는 설계 구조를 제공 신속한 응용 프로그램 개발 (RAD)를. 이들 중 일부는 PRADO , CakePHP, Symfony , CodeIgniter , Laravel , Yii Framework , Phalcon 및 Zend Framework 등이 있으며 다른 웹 프레임 워크 와 비슷한 기능을 제공합니다 .


LAMP 아키텍처는 웹 응용 프로그램을 배포하는 방법으로 웹 업계에서 인기를 끌고있다. [153] PHP는 리눅스 , 아파치 및 MySQL 과 함께이 번들 에서 P 로 일반적으로 사용 되지만, P 는 파이썬 , 펄 또는 그 중 일부를 참조 할 수도 있습니다 . 비슷한 패키지 인 WAMP 와 MAMP 도 Windows 와 macOS에서 사용할 수 있습니다.첫 번째 문자는 해당 운영 체제를 나타냅니다. PHP와 Apache 모두 macOS 기본 설치의 일부로 제공되지만이 패키지를 사용하는 사용자는보다 쉽게 ​​최신 설치를 유지할 수있는 간단한 설치 메커니즘을 찾습니다.


2007 년 4 월 현재 2 천만 개가 넘는 인터넷 도메인에 PHP가 설치된 서버에서 웹 서비스가 호스팅되고 mod_php 가 가장 많이 사용되는 Apache HTTP Server 모듈 로 기록되었습니다 . [154] 2017 년 5 월 현재 PHP는 가장 인기있는 1,000 만 개 웹 사이트의 83 %에서 서버 측 프로그래밍 언어로 사용되었습니다. [155] 웹 콘텐츠 관리 시스템 PHP 작성된 포함 위키 , [156] 줌라 , [157] 레즈 게시 , 레즈 플랫폼 , SilverStripe , [158] 워드 , [159] 드루팔 , [160]및 무들 . [161] 에서, PHP 작성된 웹 사이트 백 - 엔드 및 / 또는 사용자 실부는, 한국어 , [162] 디그 , [163] 텀블러 , [164] 데일리 모션 , [165] 및 여유를 . [166]


특정 및 고급 사용 시나리오를 위해 PHP는 C 또는 C ++ 에서 사용자 정의 확장을 작성하기위한 잘 정의되고 문서화 된 방법을 제공합니다 . [167] [168] [169] [170] [171] [172] [173] 의 추가의 형태 언어 자체를 확장 게다가 라이브러리 , 확장이 중요하며 실내가있는 곳에 실행 속도를 향상시키기위한 방법을 제공하는 진정한 컴파일 언어 를 사용하여 개선되었습니다 . [175] [175 ] [175] PHP는 또한 다른 소프트웨어 프로젝트에 자신을 포함시키기위한 잘 정의 된 방법을 제공합니다. 그렇게하면 PHP를 내부 스크립팅 언어 로 쉽게 사용할 수 있습니다.다른 프로젝트의 경우 프로젝트의 특정 내부 데이터 구조 와 긴밀한 인터페이스를 제공 합니다. [176]


PHP 는 "pthreads" PECL 확장을 통해 스레드를 사용할 수 있지만 핵심 언어 수준에서 멀티 스레딩 에 대한 지원이 부족하기 때문에 혼합 검토를 받았습니다 [177] . [178 ]


2013 년 1 월 현재 PHP는 2 억 4 천만 개 이상의 웹 사이트 (샘플링 된 웹 사이트 중 39 %) 에서 사용되고 210 만 개의 웹 서버 에 설치되었습니다 .


보안


2013 년에는 National Vulnerability Database에 나열된 모든 취약점 중 9 % 가 PHP와 연결되었습니다. [181] 역사적으로,이 데이터베이스의 1996 년 이후 나열된 모든 취약점의 약 30 %가 PHP에 연결된다. 언어 자체 또는 핵심 라이브러리의 기술적 보안 결함은 빈번하지 않습니다 (PHP는 나열된 프로그램의 약 20 %에 적용되지만 2009 년에는 22 건으로 전체의 약 1 %였습니다). [182] 프로그래머가 일부 언어에는 많은 문제를 유발하는 입력 유효성 검사 의 부족을 자동으로 감지하기위한 오염 검사 가 포함됩니다 . 이러한 기능은 PHP 용으로 개발되고 있습니다. [183]그러나 석방으로의 그것의 포함은 과거에 여러 번 거절되었다. [ 185]


Suhosin 및 Hardening -Patch 와 같은 고급 보호 패치가 있는데 , 이는 웹 호스팅 환경을 위해 특별히 고안되었습니다. [186] 주로 이러한 환경이 부주의하게 작성된 코드가 실행될 수있는 곳으로 간주되기 때문입니다.


PHP 응용 프로그램을 보안 문제로 만드는 특정 언어 기능과 구성 매개 변수 (주로 이러한 런타임 설정의 기본값)가 있습니다. 이 중 magic_quotes_gpc 및 register_globals [187] 구성 지시문이 가장 잘 알려져 있습니다. 후자는 URL 매개 변수를 PHP 변수로 만들어 공격자가 초기화되지 않은 전역 변수의 값을 설정하고 PHP 스크립트의 실행을 방해하도록하여 심각한 보안 취약성을위한 경로를 열었습니다. " magic quotes "및 "register globals"에 대한 지원은 PHP 5.3.0부터 사용되지 않으며 PHP 5.4.0부터 제거되었습니다. [188]


런타임 설정 취약점의 또 다른 예는 업로드 된 이미지가 저장된 디렉토리에 대해 PHP 실행을 비활성화하지 못하게하는 것 ( 엔진 구성 지시어 를 통해 ) [189] ; 기본 설정을 그대로두면 업로드 된 이미지에 악의적 인 PHP 코드가 포함될 수 있습니다. [190] [191] [192] 또한 공유 웹 호스팅 환경 에서 PHP 확장 기능의 동적로드 ( enable_dl 구성 지시문을 통한 ) [193] 를 사용하면 보안 문제가 발생할 수 있습니다. [194] [195]


또한 호환되지 않는 값을 가져 오는 묵시적인 형식 변환 은 프로그래머의 의도와 동일하게 취급되므로 보안 문제가 발생할 수 있습니다. 예를 들어 첫 번째로 비교 된 값이 ( 0 × 10 1234 ) 즉 0 인 과학 표기법으로 처리되므로 비교 "0e1234"== "0" 비교의 결과가 참 입니다. 이 기능에 인증 결과 취약점 간단한 기계 포럼 , [196] TYPO3 [197] 과 의 phpBB [198] 때 MD5의 암호 해시 비교했다. 대신 strcmp 함수 또는 ID 연산자 ( === )를 사용해야합니다. "0e1234"=== "0" 은 거짓으로 나타납니다 . 또한,


Zone-H 에서 게시 한 170,000 개가 넘는 웹 사이트 오류에 대한 2013 년 분석 에서 가장 많이 사용 된 기술 (53 %)은 파일 포함 취약점의 악용이었으며 대부분 include , require 및 allow_url_fopen PHP 기능의 안전하지 않은 사용과 관련이 있었습니다. [200 ]



출처 위키백과

+ Recent posts