PHP 모듈 작성 시 다음과 같은 오류 메세지가 나오는 경우가 있다.

error: 'PHP_FE_END' undeclared here (not in a function)


1. 

내 상황은 서버가 centos6.3 으로 php 는 rpm으로 설치되어있다.


php-devel 패키지도 설치해놨지만 ext_skel 은 없었고 구글링하다보니 src.rpm 을 던져주는 링크만 나오더라.

https://www.centos.org/forums/viewtopic.php?t=28478


2.

굳이 src.rpm으로 작업하고 싶은 생각은 없어 그냥 php-5.3.3 의 소스를 찾았지만 나오질 않는다.

그냥 php-5.3.28 을 받아 타르볼을 풀고

ext로 들어가 알려진대로


./ext_skel --extname=test_mod


cd test_mod


vi config.m4

10라인, PHP_ARG_WITH(test_mod, for test_mod support,

12라인, [  --with-test_mod             Include test_mod support])

에서 dnl 주석 해제


phpize

./configure

make


3.

뭐 이런 수순으로 스켈레톤을 빌드 해보는데 정의되지 않았다고 오류가 발생한다.

libtool: compile:  cc -I. -I/ ~~~~ :43: error: 'PHP_FE_END' undeclared here (not in a function)

make: *** [test_mod.lo] Error 1


4.

구글링해보니 PHP_FE_END는 php-5.3.10 부터 등장했단다. https://github.com/sqmk/pecl-jsmin/issues/23

이하버전에 호환되는 모듈을 뒤져보니 

{NULL, NULL, NULL}

다행히도 PHP_FE_END 대신 쓰이는 놈이 있다.

덜 게으르면 버전 확인해서 #if 하겠지만 한두개 뒤져봤을 때 PHP 버전 정의가 잘 안뵌다.

여러버전에서 자주 컴파일 할일이 있을 때 까진 그냥 이리 써야겠다.

test_mod.c :

const zend_function_entry test_mod_functions[] = {

PHP_FE(confirm_test_mod_compiled, NULL) /* For testing, remove later. */

//PHP_FE_END /* Must be the last line in test_mod_functions[] */ // PHP 5.3.10 ~

{NULL, NULL, NULL} /* Must be the last line in test_mod_functions[] */ // PHP 5.3.10 under

};


Posted by freezn

IDC에 넣기전에 초기 인스톨에서만 필요하니 iLO4 트라이얼라이센스를 받아 설치했다.


몇몇작업을 끝내고 다음날 나머지 작업을 하려하니 트라이얼라이센스가 증발해있고 다시 입력하면 이미 사용했다고 나온다.


구글링 결과 이유는 NTP 동기화로 트라이얼라이센스 설치 후 시간이 뒤늦게 갱신된 경우 트라이얼 라이센스 사용기간인 60일 이상이 점프되어 그럴 수 있다는 글이 몇몇 보인다.


iLO를 리셋하면 된다는 말이 있지만 효과가 없다.


트라이얼 같은 기간한정라이센스 설치 시 iLO시간도 확인이 필요해보인다.

Posted by freezn