'프로그래밍'에 해당되는 글 10건

  1. 2016.04.27 PHP timezone 설정
  2. 2016.04.04 알파 버전 / 베타 버전 / RC
  3. 2016.03.29 MySQL Check 제약
  4. 2015.09.30 한글 인코딩 종류
  5. 2015.08.24 PHP 날짜함수 정리
  6. 2015.08.19 MySQL Type 종류
  7. 2015.08.19 BASH shell script - connect to MySQL
  8. 2015.08.19 MySQL 권한 설정
  9. 2015.07.23 PHP echo와 print의 차이
  10. 2015.07.20 PHP 5 example source code

 

Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Seoul' for 'KST/9.0/no DST' instead in (php파일명) on line 138


위의 에러는 timezone이 세팅되어있지 않아서 발생한 문제인데, 해결방법은 다음과 같다. 

  php 코드에서 timezone을 설정 
date() 함수를 사용하기 전에 php 코드에 다음과 같은 코드를 박아준다. 

date_default_timezone_set('Asia/Seoul');

 


  php.ini 파일에서 timezone 설정 

$>vi php.ini

...
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Seoul
...

 

'프로그래밍' 카테고리의 다른 글

알파 버전 / 베타 버전 / RC  (0) 2016.04.04
MySQL Check 제약  (0) 2016.03.29
한글 인코딩 종류  (0) 2015.09.30
PHP 날짜함수 정리  (0) 2015.08.24
MySQL Type 종류  (0) 2015.08.19
Posted by 캐논볼
,

http://bobbyryu.blogspot.kr/2006/12/rc.html

 

20년 이상 개발을 해왔고 또한 소프트웨어 공학을 전공한 사람으로서 말씀 드리건대(잘난 척하려는 것이 아니라 제 의견의 신빙성을 위한 멘트임), 소프트웨어 개발의 라이프사이클에서 통용되는 일반적인 정의는 다음과 같습니다.

알파(Alpha) 버전: 모든 기능이 구현되지는 않았지만 주요 요구사항을 만족하는 버전. 기능 구현이 부족하고 불안정하며, 일반적으로 내부 테스터를 위한 버전.

베타(Beta) 버전: 초기 소프트웨어 요구사항 스펙에 있는 모든 기능을 구현한 것이나 중간에 발생한 요구사항은 반영되어 있지 않을 수 있고, 버그가 존재하며 안정적이지 않은 버전. 일반적으로 일부 고객이 프리뷰할 수 있도록 제공하는 버전. 프리뷰 또는 테크니컬 프리뷰라고도 함.

RC(Release Candidate): 치명적인 버그가 발견되지 않는다면 최종 제품으로 릴리즈를 하기 위한 버전. 일반적으로 이 단계에서 코드 완결(Code Complete)이 됨.


위의 정의에 가장 부합하는 사례로 MS의 소프트웨어 제품들을 예로 들 수 있습니다.

다만 위의 정의는, 상품으로서의 패키지 소프트웨어를 위주로 한 정의입니다. 최근에 소프트웨어가 서비스화되고 웹 사이트들이 "베타"라는 말을 유행처럼 남발하면서 전통적인 베타 버전의 정의 또한 변화를 요구 받고 있는 상황이기는 합니다.

하지만 베타 버전의 정의는 여전히 다음과 같습니다.

베타 버전은 버그가 존재하며 안정적이지 않으며 초기에 정한 요구사항은 반영되었더라도 중간에 결정된 요구사항은 반영되지 않은 버전입니다.

개발의 전체 라이프사이클에서 소프트웨어 요구사항은 계속 추가/변경/삭제됩니다. 베타 버전의 단계에서도 그것이 계속 발생하고 있는 것입니다. 참고로 MS는 제품의 완성도를 높여 가면서 베타1, 베타2, 베타3 등으로 명명을 합니다. RC가 되기 전까지 베타 버전을 계속 디버깅하고 요구사항을 구현해 나가는 것입니다.

바로 이것입니다. 그래서 업체들은 "방어적 목적으로" 베타 버전이라는 말을 사용하고 있는 것입니다. 안정적이지 않고, 버그가 있으며, 계속 변하고 있는 중이라는 뜻이죠.

제가 말씀 드린 사항은 논란의 여지가 없는 사항입니다. S/W 업계 상식적으로도, S/W 공학적으로도 통용되고 있는 내용입니다.

그러므로 소비자, 사용자들은 베타 버전을 너무 과신하지 마십시오. 실제로 업체들은, 안정적이지 않으니 그리 신뢰하지 말라는 뜻에서 “베타”라는 말을 사용하고 있는 것입니다.

물론 베타 버전을 과도하게 마케팅하는 업체는 도의상 문제가 있다고 하겠습니다.

'프로그래밍' 카테고리의 다른 글

PHP timezone 설정  (0) 2016.04.27
MySQL Check 제약  (0) 2016.03.29
한글 인코딩 종류  (0) 2015.09.30
PHP 날짜함수 정리  (0) 2015.08.24
MySQL Type 종류  (0) 2015.08.19
Posted by 캐논볼
,

MySQL Check 제약

프로그래밍 2016. 3. 29. 10:52

http://warmz.tistory.com/entry/MySQL-DB-%ED%85%8C%EC%9D%B4%EB%B8%94-Check%EC%A0%9C%EC%95%BD%EC%A1%B0%EA%B1%B4-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

 


Check(제약조건) 
 - 컬럼에 들어갈 수 있는 값들을 제한할 수 있다.
 - 만약 넣으려는 값이 체크 조건에 맞지 않으면 에러가 발생한다.

예)

 

1
2
3
4
5
Create Table piggy_bank
(
    id Int Auto_Increment Not Null Primary Key,
    coin CHAR(1) Check (coin IN ('P', 'N', 'D', 'Q'))
)

 


예) 기존의 테이블의 컬럼(gender)에 제약 조건('M' or 'F') 설정하기

 

1
2
Alter Table my_contacts
Add Constraint Check gender IN ('M', 'F');

 

 


  * MySQL에서는 Check가 데이터의 무결성을 강제하지 않는다.
    - MySQL에서는 체크 제약조건을 사용해서 테이블을 만들 수는 있지만 아무 효과가 없다. 
      MySQL은 이를 무시한다. 

