[AWS] Amazon Linux AMI에서 PHP 7.x 설치

아마존 리눅스에서 PHP 7.x 버전 설치하는 방법을 소개합니다. EC2 인스턴스 생성 직후 $ sudo yum info php* 로 패키지를 조회 해보면 php 5.4 버전 기준의 패키지만 검색됩니다. 아래 단계를 진행하시면 php7 버전 설치가 가능합니다.

진행 방법

// php 최신 버전 조회
$ sudo amazon-linux-extras | grep php
// php 7.4 레포지토리 설치 (작성일 기준에서 최신버전은 php7.4)
$ sudo amazon-linux-extras install php7.4
// php 7.4 패키지 활성 (기존 설치된 버전이 있다면 disable 명령 후 진행)
$ sudo amazon-linux-extras enable php7.4
// php 모듈 설치
$ sudo yum install  php-cli php-common php-gd php-mbstring  php-mysqlnd php-pdo php-fpm php-xml php-opcache php-zip php-bcmath
// php 버전 확인
$ php -v

* 이 내용은 https://www.lesstif.com/lpt/amazon-linux-ami-php-7-3-77955353.html 을 바탕으로 재작성하였습니다.

[PHP] 비트연산자(&)를 이용한 플래그 값 비교 방법

비트 연산을 이용해 여러 상태 값을 처리하는 방법을 소개합니다.

비트 연산하면 떠오르는 패턴의 수열이 있습니다.

1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 .. 와 같은 공비가 2인 등비수열..

이제 이 값들을 식재료에 매칭시켜 예를 들어보겠습니다.

 

위 코드에서는 아래와 선택했습니다.
파(1) + 김치(16) + 소금(256) + 돼지고기(4096) = 4369

선택된 수열 값의 합인 4369에서 더해진 수열값을 제외하고는 모두 false가 반환되는 것을 알 수 있습니다.

이 방법은 여러 옵션을 하나의 값으로 저장하고 검증할때 유용하게 사용됩니다.

[Nginx] AWS EC2에 Nginx 설치하는 방법 간단 정리

아마존 웹 서비스(AWS)에서 nginx와 mysql, 그리고 php를 구동하기 위한 php-fpm 설치 방법을 소개합니다.

yum update

Nginx + PHP FPM 설치

PHP 확장 모듈 설치

PHP APC 설치

문제 : 위 PHP APC를 설치하면 php-fpm 프로세스의 iowait (입출력 대기 부하)가 50~99% 발생하는 문제가 있습니다. 이 과정에서 PHP APC 설치는 권장하지 않습니다. 자료를 찾아보는 중에는 memcached도 비슷한 문제가 있다고 합니다.

Mcrypt 설치 (Codeigniter framework 사용 시 필요)

MySQL 설치

Nginx 기본 설정 파일 작성

default.conf 기본 내용

php-fpm 설정

www.conf 설정 (각 항목을 찾아 아래 내용과 같이 수정)

EC2 인스턴스 재 시작 시 nginx + mysql + php fpm 자동 실행 되도록 설정

Nginx + MySQL + php-fpm 서비스 시작
(MySQL은 최초 시작시 root 계정 설정과 패스워드 설정에 대한 멘트가 나오니 참고하셔서 설정해줍니다.)

웹페이지 확인
Welcome to nginx on the Amazon Linux AMI! 화면 출력되면 nginx 설치는 정상

 

세팅 과정은 여기까지 입니다. 아래부터는 세팅하는 과정에서 발생한 문제나 이슈에 대해서 정리한 내용이니 참고하세요.

 

– 추가 정보 –
1. nginx reload (Nginx는 서비스를 재시작하지 않고 reload로 무중단 재시작이 가능, 단 모듈이나 설정이 변경된 경우에는 restart 필요)

2. Nginx의 Error / Access log 기본 경로
error log : /var/log/nginx/error.log
access log : /var/log/nginx/access.log

3. 서버 타임존 설정

현재 타임존은 $ date 명령으로 확인 가능

