안녕 리눅스 3의 PHP 버전을 7로 올려서 release 하려고 하다보니.. 별 개삽질을 다하고 있다.
일단, PHP wiki에서 https://wiki.php.net/phpng-upgrading 를 참고하여 작업을 하면 되는데, 문제는 여기에 나와있지 않은 경우가 너무나 많다.
결국에는 PHP 소스 코드를 뒤져서 구현해야 하는.. 더군다나 여기에 나와있지 않은 hole들도 굉장히 많다. 대표적으로..
char * input;
int ilen;
int no;
if ( zend_parse_parameters (ZEND_NUM_ARGS(), "sl", &input, &ilen, &no) == FAILURE )
RETURN_FALSE;
이 코드는 컴파일을 잘 되나, 그냥 segfault 가 발생한다. s(String)과 l(integer)는 다음과 같이 해 줘야 한다.
zend_string * Zinput = NULL;
zend_long no;
char * input;
int ilen;
if ( zend_parse_parameters (ZEND_NUM_ARGS(), "Sl", &input, &no) == FAILURE )
RETURN_FALSE;
input = ZSTR_VAL (input);
ilen = ZSTR_LEN (input);
zend_parse_parameters 에서 string은 zend_string으로 변경해 줘야 하고, long은 zend_long로 선언을 변경해 줘야 한다. 이 외에도, string을 zval 변수로 변환하는 경우도 짜증난 케이스
zval *zv;
MAKE_STD_ZVAL (zv)
ZVAL_STRING (zv, "문자열");
이 코드는 다음과 같이 변경 되어야 한다.
zval zv;
ZVAL_STRING (&zv, "문자열");
,,,
zval_ptr_dtor (&zv);
이 외에도 너무 많아서 정리가 힘들다. PHP7은 잘못하면 python 3 꼴이 날지도 모르겠다. 3party module 중에서 PHP 7을 지원을 얼마나 빨리 해 주ㄴ냐가 관건인 듯.. 물론 php code 호환 문제 까지는 바라보기도 전에 말이다. (갈 길이 너무 멀다....)
내가 만든 3party 확장들은 PHP 7 지원을 위한 코드 변경이 너무 많아서, 아예 PHP 7 지원하는 버전은 하위 호환성을 포기하고 컴파일을 막아 버렸다. --;
#if PHP_API_VERSION < 20151012
#error "************ PHP version dependency problems *******************"
#error "This package requires over php 7.0.0 !!"
#error "If you build with php under 7.0.0, use mod_krisp 2.x version"
#error "You can download mod_krisp 2.x at http://mirror.oops.org/pub/oops/libkrisp/APIs/php/"
#endif
참고로..
mod_korean migraion diff 를 보면.. 얼마나 많이 변경을 해야 하는지 대충 감이 올 듯.. 이 링크는 아직도 작업이 완료되지 않은 상태이다. --;
Comments List
안녕 리눅스 2에서 openssl-1.0.1e-48.an2.1 부터 ALPN patch 가 적용이 되었습니다. 적용이 되지 않은 시스템들은 다음 명령으로 업데이트 하세요.
yum update "openssl*"