카테고리 Archives: PHP

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でカード決済できない

 

pecl 인스톨 에러 ( ERROR: `phpize’ failed )

으앙 ;ㅅ; php 에 –enable-zip 옵션을 안넣어서 추가하려고 했는데 에러가 났다.

 

pecl 빌더파일의 버그라고 한다.

패치용 파일은 다운받아서 패치하고 하면 된다.

명령어를 따라 하기전 자신에 php 경로와 맞는지 점검하는걸 잊지 말자 ‘ㅅ’a

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