태그 Archives: php 5.6

php 5.6이상 fsockopen 문제

php 5.6 이상 버전에서 인증서를 확인하는 옵션인 verify_peer 의 값이 flase => true로 변경이 되었다.
때문에 이와 관련하여 (대부분 PG연동) php 5.6 버전과 php 7.0 버전은 PG결재 진행이 안될 수 있다.
http://php.net/manual/kr/migration56.openssl.php

  • 서버의 php 버전이 5.6 이상이고 외부로 HTTPS 통신을 할때 발생한다.

에러메세지는 대략 다음과 같다.
Warning: fsockopen(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in

 

일반적으로 신뢰할수 있는 CA 값을 서버에 /etc/pki/tls/cert.pem 에 저장하고 있다.(아래 명령어로 확인)

단지 특정 외부에서 사용하는 인증서의 ROOT CA 가 서버내 ca-certificates  파일내에 없는것이다 ‘ㅅ’a

해결을 위해서는 서버에 ca-certificates 을 업데이트 하면 되겠다.

해결이 안된다면 아래와 같이 인증서 확인을 끄는 방법으로 php 소스코드를 수정해야 한다.

 

원본: 작동불가 코드

위와 같은 fsockopen 을 아래와 같이 stream_socket_client 으로 대체 하면서
verify_peer 와 verify_host 를 false 로 옵션을 변경하는것으로 해결이 가능하다.

수정본: 작동가능 코드

php 소수 수정을 이용한 해결 방법은 아래 글을 참조하였습니다 🙂
https://blog.e2info.co.jp/2015/12/29/php5-6でカード決済できない

 

php 5.5 혹은 php 5.6 일때 php.ini 설정.

# 호환성이나 개발환경을 고려하여 킨다.
short_open_tag = On

# 보안상 끈다.
expose_php = Off
allow_url_fopen = Off

# 자세한 설명은 생략한다 – -!
error_reporting = “E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE”

# GET => POST => COOKIE => ENV => SERVER
variables_order = EGPCS

# post 사이즈는 패리티 비트를 포함하는 통신 규격상
파일 업로드 크기보다 20% 높게 지정해야 한다. 8bit=>10bit 전송관련.
post_max_size = 25M
upload_max_filesize = 20M

# 5.5 이전까지는 주석 처리 되었으나 5.6 부터 UTF-8로 고정된다.
걍 그대로 쓰는것을 추천하지만. euc-kr 문서 깨지는 것을 방지하기 위해서는 아래와 같이 한다.
default_charset = “”

OP캐시는 php 5.5 부터 추가된 php 가속&캐싱 확장모듈이다.
아래는 웹호스팅용 으로 편집한 값이며 대상 목표 사이트는 약 200개 이다.
zendguard 를 도입할경우 zendguard배포본에 포함된 opcache.so 파일로 대체를 하고
익스텐션 로딩 순서는 ioncube -> zendguard -> opcache 순으로 불러와야 한다.

 

php 5.4 paser error

php 5.4 이후부터는 php.ini 에서 E_ALL 을 설정하더라도 paser fatal 오류를 표기 하지 않는다.

보안적인 측면이라고 생각된다. 다만 이부분은 php 개발자를 괴롭힐 것이다 ‘ㅅ’a

 

이때 php.ini 를 수정하거나 php 문안에 ini_set 을 넣어도 동작하지 않는다.
(php.ini 직접 설정은 기본적으로 표시하지 않도록 되었고,
php문서에서의 ini_set 설정은 fatal 에러시 입력한 ini_set역시 무시되기 때문.)

아래와 같은 내용을 .htaccess 파일에 넣으면 fatal 오류를 볼수 있다.

모든 에러표시는 위와 같이 설정한다.

E_ALL  (32767)

 

일반적인 서비스제공용 설정의 설정값은 22519이다.

E_ALL & ~E_STRICT & ~E_NOTICE & ~E_DEPRECATED
E_ALL  (32767) – E_STRICT (2048) – E_NOTICE (8) – E_DEPRECATED(8120) = 22519

 

아래는 Error Level Constants 별 번호 이다.
E_WARNING(2)
E_NOTICE(8)
E_STRICT(2048)
E_DEPRECATED(8192)
E_ERROR(1)

E_PARSE(4)
E_CORE_ERROR(16)
E_CORE_WARNING(32)
E_COMPILE_ERROR(64)
E_COMPILE_WARNING(128)
E_USER_ERROR(256)
E_USER_WARNING(512)
E_USER_NOTICE(1024)
E_RECOVERABLE_ERROR(4096)
E_USER_DEPRECATED(16384)
계산기 : http://www.bx.com.au/tools/ultimate-php-error-reporting-wizard