'프로그래밍' 카테고리의 다른 글

PHP timezone 설정  (0) 2016.04.27
알파 버전 / 베타 버전 / RC  (0) 2016.04.04
한글 인코딩 종류  (0) 2015.09.30
PHP 날짜함수 정리  (0) 2015.08.24
MySQL Type 종류  (0) 2015.08.19
Posted by 캐논볼
,

http://studyforus.tistory.com/167


한글 인코딩 종류


윈도우를 기본 운영체제로 사용하였을 때는 전혀 느끼지 못했던 인코딩 방식이 웹서버를 운영하면서 인코딩 표준을 따라가다 보니 여러 문제점이 생겼습니다.




한글 인코딩 방식은 크게 두가지로 나뉩니다. UTF-8  EUC-KR 방식입니다. 현재는 윈도우에서 사용하는 방식은 CP949를 사용하고 있고, 윈도우를 개발한 마이크로 소프트에서 EUC-KR 방식에서 확장하였기 때문에 MS949라고도 부릅니다.


이름만 듣기에는 굉장히 생소한 부류인데, 컴퓨터를 옛 모델부터 만져오신 분들에게는 이렇게 설명하는 것이 더 편리할 수도 있습니다. 한글 표현(또는 작성 형태)에 따라 조합형 완성형으로 불립니다.


조합형 방식 

한글의 편리함을 그대로 가지고 있는 방식입니다. 자음과 모음을 초성, 중성, 종성으로 구분하여 문자를 작성하는 방식을 이야기 합니다. 초성, 중성, 종성을 각기 따로 인식하고 그 것들을 하나의 바이트로 인식하고 조합되어, 총 3바이트의 문자로 인식합니다. (다른 종류도 있긴 하지만 3바이트 방식이 가장 일반적인것 같습니다.) 

제 개인적인 견해로는 가장 한글과 맞는 방식이라고 생각합니다.


완성형 방식

문자를 하나의 완성되어져 있는 글자로 인식하는 방식입니다. 한글이 "가"부터 만들어 질 수 있는문자표를 토대로 문자를 인식합니다. 유니코드보다는 확장성이 떨어지는데 그 이유는 만약 "꽰" 이라는 글자가 완성형 문자표가 있지않다면 "□" 식으로 표기가 됩니다.

오래된 한글 표현 방식입니다.


이해하기 쉬운 이미지가 있어서 참고하시는데 도움이 될 듯합니다.


출처 : http://blog.ohmynews.com/q9447/tag/%EC%99%84%EC%84%B1%ED%98%95%20%EC%BD%94%EB%93%9C



누가봐도 조합형인 조합형 방식이 한글을 표현하는데에 가장 좋은 방법입니다. 왜냐하면 확장성이 좋으니깐요.

하지만, 일반적으로 대한민국의 컴퓨터 사용환경에서 조합형방식을 사용하기에는 아주 치명적인 결함이 있습니다. 그 이유는 바로..


윈도우의 운영체제 점유율 때문입니다.


윈도우의 인코딩 방식은 기본적으로 완성형입니다. 엄밀하게 이야기 하자면, CP949 (코드페이지 949) 방식을 사용하여 완성형으로 사용하지요. 완성형이지만 EUC-KR에서 진화한 CP949 방식은 더 많은 한글 테이블을 제공합니다. 거의 조합형로 쓸 수 있는 모든 한글을 포함하고 있다고 보시면 됩니다.


즉, 한글 작성에 있어서는 조합형와 별반 다르지 않았습니다. 그런데, 왜 이게 웹 서버스를 시작하면서 문제가 되느냐, 웹서버나 데이터베이스 또는 php의 경우에 UTF-8과 EUC-KR 중에서 인코딩을 서로 똑같이 맞춰줘야 정상적으로 문자표현이 가능하기 때문입니다.


그럼 좀더 UTF-8과 EUC-KR 방식에 대해 더 자세히 알아보도록 합시다.




UTF-8


현재 왠만한 개발자들이 원하는 방식입니다. 이유는 아주 간단합니다. 왠만한 서버 운영체제와 웹 서버 그리고 코딩자체가 UTF-8로 제작하면 별다른 인코딩을 따로 할 필요가 없기 때문입니다. UTF-8 방식은 대표적인 조합형의 유니코드 인코딩 방식입니다. 


UTF-8의 경우에는 조합형 방식의 문자집합(Charater Set)이면서, 유니코드 인코딩 방식중 하나입니다. 유니코드 인코딩 방식에서 가장 대표적인 문자집합인데, 그 이유는 ASCII 문자들을 표현할 수 있기 떄문입니다. 따라서 유니코드 인코딩 하면 UTF-8 방식을 많이 이야기 합니다. 

위에 설명했다 시피, 초성, 중성, 종성을 각각 1바이트로 인식해서 일반적으로 한글을 3바이트로 인식하지만 공백이나 영문은 1바이트로 인식을 합니다. 또한 장점이 유니코드의 경우에는 다른 국가에서 한글 언어팩이 설치되지 않았다고 하더라도 한글 표현이 가능합니다. 같은 방식으로 우리 나라에서도 다른 나라의 언어를 볼 수 있습니다. 따라서 다양한 언어로 작성되는 환경이나, 웹과 같은 다양한 국가의 사람들이 보는 경우에는 더 좋은 방식입니다.


UTF-8 유니코드를 위한 가변 길이 문자 인코딩 방식 중 하나로, 켄 톰프슨과 롭 파이크가 만들었다. 본래는 FSS-UTF(File System Safe UCS/Unicode Transformation Format)라는 이름으로 제안되었다. UTF-8 인코딩은 유니코드 한 문자를 나타내기 위해 1바이트에서 4바이트까지를 사용한다. 예를 들어서, U+0000부터 U+007F 범위에 있는 ASCII 문자들은 UTF-8에서 1바이트만으로 표시된다. 4바이트로 표현되는 문자는 모두 기본 다국어 평면(BMP) 바깥의 유니코드 문자이며, 거의 사용되지 않는다. UTF-16과 UTF-8 중 어느 인코딩이 더 적은 바이트를 사용하는지는 문자열에서 사용된 코드 포인트에 따라 달라지며, 실제로 DEFLATE와 같은 일반적인 압축 알고리즘을 사용할 경우 이 차이는 무시할 수 있을 정도이다. 이러한 압축 알고리즘을 사용하기 힘들고 크기가 중요할 경우 유니코드 표준 압축 방식을 대신 사용할 수 있다.

