커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
*
HanIRC의 #coffeenix 방
[
장비 및 회선 후원
]
> Forum <
IT 일정
N
e
w
!
자동화 프로젝트
HOME
>
프로그래밍 / 개발
>
웹 프로그래밍 / PHP
도움말
검색 :
사이트
WHOIS
웹서버 종류
php에서 JAVA class 사용위한 연동 (FreeBSD)
작성일 : 2005/10/30 01:53
글쓴이 : 좋은진호 (
http://coffeenix.net/
)
조회수 : 14392
[
이전화면
/
수정
] 비밀번호 :
제 목 : php에서 JAVA class 사용위한 php/java 연동 (FreeBSD)
글쓴이 : 좋은진호(truefeel,
http://coffeenix.net/
)
작성일 : 2005.7.12(화)~14(목)
정리일 : 2005.10.28(금)
php에 JAVA class를 호출하여 사용하기 위한 php 설정에 대해 알아본다.
JDK나 APM 설치 과정은 미리 알거라 생각하고 연동과 관련된 부분 위주로 설명할 것이다.
1. JDK 설치
FreeBSD용으로 패치된 JDK 또는 linux-sun-jdk14 를 설치한다.
make할 때 출력되는 URL에서 JDK는 직접 받아 /usr/ports/distfiles 에 복사해둬야 하는 것은 알겠죠?
#
cd /usr/ports/java/jdk14
(FreeBSD용으로 패치된 JDK) 또는
/usr/ports/java/linux-sun-jdk14
#
make install
#
cd /usr/local
#
ln -s jdk1.4.2 java
또는
ln -s linux-sun-jdk1.4.2 java
이제 환경변수 설정을 한다.
setenv JAVAHOME /usr/local/java
setenv LD_LIBRARY_PATH /usr/local/lib:/usr/lib:/usr/local/lib/php: <-- 다음줄까지 한줄로
/usr/local/lib/php/20020429:$JAVA_HOME/jre/lib/i386:$JAVA_HOME/jre/lib/i386/server
2. apache 재설치
apache가 설치되어 있다면 pthread 사용하여 재컴파일한다.
pthread를 사용하지 않고 컴파일을 하면 php에서 java class 사용시 에러가 발생할 것이다.
/usr/ports/www/apache13/Makefile 파일에서 130여번째줄 정도에서 다음을 수정한다.
CONFIGURE_ENV+= \
INCLUDES=-I${LOCALBASE}/include \
LDFLAGS=-L${LOCALBASE}/lib
대신
CONFIGURE_ENV+= \
INCLUDES=-I${LOCALBASE}/include \
LDFLAGS="-L${LOCALBASE}/lib -pthread -lc_r"
또한 대형 사이트일 경우 httpd.conf에서 MaxClients를 512 이상으로 설정할 수 있도록
HARD_SERVER_LIMIT 값을 1024나 2048로 늘린다.
CFLAGS+=-DHARD_SERVER_LIMIT=2048
이제 컴파일하자.
#
cd /usr/ports/www/apache13
#
make
#
make install clean
3. php 설치
/usr/port/lang/php4/Makefile 의 CONFIGURE_ARGS= 중간에 --with-java= 옵션을 삽입한다.
--with-java=/usr/local/java \
나머지는 apache에 php 연동하기 위한 형태로 설치를 하면 되며, 설치 후에는 다음 작업이
반드시 필요하다.
#
cd /usr/local/lib/php/20020429
#
ln -s java.so libphp_java.so
#
ls -l *java*
-rwxr-xr-x 1 root wheel 13225 7 14 13:52 java.so
lrwxr-xr-x 1 root wheel 7 7 11 17:34 libphp_java.so -> java.so
그리고, /usr/local/etc/php/extentions.ini 에 extension=java.so 추가.
/usr/local/etc/php.ini에는 [java] section 설정이 필요하다.
java.class.path= 에는 필요한 class 디렉토리나 jar 파일 full경로를 지정하면 된다.
[java]
java.class.path =/usr/local/lib/php/php_java.jar:/home/truefeel/java/lib/mysql-connector-java-...-bin.jar
java.home = /usr/local/java
java.library = /usr/local/java/jre/lib/i386/server/libjvm.so
java.library.path =/usr/local/lib/php/20020429
4. 테스트
* javaver.html
<?
// get instance of Java class java.lang.System in PHP
$system = new Java('java.lang.System');
// demonstrate property access
echo 'Java version=' . $system->getProperty('java.version') . '<br>';
echo 'Java vendor=' . $system->getProperty('java.vendor') . '<br>';
echo 'OS=' . $system->getProperty('os.name') . ' ' .
$system->getProperty('os.version') . ' on ' .
$system->getProperty('os.arch') . ' <br>';
// java.util.Date example
$formatter = new Java('java.text.SimpleDateFormat',
"EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz");
echo $formatter->format(new Java('java.util.Date'));
?>
웹브라우저에 다음과 같이 결과를 얻었다면 성공적으로 설치되었다.
Java version=1.4.2-p7
Java vendor=Sun Microsystems Inc.
OS=FreeBSD x.xx-RELEASE-px on i386
토요일, 10월 29, 2005 at 1:02:35 오전 GMT+09:00
5. 문제 해결
1)
Fatal error: Unable to locate CreateJavaVM function in
/home/truefeel/public_html/javaver.html on line 3 에러 발생
-> php.ini 의 [java] 부분에 java.library를 다음과 같이 한다.
(/usr/local/java 는 JDK의 홈 경로임)
java.library = /usr/local/java/jre/lib/i386/server/libjvm.so
2)
Fatal error: Cannot instantiate non-existent class: java in
/home/truefeel/public_html/javaver.html on line 3
-> extensions.ini 에
extension=java.so 추가
3)
php ~truefeel/public_html/javaver.html 실행시
/usr/libexec/ld-elf.so.1: /usr/local/java/jre/lib/i386/server/libjvm.so:
Undefined symbol "pthread_main_np"
또는 apache의 error.log에 위의 메시지가 남을 때
-> apache를 pthread 사용해서 재컴파일한다.
4)
php 실행시
PHP Warning: Function registration failed - duplicate name -
java_last_exception_get in Unknown on line 0
PHP Warning: Function registration failed - duplicate name -
java_last_exception_clear in Unknown on line 0
PHP Warning: java: Unable to register functions, unable to load in Unknown on line 0
-> extensions.ini 에 extension=java.so 이 2줄 이상일 때 발생
5)
php 실행시 아무 에러메시지도 없고 apache error log에도 아무것도 없으나 결과가 안나올 때
-> 환경변수 LD_LIBRARY_PATH 를 셋팅했는지 확인해봐라.
6. 참고 자료
* PHP / Java Integration (연동테스트용 예제와 설치 방법 등에 대한 설명)
http://www.php.net/java
* java & php4 + apache 1.3.x
http://lists.freebsd.org/pipermail/freebsd-questions/2003-December/029894.html
* FreeBSD+PHP+Java(jdk1.4.2)
http://blog.devep.net/adex/2005/03/11/1110477642312.html
* Re: FreeBSD + ext/java
http://aspn.activestate.com/ASPN/Mail/Message/php-install/1050662
| However, when accessing a php script containing a java call, I get:
| ---
| Fatal error: Unable to locate CreateJavaVM function in java.php on line 6
I had a similar with (php+java+freebsd), but I gave up on a similar problem.
Later I found out that the problem could possibly be solved by forcing
Apache to be built with libc_r (multithreading library) by manually
adding -pthread switch to Apache Makefile.
Please, tell me if it works for you.
커피닉스 카페 최근 글
[06/16]
[질문]SAN 스위치 브로드케이드 dcx8510-4 장비관련입니다.
[04/22]
Re: 영화속에 컴퓨터 이야기 ~스워드피쉬(2001)
[10/20]
Cross Compiler 깔
[07/14]
SSL АО
[04/26]
Re: 도스화면 원격조종 여부
[04/25]
도스화면 원격조종 여부
[10/30]
Cshell에서 난수 설정
[10/23]
공항철도주식회사 SE 구인 件
[01/26]
Re: wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
[01/25]
wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
[01/11]
특정 안드로이드 WebView 버전에서 SSL 문제 (WebView 버그)
[08/01]
DNS forwarder (전달자) 서버를 통해서 쿼리하면 역방향을 받아오질 못합니다.
[05/16]
(주)후이즈 시스템엔지니어 (경력자) 모집
[02/15]
[AWS] Cloudfront edge 확인하기
[01/20]
Mobile Service/eCommerce 기업에서 Server / Java / PHP 개발자 구인
N
e
w
! 최근에 등록한 페이지
KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
오픈캐스케이드 캐드 (OpenCASCADE CAD)
QCad for Windows --- GNU GPL (Free Software)
The Hello World Collection
IPMI를 활용한 리눅스 서버관리
DNS 설정 검사
nagiosgraph 설치 방법
Slony-I 설치 방법 (postgresql replication tool)
Qmail기반의 Anti spam 시스템 구축하기
clusterssh
[ 함께하는 사이트 ]
운영진 :
좋은진호(truefeel)
, 야수(yasu), 범냉이, sCag
2003년 8월 4일~