지난 1.5주일정도? 동안... php을 bytecode으로 바꿔서 배포하는 방법을 구상했었다.
하지만 지금.. 내가 내린 결론은, 불가능하다 이다.
php 5.3버전 이하에는 bcompiler이란 extension이 있다.
php소스를 bytecode으로 변환하는 확장라이브러리이다.
하지만 5.3버전 이후에는 bcompiler가 호환되지 않는다.
php에서 공식적으로 bcompiler을 없앤데는 다 이유가 있었을 터인데...
왜 객기를 부려서 다시 이걸 만들려고 했는지...ㅠㅠ
나는 opcache을 통해서 php코드를 bytecode으로 저장하는걸 만들려고 했다.
간단하게 opcache을 수정해서 php을 opcache파일 (bytecode)으로 저장하는 건 가능했지만.
Serialize 구조상 32bit에서 변환한 bytecode을 64bit에서 사용하지 못하고,
그 반대도 불가능하다.
(그 이유는 void* 형의 크기가 32bit/64bit platform에서 다르기 때문인데
opcache serialze는 직렬화된 메모리에 값을 복사하고 기존의 void* 포인터를 메모리 offset으로 치환하는
방법을 사용한다.)
32bit/64bit 모두 지원하는 bytecode 저장프로그램을 만들려면 기존의 serialze부분과 struct을 싹다 바꿔야 하는데
하다가 포기했다..
두번째 문제는 더 심각?한데... php버전마다 bytecode가 100%호환되지 않는단 것이다.
이건 뭐 한줄이면 설명된다.
php을 안전하게 배포할 수 있는 방법은 일단 불가능하고, 어느정도 안전하게 배포하는것도 어렵다..
보안이 중요한 코드라면 걍 컴파일된 jsp으로 배포하는게 낫다.
(cgi을 쓰던가;;;)
댓글