- 출처 : 위키


일반적으로 운영되는 서버들의 운영체제는 리눅스 계열입니다. (무료가 많기 때문) CentOS 아니면 Ubuntu 또는 레드햇 계열인데 이런 리눅스 계열은 대부분 유니코드를 지원합니다. 혹시라도 유니코드를 지원하지 않더라도 워낙에 확장성이 좋기 때문에 유니코드로 인코딩을 설정할 수 있지요.


또한 많이 사용하는 웹서버가 Apache, IIS, NginX 정도인데 기본적으로 서버인코딩은 UTF-8을 이용합니다.

뿐만 아니라, PHP와 MySQL 역시 UTF-8 방식을 기본 인코딩으로 이용하여 웹 서비스를 제공합니다. 이렇게 많이 사용하는 환경에서 수요가 많기 때문에 왠만한 소스들은 UTF-8 방식으로 인코딩을 하고 있으며, 그래서 거의 문제가 되는 일이 없습니다.


실제로 저도 몇몇 포스팅에서 인코딩 방식 때문에 윈도우 서버 환경에서는 정상적으로 실행이 되지 않았지만, 리눅스 환경에서는 완벽하게 사용가능하던 소스들이 몇개 있습니다.



이 세가지는 윈도우 + IIS 환경과 리눅스 + Apache 환경에서 모두 테스트를 해봤는데, 윈도우 + IIS 환경에서는 인코딩 방식이 서로 달라 한글 표현 문제가 발생하였습니다.


예를 들어 "새폴더"라는 이름으로 폴더를 만들고 난 뒤 서버에 저장되어 있는 실제경로로 찾아가 만들어진 폴더 명을 보면 제대로 표현이 안되어 있는 것을 확인할 수 있습니다.

또한 "한글폴더"로 되어있는 한글명 폴더는 이름을 확인할 수도, 클릭을 할 수도 없었습니다.


웹서버인 IIS는 UTF-8을 지원하는데, 실제경로에 한글폴더를 만드는 과정에서 윈도우가 완성형 한글을 사용하기 때문에 오류가 발생했나 봅니다.


하지만, 리눅스 + Apache 환경은 별 탈 없이 사용가능 하였습니다. 한글 표현에도 전혀 불편한 부분이 없이 구현이 되더군요.





EUC-KR, CP949 (MS949)


완성형 한글인 EUC-KR CP949에 대해서 알아보자면 글자하나가 완성된 형태여야 하는 방식입니다. 즉, 완성형 문자로 EUC-KR의 경우에는 웹에서 CP949(엄밀하게는 다르지만 거의 비슷하므로 MS949와 동일하게 취급)의 경우에는 윈도우에서 가장 많이 사용을 합니다.


EUC-KR 방식은 완성형 인코딩방식이고, 한글을 2바이트로 사용하는 문자집합 (Character Set)입니다. 주로 2바이트권 문자에서 사용하는데, 문제는 EUC-KR을 사용하는 국가. 즉, 한글을 사용하는 곳에서만 제대로 문자가 보이는 단점이 있습니다. 한글과 영어만 사용하는 페이지에서 적합합니다.


EUC-KR은 KS X 1001와 KS X 1003을 사용하는 8비트 문자 인코딩으로, EUC의 일종이며대표적인 한글 완성형 인코딩이기 때문에 보통 완성형이라고 불린다.

- 출처 : 위키


코드 페이지 949(CP949)는 마이크로소프트사가 도입한 코드 페이지이다. 본래는 KS C 5601의 완성형 한글을 표현한 코드 페이지였으나, 윈도 95부터는 확장 완성형 혹은 통합형 한글 코드(Unified Hangul Code)이라는 명칭으로 확장되어 현대의 모든 한글을 수용하게 되었다. 마이크로소프트에서는 이 인코딩을 기반 문자 집합 이름인 "ks_c_5601-1987"로 사용하고 있다. 다만 이 코드 페이지는 IANA에 등록되어 있지 않으므로 인터넷 상에서 정보를 주고받는 데 대한 표준은 아니다.

- 출처 : 위키


저는 게임중에 삼국지에 한참 빠져 살았던 적이 있었는데 그 게임에서는 장수의 이름을 입력할 때 "가"부터 "하"까지의 글자표에서 직접 이름을 찾아 선택을 했던 기억이 납니다. (아마 삼국지 4정도 이지 않을까 합니다.) 지금 생각해보면 그런 한글방식이 바로 완성형 방식인 것이지요.


EUC방식은 영어같은 단일바이트 문자가 아닌 한글, 일본어, 중국어 등과 같은 한 글자를 쓸 때마다 2바이트가 들어가는 더블바이트 문자권에서는 많이 사용되는 방식입니다.

즉, 한글, 일본어, 중국어 등등은 인코딩 변환에서 자유로울 수 없다는 것이지요.


하지만, 마이크로 소프트가 한글을 정식으로 사용하기 위해서 개발한 CP949의 경우는 현재 사용하는 한글 중 일정한 규칙에 의해 만들어 낼 수 있는 모든 문자를 완성형으로 만들어 놨기때문에 더 이상 한글표현이 문자표에 없어서 표현이 안되는 일은 없어졌습니다.


현재는 웹에서 UTF-8를 기본으로 사용하고 있어서 왠만한 한글 사이트를 만드는 경우에는 인코딩을 EUC-KR로 설정해야 한다고 합니다. 이유는 아주 간단한데, 윈도우를 사용하는 사람들이 많기 때문에 정상적으로 사용하기 위해서는 UTF-8보다는 EUC-KR로 인코딩하는 것이 더 적합했지요. 한 때 "사진파일이 보이지 않으면 UTF-8로 보냄 체크를 해제하세요."라는 글을 본적이 있을 텐데 한글 사진 파일을 표현하기 위해서 브라우저에서 제공하는 인코딩 방식을 바꾸라는 아주 유명한 말이지요. 

