본문으로 건너뛰기

"php" 태그로 연결된 49개 게시물개의 게시물이 있습니다.

모든 태그 보기

로컬 웹서버 돌리기 - 5. CURL 설정

· 약 1분

4. OpenSSL 설정에서 이어집니다.

리눅스에서는 Curl 모듈을 확장만 하면 사용이 가능하지만 윈도우 로컬 서버에서는 사용이 되지 않는다. 해결해보자.

php.ini에서 php_curl 모듈의 주석을 해제한다. image from hexo

dll 복사

총 4 개의 dll 파일을 C:\Windows\system32 폴더로 복사해야한다.

  • php7\ libeay32.dll
  • php7\ libssh2.dll
  • php7\ ssleay32.dll
  • php7\ext\ php_curl.dll

image from hexo

이제 php curl command 를 사용할 수 있다.

로컬 웹서버 돌리기 - 4. HTTPS OpenSSL 설정

· 약 3분

3. Virtual Host 설정에서 이어집니다. 로컬에서 HTTPS 통신으로 프로젝트에 접근하시고 싶지 않으시다면 3 장으로 웹서버 구동은 완료됩니다.

모듈 활성화

Apache24\conf\httpd.conf에서 ssl_module 과 socache_shmcb_module 의 주석을 해제한다. image from hexo

설정 활성화

Include conf/extra/httpd-ssl.conf의 주석을 해제한다. image from hexo

SSL 설정 변경

디렉토리 생성

Apache24\conf 경로에서 ssl폴더를 만든 뒤 conf/openssl.cnf 파일을 ssl 폴더로 복사한다.

키 생성

ssl 폴더로 들어와 cmd 창을 연 뒤 키를 생성한다.

$ openssl genrsa -out domain.key 1024
$ openssl req -new -config openssl.cnf -days 365 -key domain.key -out domain.csr

위 명령어를 입력하면 입력 폼 형식이 나오는데, 주제에 맞게 입력하면 된다. (KR, Seoul 등)

생성된 domain.key, domain.csr 파일을 확인한 뒤 아래 명령어를 입력한다.

$ openssl x509 -in domain.csr -out domain.crt -req -signkey domain.key -days 365

완성된 파일 구조의 형태는 다음과 같아야한다. image from hexo

SSL 연동

httpd-ssl.conf를 열어 키 파일을 연동해준다. image from hexo 그 밖에 다른 경로로 연결된 설정이 있다면 바로 잡아주면 된다.

HTTPS 접속

Apache restart 후 접속해보자. image from hexo

여담

오류 발생시

오류가 발생할 경우 Apache24\logs\error.log 파일을 확인해가며 진행하면 된다.

Virtual Host 설정

Virtual Host 에 직접 key 파일을 지정할 수도 있다.

<VirtualHost *:443>
SSLEngine on
SSLCertificateFile "d:/Apache24/conf/ssl/domain.crt"
SSLCertificateKeyFile "d:/Apache24/conf/ssl/domain.key"

DocumentRoot "D:/workspace/test"
ServerName local.test.com
</VirtualHost>

👏👏👏 이로서 로컬 HTTPS 서버를 가지게 되었습니다. 다음 장에서는 서버 통신을 위해 CURL 설정을 해보겠습니다.

로컬 웹서버 돌리기 - 3. Virtual Host 설정

· 약 2분

2. PHP 설치에서 이어집니다.

Apache와 PHP의 연동은 끝났지만 사용하고 싶은 프로젝트를 연동하는 작업을 해주어야 원하는 폴더를 웹으로 볼 수 있을 것이다.

httpd.conf를 열어 맨 아래쪽으로 내리면 있는 httpd-vhost.conf의 주석을 해제한다. image from hexo

디렉토리 접근 권한 변경

httpd.conf에서 모든 디렉토리 접근권한은 기본적으로 차단되어있기에 변경해야한다.

<Directory />
Options FollowSymLinks
AllowOverride none
Order allow,deny
Allow from all
</Directory>

image from hexo

Virtual Host 설정

./conf/extra/httpd-vhosts.conf 파일을 연다. 임시로 있는 VirtualHost를 지워주고 아래처럼 내가 사용할 프로젝트를 입력한다. image from hexo DocumentRoot에는 프로젝트 경로, ServerName은 URL로 접근할 경로를 적는다.

Host 파일 수정