4. FastCGI sent in stderr: “Primary script unknown” while reading response header from upstream,.. 에러 발생 문제

이 에러는 여러 원인이 있겠지만 저의 경우
/etc/nginx/conf.d/default.conf (호스트 설정 파일)의 location / 블럭에서 index.php가 빠져있어서 에러가 발생.

5. CodeIgnighter 사용 시 mod rewrite 설정 (호스트 설정 파일 location / 블럭 안에 추가)

6. EC2 인스턴스에서는 CORS(Cross-Origin Resource Sharing) 설정 불가.  이를 해결하려면 S3를 사용하거나 외부 CDN 서비스를 사용해야함.

[PHP] 시간차 구하는 방법

A라는 게시물이 등록된 시각을 2015-05-12 01:22:20 (2015년 5월 12일 1시 22분 20초)라고 가정하겠습니다.

이때 A게시물이 현재 시각으로 부터 몇 시간이 지났는지를 구하는 방법을 포스팅합니다.

추가 설명을 드리자면 strtotime 함수를 이용해 시간 데이터를 초단위로 변환한 후 값을 연산한 결과를 다시 시간 단위로 만들기 위해 3600(초)를 나눕니다.

이때 발생하는 소수점 이하자리는 제거하여 걸린 시간을 정수로 얻어옵니다.

[PHP] mb_substr 사용 시 문자가 null로 출력되는 경우

한글과 같은 2byte 문자를 자를 경우에는 substr이 아닌 mb_substr을 사용해야 합니다.

그런데 mb_substr 함수를 사용했을때 어떤 경우는 문자열이 잘리지 않고 null로 출력되는 경우가 있습니다.

이런 경우에는 mb_substr 함수의 인자를 확인해보세요.

마지막 인자에 인코딩 타입을 지정해주시면 해결이 됩니다. 너무 간단한 내용이지만 의외의 복병이 될 수도 있습니다.

이 함수 말고도 mb_strlen, mb_strcut 과 같은 함수도 공통으로 가지고 있는 사항이니 참고하세요.

[PHP] 페이지 내용이 출력되지 않거나 소스 그대로 출력되는 문제 해결방법

화면에 아무런 내용이 출력되지 않거나 PHP 소스가 찍혀나오는 경우가 있습니다.

소스 문법상 오류도 없고 아무 이상이 없는데 말이죠.

이런 경우는 PHP 설정을 확인해보시기 바랍니다.

php.ini 파일 또는 phpinfo(); 를 통해 php 설정값을 확인가능합니다. 여기서 확인해봐야 할 내용은 short_open_tag 옵션입니다. 만약 이 옵션이 OFF로 되어있다면 이 녀석이 범인입니다.

short_open_tag란 PHP코드의 시작과 끝을 <? ~ ?>로 사용할 수 있게 끔 해주는 옵션입니다. OFF로 설정되어있다면 <? 로 시작하는 경우 PHP가 해석을 하지 못합니다. <?php 로 시작을 해야 해석이 됩니다.

위 증상은 short_open_tag를 OFF로 설정한 채 <? 로 PHP코드를 시작했기 때문에 발생하는 문제입니다.

자주 발생하는 이슈는 아니지만 환경을 새로 세팅하거나 변경하게 되는 경우 간혹 이런 시간 잡아먹는 일들이 생기게 됩니다. 사전에 숙지했다가 신속하게 문제를 해결하는데 도움이 되길 바랍니다.

[PHP] 영문, 숫자 문자열 검증 간단하게 하는 방법

문자열 검증을 하려면 정규식을 사용하여 체크를 합니다. 도메인, 이메일, 아이디 형식 등등 일정 형식의 문자열을 검증하려면 사용할 수 밖에 없습니다.

하지만 간단한 영문과 숫자만을 검증하는 경우 정규식을 사용하지 않고도 간단하게 체크 가능합니다.

아래 예제를 참고하세요.

이처럼 ctype_alnum 함수로 간단하게 체크 가능합니다.

[PHP] htmlspecialchars과 htmlspecialchars_decode