윈도우에서 사진 파일이름을 한글로 하는 경우 자동적으로 완성형으로 인코딩 되는데 서버에서 제공하는 인코딩 방식이 UTF-8인 경우에는 정상적으로 파일이름을 로드할 수가 없기 때문에 나타나는 현상이었습니다.


이렇듯, 한글과 웹 서비스와는 좀 더 신경써야 하는 부분이 많은데 인코딩을 다양하게 지원해주는 웹 소스가 있으면 아주 반갑습니다.

웹 스토리지 오픈 소스 중에서 Pydio는 기본적으로 한글을 인코딩에 맞춰 자동으로 선택해주는 것 같아 보였습니다. 그리고 Pydio6로 판 올림함에 따라서 아예 인코딩 방식을 직접 선택할 수 있도록 하였습니다.



<Pydio의 경우에는 CP949 인코딩을 지원합니다. 물론 기본 인코딩이 UTF-8인 경우 인코딩 방식이 UTF-8로 기본설정됩니다.>


즉, 웹소스에서 한글을 제대로 사용하려면 소스 자체에서 완성형으로 코딩하든지, 아니면 다양한 인코딩 방식을 지원하든지 하는 방식으로 설정할 수 있습니다.




인코딩 간의 문제점


위의 내용들을 종합해보면 


인코딩방식에 따라 표기할 수 있는 관계는 이렇습니다.




완성형 중에서 EUC-KR의 경우에는 종종 빠져있는 문자가 있지만, 확장 완성형인 CP949의 경우에는 유니코드(UTF-8)에서 표현할 수 있는 모든 문자를 표현 가능합니다. 따라서 웹을 사용하지 않는 윈도우 환경이라면 크게 불편함이 없을 수 있습니다.


하지만, 웹에서의 관계는 위에처럼 표현가능한 것이 아니라, UTF-8이면 UTF-8, EUC-KR이면 EUC-KR끼리 밖에 제대로 표현을 못합니다. 이런 상황을 생각해보면 각종 웹 소스들을 사용할 때 인코딩 부분만 해결하면 될 것 같습니다.


인코딩을 변환하도록 하는 함수도 있고, 서버 자체의 인코딩을 바꾸는 방법도 있습니다.


각 소스별로 안고 있는 문제들이 제각각이기 때문에 혹시라고 한글 문제로 고생하고 계신 분들은 인코딩을 확인해보세요.


확인해야 할 항목은 다음과 같습니다.

  • 서버 OS 인코딩 상태
  • 웹 서버 인코딩 상태
  • PHP 인코딩 상태
  • 웹 소스 인코딩 상태
  • (데이터베이스를 사용하는 경우) 데이터베이스 인코딩 상태
이 인코딩 방식등이 다 동일한 방식으로 되어있는지 확인하시기 바랍니다.


 

'프로그래밍' 카테고리의 다른 글

알파 버전 / 베타 버전 / RC  (0) 2016.04.04
MySQL Check 제약  (0) 2016.03.29
PHP 날짜함수 정리  (0) 2015.08.24
MySQL Type 종류  (0) 2015.08.19
BASH shell script - connect to MySQL  (0) 2015.08.19
Posted by 캐논볼
,

날짜/시간 함수 모음

 

time()

 

date("Y-m-d H:i:s");

//현재 날짜/시간을 포맷(fotmat)에 맞게 date형식으로 출력합니다.

(24시간제로 시간을 출력)

 

date("Ymd")

//현재 날짜/시간이 출력됨

//예제 : 20070801

 

date("Y-m-d h:i:s");

//현재 날짜/시간을 포맷(fotmat)에 맞게 date형식으로 출력합니다.

(12시간제로 시간을 출력)

 

date("h:i:s");

-- 현재 시간이 출력됨

 

date("Y-m-d H:i:s",time());

//현재 두번째 매개변수을 timestamp형식으로 읽어 날짜/시간을 포맷(fotmat)에 맞게

//date형식으로 출력합니다.

 

date("Y-m-d",strtotime ("-1 months"));

//현재의 날짜인 time형식에서 strtotime에 의해 한달을 뺀 time을 date형식으로 변환

 

date("Y-m-d",strtotime ("+1 days"));

//현재의 날짜인 time형식에서 strtotime에 의해 하루를 더한 time을 date형식으로 변환

 

date("Y-m-d",strtotime ("+1 years"));

//현재의 날짜인 time형식에서 strtotime에 의해 1년을 더한 time을 date형식으로 변환

 

date("Y-m-d",strtotime ("+24 hours"));

//현재의 날짜인 time형식에서 strtotime에 의해 24시간을 더한 time을 date형식으로 변환

 

date("Y-m-d",strtotime ("+1500 minutes"));

//현재의 날짜인 time형식에서 strtotime에 의해 1500분을 더한 time을 date형식으로 변환

 

date("Y-m-d",strtotime ("+1 week"));

//현재의 날짜인 time형식에서 strtotime에 의해 1주일을 더한 time을 date형식으로 변환

 

date("Ymd",strtotime ("-1 days", strtotime('20070819')));

date("Ymd",strtotime ("-1 days", strtotime('2007-08-19')));

// 20070819의 날짜를 timestamp형식으로 변환후 1일을 빼고 다시 timestamp형식으로 변환후

Ymd 형식의 문자열로 출력

 

※ 날짜 형식은 -을 넣거나 빼야 한다. 다른 특수문자는 안됨(2007:08:12)

 

date("Ymd",strtotime ("+1 days",  strtotime('20070819')));

date("Ymd",strtotime ("+1 days",  strtotime('2007-08-19')));

// 20070819의 날짜를 timestamp형식으로 변환후 1일을 더한후 다시 timestamp형식으로 변환후

Ymd 형식의 문자열로 출력

 

※ date 함수의 2번째 인자는 timestamp 형입니다.

※ strtotime 함수의 2번째 인자는 timestamp 형입니다.

 

date( "Y-m-d\TH:i:s", strtotime('20070101040404') );

//정상적으로 처리안됨

date( "Y-m-d\TH:i:s", strtotime('2007-01-01 04:04:04') );

//정상적으로 처리됨( rss에서 사용)

 