C:\Windows\system32\drivers\etc\hosts 파일을 관리자 권한으로 열고 주소를 추가한다.

127.0.0.1 local.test.com

저장 불가일시

잠시 hosts 파일을 수정가능하게 손을 보고 다시 오자.

연동 확인

Apache restart 후에 확인한다. image from hexo

👏👏👏 이로서 기본 웹서버 설치는 마무리 됬습니다. 다음 장에서는 HTTPS 환경을 위해 OpenSSL 설정을 해보겠습니다.

로컬 웹서버 돌리기 - 2. PHP 설치

· 약 3분

1. Apache 설치에서 이어집니다.

여기서 Apache 의 VC 버전에 맞는 Thread Safe 타입의 PHP 를 다운받으면 된다. image from hexo

압축을 풀고 Apache 와 같은 폴더에 php7 로 변경해 저장한다. (D:\php7) 폴더 안의 php.ini-developmentphp.ini로 변경한다.

모듈 활성화

사용할 모듈의 세미콜론을 지워주면 된다. image from hexo curl, mysqli, gettext, mbstring, openssl, pdomysql는 기본으로 지워주고, 나머진 나중에 지워도 된다.

설정 변경

php.ini 파일의 설정을 변경한다.

시간대 설정

date.timezone 을 추가한다. image from hexo

short_open_tag 설정

<?php<? 로도 사용할 수 있게 해주는 short_open_tag 옵션을 켠다. image from hexo

에러 리포팅 설정

에러 발생시 서버에 오류가 노출되기에 에러 노출 단계를 낮춰주자. image from hexo

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_USER_DEPRECATED

모든오류 & not runtime notice & not deprecated & not user deprecated 의 상태이면 오류를 출력한다.

확장 모듈 경로 설정

C:\php에 php 설치를 하지 않았을 경우 확장 모듈 경로를 변경해줘야한다.

extension_dir = "D:\php7\ext"

Apache에 PHP 연동

httpd.conf 파일을 열고 아래 구문을 모두 추가한다.

# 인덱스 파일 설정
DirectoryIndex index.php index.html index.htm
# 모듈 연동 (php 설치 경로를 적는다)
LoadModule php7_module "D:/php7/php7apache2_4.dll"
# 핸들러 및 타입 연동
AddHandler application/x-httpd-php .php
AddType application/x-httpd-php .php .html
# PHP INI 경로 설정
PHPIniDir "D:/php7"

image from hexo

연동 확인

D:\Apache24\htdocs 경로의 index.html 파일을 index.php 로 변경 후 저장한다.

index.php
<?
phpinfo();
?>

image from hexo

여담

php5에서 php7로 오는 중 큰 변경점이 몇 가지 있다.

  1. 속도가 php5보다 2배 향상
  2. mysql 함수 사용 불가 (Mysqli로 대체)
  3. 기본값 연산자 사용 가능 (A ?? B ?? C 로 사용가능)

👏👏👏 다음 장에서는 실제 프로젝트를 웹서버에 돌리기 위한 Virtual Host 설정을 해보겠습니다.

로컬 웹서버 돌리기 - 1. Apache 설치

· 약 2분

APM_setup 은 좋은 선택이지만, PHP 버전업에 있어서 충돌이 너무 심하고 Nginx 도 좋은 선택이지만 나중에 정리하기로 하자.

여기에서 운영체제에 맞는 버전을 다운로드 한다. image from hexo VC14, VC11 은 PHP 버전과도 관련있으니 다운받으면서 확인해 놓는다. 압축을 풀면 Apache24 폴더가 생기는데 이 폴더를 원하는 경로로 옮겨준다. (D:\Apache24)

경로 변경

C:\Apache24 에 압축을 풀었다면 #httpd-서비스-등록으로 넘어가자

Apache24/conf/httpd.conf를 열어 경로를 변경한다. image from hexo 초기 설치 상태에서 C:\로 검색시 4 개정도 찾아지는데 모두 변경해주면 된다.

httpd 서비스 등록

cmd 를 관리자 권한으로 실행 후 아래 명령어를 입력해준다.

  • Windows10 : 시작메뉴 우클릭 > 명령 프롬프트(관리자) 메뉴
  • Windows7 : 시작메뉴 > 모든 프로그램 > 보조 프로그램 > 명령 프롬프트 우클릭 > 관리자 권한으로 실행
httpd.exe -k install

image from hexo