html의 구문들을 그대로 유지해서 화면에 보여주기 위해 htmlspecialchars를 사용합니다. html 태그를 브라우저가 해석할 수 없도록 구분자들을 대체문자로 치환시킵니다.  그리고 그렇게 치환된 결과물은 사용자가 볼때 html 구문 그대로 보여지게 됩니다.

이렇게 htmlspecialchars 치환된 내용을 다시 브라우저에서 읽어들일 수 있도록 변경하는 방법도 있습니다. 물론 str_replace 로 치환된 문자를 다시 변경 할 수 있겠지만 항상 그렇듯 예외 상황이 발생할 수 있습니다.

내부 함수가 존재하니 str_replace를 사용할 일이 없습니다. htmlspecialchars_decode를 이용하면 쉽게 html 을 브라우저가 읽을 수 있도록 변환할 수 있습니다.

저사양 서버 성능 최적화 하기 (#4 APC 설정)

이제 저사양 VPS 서버 성능 최적화 하기의 마지막 포스팅입니다.

APC를 설치만 하고 기본 설정대로 쓰셔도 어느정도 효과는 보시겠지만 좀 더 세부적인 설정을 하고 싶으신 분들은 참고해보시기 바랍니다. 검색을 해봐도 번역 자료도 엉망이고 여기저기 있다보니 어려움이 많았습니다. 나름대로 정리는 했지만 만족스러운 내용이 될지는 모르겠습니다.

APC의 설정파일의 경로는 이전 포스팅 #3 APC 설치에서 나와있듯이 /etc/php.d/apc.ini 입니다. vi 에디터로 파일을 열어보시면 extension=apc.so 딸랑 한 줄만 보이게 될겁니다. 그럼 이 설정 파일을 채워보도록 하겠습니다.

이게 APC 설정파일의 내용입니다. 모든 설정이 포함된 것은 아니지만 나름 정리를 해봤습니다. 설정 중 apc.mmap_file_mask 항목은 실제 파일이 저장되진 않지만 임시 데이터가 생성되는 공간입니다. 실제 경로와 맞지 않는다면 실행되지 않으니 참고바랍니다.

저사양 서버 성능 최적화 하기 (#3 APC 설치)

APC (Alternative PHP Cache) 에 대한 설치 방법을 소개합니다.

APC란 PHP 페이지를 호출할때마다 해석하지 않고 미리 HTML 문서로 저장해두었다가 사용자에게 별다른 처리과정 없이 보여주는 캐싱 모듈입니다. 이를테면 WP-Super Cache와 비슷한 원리이죠. 하지만 WP-SuperCache와는 다른 퍼포먼스 경험을 하실 수 있습니다.

설치방법은 몹시 간단합니다. 그런데 국내 블로그에는 제대로 된 정보가 없어서 아쉽더군요. yum 패키지 설치 기준으로 설명드리겠습니다.

 

1. 관련 모듈 설치

 

2.  APC 설치

-> 이 과정에서 선택을 하라는 메세지가 5번 정보 나오게 됩니다. 이때 5번 정보 엔터(NO)를 쳐주고 가볍게 넘어갑니다.

 

3. apc.ini 초기화

-> /etc/php.d/apc.ini 파일에 모듈 초기화 코드를 추가합니다.

 

4. 아파치 재시작

 

5. 설치확인 : 웹 루트에 빈파일을 생성하고 phpinfo(); 코드를 넣은후 웹페이지에서 확인합니다. APC라는 단어가 맨 아래 큼직하게 출력되면 설치가 된겁니다.

 

6. API 관리 페이지 복사

-> /ust/share/pear/apc.php 파일을 본인의 웹루트에 복사합니다. 복사 후 파일명은 apc.php가 아니어도 무방합니다.

 

7. 관리자 접속 정보 설정

-> 관리자 기능을 접속할 아이디와 암호를 입력합니다.

 

이제 설치는 완료되었습니다. 다음 포스팅에서는 APC 의 세부 설정 방법을 알려드리겠습니다.

 

저사양 VPS 서버 성능 최적화 하기

(#4 APC 설정)