$timestamp=strtotime('+1 years +1 months +1 days');

//현재 날짜/시간에 years months days hours minutes seconds 단위로 더하여

//timestamp형식으로 리턴합니다.(매개변수 없이 사용불가)

 

문자형 날짜와 문자형 날짜 사이의 일수 구하기

 

<?

echo (strtotime('20070803') - strtotime('20070801'))/60/60/24;

?>

# 2 출력됨

# 문자형 날짜를 초로 계산하여 뺀다음에 일자로 변환해줌(그나마 가장 정확함)

 

응용 함수 모음

 

//오늘 날짜부터 지정한 일수(day)후의 날짜로 timestamp형식으로 출력하기

function plus_day($day)

{

 return mktime(0,0,0,date("m"),date("d")+$day,date("Y"));

}

 

//한줄로 오늘 날짜 시간 뽑아오기

<?

 list($y,$m,$d,$h,$i,$s) = explode(" ",date("Y m d h i s"))

?>

'프로그래밍' 카테고리의 다른 글

MySQL Check 제약  (0) 2016.03.29
한글 인코딩 종류  (0) 2015.09.30
MySQL Type 종류  (0) 2015.08.19
BASH shell script - connect to MySQL  (0) 2015.08.19
MySQL 권한 설정  (0) 2015.08.19
Posted by 캐논볼
,

MySQL Type 종류

프로그래밍 2015. 8. 19. 14:23
http://najuung.tistory.com/49

 

 MYSQL 자료형 종류의 타입에 대하여 정의해보자 .


자료형은 크게 숫자형, 문자형, 날짜형 3종류로 나뉠 수 있다. 

종류에 따라 살펴보도록 하겠다. 


1. 숫자형 


숫자형은 부호를 생략할 떄 unsigned를 붙인다. 숫자형 종류는 다음과 같다. 


 자료형

사용 BYTE 

표현범위  

TINYINT 

1 Byte

signed: -128~127  , unsigned: 0~255 

 SMALLINT

2 Byte 

 signed: -32768~32767  , unsigned: 0 ~ 65535 

 MEDIUMINT

3 Byte 

 signed: -8388608~8388607  , unsigned: 0 ~ 16777215  

 INT

4 Byte 

 signed: -2147683648~2147483647  , unsigned: 0 ~ 4294967295 

BIGINT 

Byte 

signed: -922372036854775808~9223720368547758087  , unsigned: 0 ~ 18446744073709551615

 DECIMAL

                *      소수를 저장하지만 내부적으로는 문자 형태로 저장되는 타입이다.

   예를들어 3.141592 의 경우, 3 이 char 하나의 공간에 저장된다. 

 FLOAT

4 Byte 

signed: +_1.175494351E-38,  unsigned: 3.402823466E_38 

DOUBLE 

 8 Byte

signed:±1.7976931348623157E-308, unsigned : 1±2.2250738585072014E+308  


 

 

  • 정수  컬럼을 선언 할 때, 선택적인 크기 M을 지정할 수 있다. M은 1에서 255까지 정수 이다. 이것은 컬럼 값을 표시하는 데 사용되는 문자들의 수에만 관련이 있지 저장공간의 바이트 수와는 아무런 관련이 없다.
  • DECIMAL에서 M은 유효자리수, D는 소숫점 자리수를 나타낸다. M은 1부터 65, D는 0부터 30까지 값을 가지고 M보다 클 수 없다. (예를 들어 DECIMAL(5,1) 이라면 값의 범위는 -9999.9 ~ 9999.9 까지 이다.) 
이해가 잘 되지않음 

 


2. 문자형


자료형 

표현범위  

CHAR 

0~255까지의 자릿수를 지원하며 지정한 용량만큼 바이트를 사용 

 VARCHAR

지정할 수 있는 길이는 1~255까지이며 지정한 길이보다 작은 데이터를 저장할 때 필요길이만큼 저장된다. char보다 기억장치를 효율적으로 저장할 수 있다. 

 TINYBLOB

최대 255개 문자를 저장하며 지정한 용량 + 1BYTE를 사용한다.  

 BLOB

최대 65535개의 문자를 저장하며 지정한 용량 + 2BYTE를 사용한다. 

 MEDIUMBLOB

최대 1677215개의 문자를 저장하며 지정한 용량 + 3BYTE를 사용한다.  

 LONGBLOB

최대 429496729개의 문자를 저장하며 지정한 용량 + 4BYTE를 사용한다.  

 ENUM

문자인 형태인 value 값을 숫자로 저장한다. 

 value가 255이하인 경우는 1byte 65535이하인 경우에는 2 byte로 저장한다. 

 


3. 날짜형



 자료형

사용 

 사용 BYTE

출력방식 

 DATE

날짜 

 3 BYTE

CCYY-MM-DD

TIME

시간 

 3 BYTE

hh:mm:ss

DATETIME

날짜와 시간 

 8 BYTE

CCYY-MM-DD hh:mm:ss 

 TIMESTAMP

타임스탬프 

 4 BYTE

1970-01-01 00:0:00 이후 부터 초를 숫자로 정하는 자료형

YEAR 

연도 

 1 BYTE

CCYY 또는 YY 

 


 

'프로그래밍' 카테고리의 다른 글

한글 인코딩 종류  (0) 2015.09.30
PHP 날짜함수 정리  (0) 2015.08.24
BASH shell script - connect to MySQL  (0) 2015.08.19
MySQL 권한 설정  (0) 2015.08.19
PHP echo와 print의 차이  (0) 2015.07.23
Posted by 캐논볼
,

 
 
 
      실무에서 자주 사용되는 쉘 스크립트  #2
           (MySQL DB관리 유틸리티)

 

  지난번, 강좌(apache 자동 재 시작 프로그램)에 이어 실무에서 자주 사용되는 쉘 스크립트에 대한 강좌를 써 내려 가겠다. 물론 최대한 쉽고 최소한의 라인 수로 작성 가능한 쉘 스크립트에 대한 강좌를 쓸 것이다.
   금번 강좌는 MySQL을 쉽게 관리 할 수 있는 툴이다. 서버 관리를 하다 보면, mysql 접속하여 여러가지 sql문으로 서버 상태를 알아 보거나, 모니터링 해야 할 때가 있다. 이럴 때 마다 로그인을 해서, sql문을 얻어내는 것은 아주 귀찮은 일이고, 또 익숙하지 않으면 아주 오랜 시간이 소요되는 작업이다.  내가 만들고자 하는 스크립트는 이런 작업을 쉽게 해 줄 수 있는 스크립트를 만드는 것이다.