httpd 구동

Apache24\bin\ApacheMonitor.exe 실행한 뒤 작업표시줄에서 Apache 아이콘 클릭 후 서비스를 시작한다. image from hexo

localhost 접근

image from hexo 👏👏👏 다음 장에서는 PHP 를 설치해 Apache 와 연동을 해보겠습니다.

imageTTFtext 한글 깨짐 해결

· 약 2분

텍스트를 이미지로 만드는 경우에 사용하는 imageTTFtext 함수는 한글이 깨지는 문제가 있다.

imageTTFtext 전에 아래 함수로 한글을 컨버팅해준다.

<?php
/**
* @author http://php.net/manual/en/function.imagettftext.php#57416
*/
function foxy_utf8_to_nce($utf = '') {
if (empty($utf)) {
return($utf);
}

$max_count = 5; // flag-bits in $max_mark ( 1111 1000 == 5 times 1)
$max_mark = 248; // marker for a (theoretical ;-)) 5-byte-char and mask for a 4-byte-char;

$html = "";
for ($str_pos = 0; $str_pos < strlen($utf); $str_pos++) {
$old_chr = $utf{$str_pos};
$old_val = ord( $utf{$str_pos} );
$new_val = 0;

$utf8_marker = 0;

// skip non-utf-8-chars
if ( $old_val > 127 ) {
$mark = $max_mark;
for($byte_ctr = $max_count; $byte_ctr > 2; $byte_ctr--) {
// actual byte is utf-8-marker?
if( ( $old_val &; $mark ) == ( ($mark << 1) &; 255 ) ) {
$utf8_marker = $byte_ctr - 1;
break;
}
$mark = ($mark << 1) & 255;
}
}

// marker found: collect following bytes
if ($utf8_marker > 1 && isset( $utf{$str_pos + 1} ) ) {
$str_off = 0;
$new_val = $old_val &; (127 >> $utf8_marker);
for($byte_ctr = $utf8_marker; $byte_ctr > 1; $byte_ctr--) {

// check if following chars are UTF8 additional data blocks
// UTF8 and ord() > 127
if( (ord($utf{$str_pos + 1}) & 192) == 128 ) {
$new_val = $new_val << 6;
$str_off++;
// no need for Addition, bitwise OR is sufficient
// 63: more UTF8-bytes; 0011 1111
$new_val = $new_val | ( ord( $utf{$str_pos + $str_off} ) & 63 );
}
// no UTF8, but ord() > 127
// nevertheless convert first char to NCE
else {
$new_val = $old_val;
}
}
// build NCE-Code
$html .= '&#'.$new_val.';';
// Skip additional UTF-8-Bytes
$str_pos = $str_pos + $str_off;
} else {
$html .= chr($old_val);
$new_val = $old_val;
}
}
return($html);
}

여담

원작자를 못 찾겠다.. 이걸 만든 사람은 binary 로 말을 할 것 같다.

Javascript 기본값 연산자 (축약된 삼항연산자)

· 약 1분

한번 쓰면 헤어나올 수 없는 기본값 연산자에 대해 알아보자.

소스

// JavaScript syntax to set a default value
const text = someString || "default text";
const text2 = someString || someString2 || "default text2";

설명

someString 이 있으면 someString 을 반환, 아니면 default text 를 반환한다. 계속 붙혀나가면서 쓸 수 있다.

php7 에서는 해당 기능이 추가되었다. || 대신에 ?? 를 사용하면 된다.

lodash 에선 defaultTo를 사용하면 된다.

Cross Domain Login 중 세션 생성시 IE 오류

· 약 1분

aaa.com 에서 bbb.com 의 세션을 jsonp 방식을 활용해서 생성하고 싶을 때, 유독 IE 에서만 세션 생성이 안되는 경우가 있다.

이는 P3P (Platform for Personal Preferences) 규약이 적용되어 세션을 가져오지 않는 것인데, 아래와 같은 방법으로 해결할 수 있다.

<!-- 세션을 만들어줄 서버에서 P3P 헤더를 설정 -->
<?php
header('P3P: CP="CAO PSA OUR"');
?>

<!-- 세션을 가지고 오는 클라이언트 요청-->
<script>
$.ajax({
url:'cross domain session create url',
type:'post',
data:{
token1 : 'token1',
token2 : 'token2'
},
dataType:'jsonp'
}).then(function (result) {

});
</script>