먼저, 어떤일을 할 것인지 생각 해 보자...


1) MySQL의 프로세스 리스트를 보려면?
   mysql의 프로세스 리스트는 ps 등의 명령어로 쉽게 볼 수 있다. 난 그런 것을 원하는 것이 아니고, 각 프로세스들이 하는 일들을 보고 싶다. mysql은 다음과 같은 방법으로 이런 일이 가능하게 제공한다.
 
   mysqladmin -u root -p processlist

또는

   mysql 접속한 상태에서
   show processlist;

나는 일괄적으로 다음과 같은 방법으로 mysql 명령을 실행 시킬 것이다.

echo "쿼리;" | mysql -u"root" -p"비밀번호"

위 명령어는 다음과 같다.
 echo "쿼리; " : "쿼리;"를 출력한다.
| : 파이프, 앞 명령어의 내용을 뒷 명령어의 표준 입력으로 넣는다.
mysql -u"root" -p"비밀번호" : mysql 서버에 접속한다. "비밀번호"는 서버의 비밀번호를 넣어준다.

우리가 원하는 일은 다음과 같이 한다.

echo "show processlist;" | mysql -u"root" -p"비밀번호"

 

 

 2) root로 그냥 접속만 하려면?
  '1)'의 프로세스 리스트를 보는 것 보다 쉽다. 단순하게..

mysql -u"root" -p"비밀번호"

이렇게만 하면 끝난다.

 

 3) MySQL에 존재하는 database 들을 보려면?
  '1)'의 프로세스 리스트를 응용하면,

echo "show databases;" | mysql -u"root" -p"비밀번호"

이렇게만 하면 끝난다.


 이정도 했으면, 원하는 쿼리들을 위와 같은 방법으로 자유롭게 추가 할 수 있을 것이다.
내가 원하는 것은 위 명령어들을 모아서 쓰기 편리한 메뉴 방식으로 만드는 것이다.
어떻게 할까???
  나는 키보드로 특정 문자들을 입력받아 변수에 넣을 것이다. 그리고 그 변수에 따라 위 명령어들을 실행 시킬 것이다. 이런 작업들을 특정 문자가 입력될 때 까지 반속 할 것이다.

 

 4) 쉘 프로그램에서 키보드 입력 받기
  나는 쉘 프로그램에서 키보드로 입력을 받아서 변수에 넣을 것이다. 어떻게 해야 할까

read <변수>
 
no라는 변수에 입력값을 넣으려면 다음과 같이 한다.
read no

이렇게 하면, '엔터'키를 누를 때 까지 입력을 받는다.

read no
echo "$no"

위와같이 하면 간단하게 입력받은 문자를 출력해서 보여 줄 수 있다.


5) 입력된 문자에 따라서 프로그램 실행 시키기
  '4)'에서 입력받은 문자에 따라서, 프로그램을 실행시키기 위해서는 case문을 사용해야 한다.
다음과 같다.

case <변수> in
   "값" )
        <명령어> ;;
   "값" )
        <명령어> ;;
 esac

위와같다.
위 방법을 우리가 목표 하는 것에 적용 시키면.

먼저 메시지를 뿌려 준다.

echo '
   1. 프로세스 리스트 보기
   2. mysql 접속
   3. database 리스트 보기
'
echo -n "번호 선택 : "
read no

case $no in
   "1" )
        echo "show processlist;" | mysql -u"root" -p"비밀번호" ;;
   "2" )
        mysql -u"root" -p"비밀번호" ;;
   "3" )
        echo "show databases;" | mysql -u"root" -p"비밀번호" ;;
 esac


위와같이 작성하면, 위 쉘 스크립트를 실행 시키면, 리스트가 나오며 입력 대기 할 것이고, 1,2,3 중 하나의 번호를 누르면 지정 명령어가 실행 될 것이다..
  그렇다면, 다른 문자를 입력하면??  조건에 만족하는 문자가 없으면 그냥 지나간다...

 

6) 실행이 끝나면 다시 메뉴 보여주기
  명령어를 실행 시키고 빠져 나가 버리면, 다른 메뉴를 선택하기 위해서 또 명령어를 실행시켜야 한다. 하나의 명령어 실행 시키고 다시 메뉴 리스트를 반복적으로 보여 주기 위해서는 이전 강좌에서 배웠던, while 문을 사용하여 계속 실행 시키도록 해 보자.

while ( true ) ; do
  <프로그램>
done

위와같은 문법을 우리 스크립트에 적용하면,

while ( true ) ; do
   clean
   echo '
    1. 프로세스 리스트 보기
    2. mysql 접속
    3. database 리스트 보기
'
   echo -n "번호 선택 : "
   read no

   case $no in
     "1" )
          echo "show processlist;" | mysql -u"root" -p"비밀번호" ;;
     "2" )
          mysql -u"root" -p"비밀번호" ;;
     "3" )
          echo "show databases;" | mysql -u"root" -p"비밀번호" ;;
   esac
done


이렇게 하면, 선택한 명령어 실행이 끝나면, 다시 메뉴를 보여 줄 것이다.
clear 명령어는 화면의 내용을 지우라는 명령어이다. 메뉴가 줄줄줄~~ 내러 가는 일을 방지하기 위함니다.

 


7) 이 반복 메뉴에서 빠져 나오려면??
  한 명령어 실행이 끝나면, 메뉴가 나올 것이다. Ctrl + C 키를 눌러 빠져 나올 수 있지만, 그건 좀 아닌 것 같은데... 하나의 항목을 추가 했다. 메뉴에서 'q'키를 누르면 빠져 나오게 한다.

 

while ( true ) ; do
   clean
   echo '
    1. 프로세스 리스트 보기
    2. mysql 접속
    3. database 리스트 보기
    q. 끝내기
'
   echo -n "번호 선택 : "
   read no

   case $no in
     "1" )
          echo "show processlist;" | mysql -u"root" -p"비밀번호" ;;
     "2" )
          mysql -u"root" -p"비밀번호" ;;
     "3" )
          echo "show databases;" | mysql -u"root" -p"비밀번호" ;;
     "q" )
          exit 0 ;;
   esac
done

위 쉘스크립트에서 'q'키를 누르면 exit 명령어를 실행시켜 빠져 나오게 된다. 물론 정상 종료이기 때문에 0을 리턴한다..

 


8) "비밀번호"가 바뀌면 다 고쳐 줘야 하나요??
  비밀번호가 바뀌면 위 스크립트에서 "비밀번호" 부분을 모두 수정해야 한다. vi 등의 에디터에 치환 기능이 있어 한번에 치환 한다면 문제가 없다. 하지만, 비밀번호가 'mysql' 이라면, 얘기는 달라진다,.. 명령어인 'mysql'이 함께 바뀌기 때문에.. 하나 하나 수작업으로 고쳐야 한다.
  변수라는 개념을 써서 이 부분을 해결 해 보자.

a="변수"
echo $a

이렇게 하면 출력값은 ? 

변수

위와같이 출력된다. 변수라는 개념을 우리의 쉘스크립트에 적용시키면?

mysqlpw="비밀번호"

while ( true ) ; do
   clean
   echo '
    1. 프로세스 리스트 보기
    2. mysql 접속
    3. database 리스트 보기
    q. 끝내기
'
   echo -n "번호 선택 : "
   read no

   case $no in
     "1" )
          echo "show processlist;" | mysql -u"root" -p"$mysqlpw" ;;
     "2" )
          mysql -u"root" -p"$mysqlpw" ;;
     "3" )
          echo "show databases;" | mysql -u"root" -p"$mysqlpw" ;;
     "q" )
          exit 0 ;;
   esac
done

위와 같이 보라색 부분을 수정했다. 이렇게 수정하면, 상단의 변수만 수정 하면 다른 부분은 수정할 필요없이 적용되는 것이다.

 

'프로그래밍' 카테고리의 다른 글

PHP 날짜함수 정리  (0) 2015.08.24
MySQL Type 종류  (0) 2015.08.19
MySQL 권한 설정  (0) 2015.08.19
PHP echo와 print의 차이  (0) 2015.07.23
PHP 5 example source code  (0) 2015.07.20
Posted by 캐논볼
,

http://link2me.tistory.com/431

MySQL DB 생성/삭제 및 사용자 추가/삭제, 권한 부여


서버 관리를 하다보면 mysql 사용자 계정을 추가해 줄때가 있다.


MySQL 접속 및 데이터 베이스 추가

# mysql -u root -p

사용자 계정을 추가하기 전에 먼저 현재 생성된 사용자 계정을 확인한다.

mysql > use mysql;    // mysql database 선택
mysql > select host, user, password from user;    // user 테이블 살펴보기


사용자 추가 (권한추가)
mysql > create user 사용자ID;   // 사용자 추가

mysql > create user userid@localhost identified by '비밀번호';

// 사용자(user)를 추가하면서 패스워드까지 설정

기존에 사용하던 계정에 외부 접근 권한을 부여하려면, Host를 '%' 로 하여 똑같은 계정을 추가한다

mysql > create user 'userid'@'%' identified by '비밀번호'// '%' 의 의미는 외부에서의 접근을 허용



다른 방법으로는

mysql > USE mysql;     // mysql database 선택
mysql > INSERT INTO user (Host, User, Password) VALUES ('localhost', '계정아이디', password('비밀번호'));
mysql > INSERT INTO user (Host, User, Password) VALUES ('%', '계정아이디', password('비밀번호'));
mysql > FLUSH privileges;



mysql > drop user '사용자ID'@localhost;    // 사용자 삭제



mysql > select * from user;    // 등록된 모든 사용자 ID 조회
mysql > delete from user where user = '사용자ID';      // 사용자 삭제


계정이 생성되었다면, 그 계정이 접근할 수 있는 데이터베이스를 생성하고 권한을 부여해야 한다

데이터베이스 생성

mysql > show databases;     // DB 목록 확인



msyql > create database DB명;    // 데이터베이스 생성



msyql > create schema DB명 default character set utf8;

// default character set을 지정하지 않으면 한글이 깨져서 나오므로 주의해야 한다.


msyql > drop database DB명;       // 데이터베이스 삭제



사용자에게 데이터베이스 사용권한 부여

MySQL은 사용자 이름, 비밀번호, 접속 호스트로 여러분을 인증한다. 

MySQL은 로그인을 시도하는 위치가 어디인가 하는 것도 인증의 일부로 간주한다.

MySQL 에서 사용자 계정을 추가하고 권한을 추가하거나 제거하는 데 GRANT 와 REVOKE 명령을 사용하기를 권장한다.

사용자에게 허가된 것을 확인하려면 SHOW GRANTS 를 사용한다.


IDENTIFIED BY '비밀번호'; 는 권한부여를 하면서 비밀번호까지 변경하고자 하는 경우

이므로 비밀번호는 변경하지 않으려면 이 부분을 빼면 된다.


mysql > GRANT ALL PRIVILEGES ON DB명.테이블 TO 계정아이디@host IDENTIFIED BY '비밀번호';

// 계정이 이미 존재 하는데 'identified by '비밀번호' 부분을 추가하면 비밀번호가 변경된다

mysql> GRANT ALL privileges ON DB명.* TO 계정아이디@locahost IDENTIFIED BY '비밀번호';
mysql> GRANT ALL privileges ON DB명.* TO 계정아이디@'%' IDENTIFIED BY '비밀번호';


mysql > grant all privileges on DB명.* to userid@'%' identified by '비밀번호' ;  //모든 원격지에서 접속 권한 추가

host에 '200.100.%' 로 하면 IP주소가 200.100.X.X 로 시작되는 모든 IP에서 원격 접속을 허용한다는 의미

host에 '200.100.100.50' 으로 하면 IP주소가 200.100.100.50 인 곳에서만 원격 접속을 허용한다는 의미


mysql > grant all privileges on test.* to userid@localhost identified by '비밀번호';

// user 에게 test 데이터베이스 모든 테이블에 대한 권한 부여


mysql> grant select, insert, update on test.* to user@localhost identified by '비밀번호';

// user 에게 test 데이터베이스 모든 테이블에 select, insert, update 권한 부여


mysql> grant select, insert, update on test.* to user@localhost;   -- 패스워드는 변경없이 권한만 부여하는 경우

// user 에게 test 데이터베이스 모든 테이블에 select, insert, update 권한 부여

 


mysql> grant all privileges on *.* to user@localhost identified by '비밀번호' with grant option;

// user 에게 모든 데이터베이스 모든 테이블에 권한 부여

// 전역 권한은 모두 광범위한 보안문제가 수반되므로 권한을 허용하는 경우 신중해야 함


mysql > flush privileges;     // 변경된 내용을 메모리에 반영(권한 적용)



사용자에게 부여된 권한 확인

mysql > SHOW GRANTS FOR test@localhost-- userid 와 host명까지 붙여서 검색해야 함

mysql > SHOW GRANTS FOR test@'%';

mysql > SHOW GRANTS FOR test@'200.100.100.50';


사용자에게 데이터베이스 사용권한 제거

revoke all on DB명.테이블명 from 사용자ID;     // 모든 권한을 삭제


이제 다시 show grants 로 정보를 확인해보면

user 정보는 남아 있는데, 권한부여 정보는 삭제되고 없는 것이 보인다.


사용자 계정마저 삭제하고 권한 설정 정보를 확인하려고 하면 Error 가 발생하는 걸 확인할 수 있다.


사용자 계정 삭제

mysql > drop user userid@'%';

mysql > drop user userid@localhost;


 

위에 있는 것과 비교해서 host 가 % 로 된 것이 삭제되었다.


비밀번호 보안

MySQL 비밀번호가 일반 텍스트로 저장되지 않는다고 해서 비밀번호를 간단하게 만들어서는 안된다. MySQL 서버에 접속 가능한 사람은 누구든지 무차별 대입공격(brute-force) 방식으로 비밀번호를 알아내려고 시도해 볼 수 있으며, MySQL 은 유닉스 비밀번호에서처럼 이런 공격을 감지하고 막아낼 방도가 없다.

'프로그래밍' 카테고리의 다른 글

PHP 날짜함수 정리  (0) 2015.08.24
MySQL Type 종류  (0) 2015.08.19
BASH shell script - connect to MySQL  (0) 2015.08.19
PHP echo와 print의 차이  (0) 2015.07.23
PHP 5 example source code  (0) 2015.07.20
Posted by 캐논볼
,
echo와 print의 차이점
echo와 print는 실제 함수가 아니라 언어 구조라고 합니다. 그런데 print는 함수처럼 사용할 수 있습니다. 함수는 쉽게 생각하면 초등학교 때 상자 안에 넣어 계산 문제를 푸는 것처럼 그런 구조를 가지고 있습니다. 함수는 어떤 것을 넣으면 계산하고 결과를 출력해주는 역할을 합니다. 어떤 것을 넣는 것을 인자라고 하고 결과를 출력해주는 것을 리턴 값이라고 해요. 
                                          인자(입력)값
                 리턴(출력)값
함수의 개념

print는 입력이 한 개이고 리턴 값을 가집니다. 항상 1이라는 숫자를 리턴해요. print는 함수는 아니지만 함수처럼 사용할 수 있어요. 

echo는 하나 이상의 문자열을 출력합니다. 입력 값이 여러 개라는 이야기이지요. 아무것도 결과물로 돌려주지 않아요. 물론 HTML로 출력해주는 역할을 하지만 리턴 값이 없습니다. 

int print ( string $arg ) - 문자열을 하나를 출력 
- int는 리턴 값이 정수형이라는 것을 말하며 string은 문자열을 말하고 $는 변수, string은 문자열을 뜻합니다.

void echo ( string $arg1 [, string $... ] ) -  하나 이상의 문자열을 출력
- void는 리턴 값이 없다는 것을 말하며 string은 문자열을 말하고 $는 변수, string은 문자열을 뜻합니다.

 

'프로그래밍' 카테고리의 다른 글

PHP 날짜함수 정리  (0) 2015.08.24
MySQL Type 종류  (0) 2015.08.19
BASH shell script - connect to MySQL  (0) 2015.08.19
MySQL 권한 설정  (0) 2015.08.19
PHP 5 example source code  (0) 2015.07.20
Posted by 캐논볼
,

### Associative Array

 

<?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
?>

 

<?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");

foreach($age as $x => $x_value) {
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}
?>

 

### super global variable

 

<?php
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>

 

### HTML 특수문자 치환

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

 

### HTML FORM 검사 예

<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

 

 

### strtotime

 

<?php
$d=strtotime("tomorrow");
echo date("Y-m-d h:i:sa", $d) . "<br>";

$d=strtotime("next Saturday");
echo date("Y-m-d h:i:sa", $d) . "<br>";

$d=strtotime("+3 Months");
echo date("Y-m-d h:i:sa", $d) . "<br>";
?>

 

<?php
$startdate = strtotime("Saturday");
$enddate = strtotime("+6 weeks",$startdate);

while ($startdate < $enddate) {
  echo date("M d", $startdate),"<br>";
  $startdate = strtotime("+1 week", $startdate);
}
?>

 

### include vs required

The require statement is also used to include a file into the PHP code.

However, there is one big difference between include and require; when a file is included with the include statement and PHP cannot find it, the script will continue to execute:

 

 

### fgets vs fgetc

<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
// Output one line until end-of-file
while(!feof($myfile)) {
  echo fgets($myfile) . "<br>";
}
fclose($myfile);
?>

 

<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
// Output one character until end-of-file
while(!feof($myfile)) {
  echo fgetc($myfile);
}
fclose($myfile);
?>

 

 

### fopen 옵션

http://unikys.tistory.com/273

'프로그래밍' 카테고리의 다른 글

PHP 날짜함수 정리  (0) 2015.08.24
MySQL Type 종류  (0) 2015.08.19
BASH shell script - connect to MySQL  (0) 2015.08.19
MySQL 권한 설정  (0) 2015.08.19
PHP echo와 print의 차이  (0) 2015.07.23
Posted by 캐논볼
,