Instalar Puente PHP-Java en Tomcat
Índice de contenidos.
- 1. Introducción
- 2. Entorno
- 3. Instalación de PHP
- 4. Instalación del Puente PHP-Java en Tomcat
- 5. Probar el Puente PHP-Java
- 6. Documentación
1. Introducción
Hace ya algún tiempo que publicamos un tutorial de cómo se instalaba el Puente PHP-Java en un servidor web Apache.
Algo ha llovido desde entonces y las versiones, por suerte, han cambiado para bien, ahora la instalación es mucho más sencilla. Bastará con tener una instalación de PHP, un Apache Tomcat y el JavaBridge.war para tenerlo todo perfectamente montado. Manos a la obra.
2. Entorno.
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil Asus G50Vseries (Core Duo P8600 2.4GHz, 4GB RAM, 320 GB HD).
- Sistema operativo: Windows 7
- PHP 5.3 (http://windows.php.net/download/)
- Apache Tomcat 6.x (http://tomcat.apache.org/download-60.cgi)
- PHP/Java Bridge 6.1.2 (http://sourceforge.net/projects/php-java-bridge/)
3. Instalación de PHP
La instalación de PHP es muy sencilla. Bastará con descargar el .zip y descomprimirlo en C:\PHP o bien en C:\Program Files\PHP\
El contenido del zip es el siguiente:
Es necesario añadir al path del sistema el directorio donde se encuentra PHP instalado. Para ello creamos la variable PHP_HOME=C:\Program Files\PHP\ y la añadimos al path del sistema: PATH=%PHP_HOME%;…
4. Instalación del Puente PHP-Java
Suponiendo que ya tenemos instalado el Apache Tomcat, la instalación del Puente PHP-Java se limita a dejar el zip
php-java-bridge_6.1.2_documentation.zip
Una vez descomprimido dejamos el JavaBridge.war en el directorio webapps del Tomcat. Este war contiene los jars del JavaBridge (JavaBridge.jar, php-servlet.jar…) y también un conjunto de ejemplos de utilización
del puente PHP-Java por lo que es aconsejable instalarlo así para entender su funcionamiento.
Una vez copiado el JavaBridge.war arrancamos el Tomcat
5. Probar el Puente PHP-Java
Una vez arrancado el Tomcat, para probar que se ha desplegado correctamente la aplicación que contiene el puente, accedemos a http://localhost:8080/JavaBridge. Si todo ha ido bien nos saldrá la siguiente pantalla:
El phpinfo() nos devuelve que todo está correctamente instalado
Para probar que funciona correctamente el puente podéis jugar a adivinar el número secreto que trae como ejemplo de aplicación hecha en Java accedida a través de php
Lo importante, cuando desarrollemos el código de una página PHP y queramos llamar a lógica de negocio en Java es incluir la llamada al Java.inc necesaria para
poder invocar a clases Java con la sintaxis PHP.
Para probar ésto creamos un prueba.php con el siguiente contenido:
getProperties(); ?>
Accediendo al prueba.php podemos comprobar que aparecen todas las propiedades del sistema
6. Documentación
Aunque no tiene mucho más misterio la configuración, siempre está bien echarle un vistazo a la documentación oficial.
Excelente tutorial! ha sido mi guía para instalar el php/java bridge de manera exitosa. Solo un detalle que puede sucerle a alguien en el futuro: en mis configuraciones estaba usando IIS 7 (Windows Vista Business), junto con Tomcat 6.032 y PHP 5.3.3 .Al colocar un script de php que llamaba las clases en java desde la carpeta C:\\\\inetpub\\\\wwwroot (esta es la carpeta donde colocas los documentos web para que corran en tu servidor local en IIS) me arrojaba el siguiente error:
\\\»http:// wrapper is disabled in the server configuration by allow_url_include=0\\\».
Ahora bien, lo que hay que hacer es ir al php.ini y buscar la variable allow_url_include que por defecto está en \\\»Off\\\». Se coloca en \\\»On\\\» y te fijas si la variable allow_url_fopen también esta en \\\»On\\\». Guardas los cambios en el php.ini y reinicias el servidor (IIS como Tomcat). Vuelves a intentar correr el script y \\\»hagase la magia\\\»!!.
Muchas gracias por la aportación.
Exclente tutorial ha sido de mucha ayuda! Sin embargo tengo una pregunta, espero me puedan ayudar..
desde mi phpinfo(), me deberia aparecer algo de java??
y si no me aparece quiere decir que hay mal instalado?..
y si hay algo mal instalado xq este ejemplo me funciona
getProperties();
? >
Gracias por la ayuda que me puedan prestar!
gracias por el tutorial, todo me salio bien, me corrio mi codigo de java en el documento de php; pero tengo una duda, cuando deseo conectarme a mysql me sale error, el error que me sale es el siguuiente
javax.servlet.ServletException: java.lang.RuntimeException: PHP Fatal error: Call to undefined function mysql_connect() in D:\\\\Liferay\\\\tomcat-6.0.18\\\\webapps\\\\JavaBridge\\\\formulario\\\\index.php on line 6
php.java.servlet.fastcgi.FastCGIServlet.handle(FastCGIServlet.java:499)
php.java.servlet.fastcgi.FastCGIServlet.doPost(FastCGIServlet.java:509)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
php.java.servlet.PhpCGIFilter.doFilter(PhpCGIFilter.java:126)
causa ra�z
java.lang.RuntimeException: PHP Fatal error: Call to undefined function mysql_connect() in D:\\\\Liferay\\\\tomcat-6.0.18\\\\webapps\\\\JavaBridge\\\\formulario\\\\index.php on line 6
php.java.servlet.fastcgi.FastCGIServlet.parseBody(FastCGIServlet.java:409)
php.java.servlet.fastcgi.FastCGIServlet.execute(FastCGIServlet.java:433)
php.java.servlet.fastcgi.FastCGIServlet.handle(FastCGIServlet.java:481)
php.java.servlet.fastcgi.FastCGIServlet.doPost(FastCGIServlet.java:509)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
php.java.servlet.PhpCGIFilter.doFilter(PhpCGIFilter.java:126)
la conexion la pruebo en mi appserver y normal me funciona, si se puede conectar a mysql, pero cuando solo ejecuto el apache tomcat, me sale ese error cuando deseo realizar la conexion a mysql
Buenos dias, yo trabajo con php desde hace un tiempo y lo tengo instalado utilizando appserv y el tomcat lo instale atraves de netbeans, comprobe que la variable del path de php estuviese añadida al path del sistema y nada, no logro que corra el tomcat, tengo ademas el glasfish y dice que esta en el puerto 8080 y el tomcat en el 8084, segui los pasos utilizando ambos puerto y no logro que funcione. Agradeceria si me pueden dar alguna luz ya que tengo un poco más de una semana tratando de hacer esto y no me ha sido posible. Gracias
Muchas gracias. Me sirvió al igual que el primer comentario. Aunque haría alguna pregunta, ¿Es tan rápido el uso de el Puente con JAVA como sólo usar PHP?
Por ser Java compilado sería más rápido que un intérprete pero por ser un puente, supongo que le resta.
me manda este error ¿alguien podría ayudarme?
type Informe de Excepción
mensaje php.java.bridge.http.FCGIConnectException: Could not connect to server
descripción El servidor encontró un error interno que hizo que no pudiera rellenar este requerimiento.
excepción
javax.servlet.ServletException: php.java.bridge.http.FCGIConnectException: Could not connect to server
php.java.servlet.fastcgi.FastCGIServlet.init(FastCGIServlet.java:133)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2522)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2511)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
causa raíz
php.java.bridge.http.FCGIConnectException: Could not connect to server
php.java.bridge.http.NPChannelFactory.test(NPChannelFactory.java:64)
php.java.servlet.fastcgi.FastCGIServlet.init(FastCGIServlet.java:131)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2522)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2511)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
causa raíz
java.io.IOException: File \.pipeC:apache-tomcat-7.0.64tempJavaBridge6703328837717099188.socket not writable
php.java.bridge.http.FCGIConnectException.(FCGIConnectException.java:37)
php.java.bridge.http.NPChannelFactory.test(NPChannelFactory.java:64)
php.java.servlet.fastcgi.FastCGIServlet.init(FastCGIServlet.java:131)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2522)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2511)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
causa raíz
java.io.IOException: PHP not found. Please install php-cgi. PHP test command was: [php-cgi, -v]
php.java.bridge.Util$Process.start(Util.java:1145)
php.java.servlet.fastcgi.FCGIProcess.start(FCGIProcess.java:68)
php.java.bridge.http.NPChannelFactory.doBind(NPChannelFactory.java:94)
php.java.bridge.http.FCGIConnectionFactory.runFcgi(FCGIConnectionFactory.java:88)
php.java.bridge.http.FCGIConnectionFactory$1.run(FCGIConnectionFactory.java:109)
nota La traza completa de la causa de este error se encuentra en los archivos de diario de Apache Tomcat/7.0.64.
Buen día!
sí estoy utilizando xampp para correr php y tomcat , ¿como instalo el bridge java/php?
muy buena dia la version de Apache tomcat 7.x es compatible con PHP 5.3.8
Hola, una pregunta cómo puedo instalar Java Bridge en el servidor AppServer? Ayuda por favor!!!
Muchas gracias, me ayudo mucho. Ahora estoy intentado trabajar con los reportes en jasperreports con php algun consejo? 🙂
Una consulta php termina corriendo de tomcat o comunica el codigo php de un apache a un codigo java dentro de un tomcat. Pregunto porque no vi que nombrara un apache en software utilizado.
Ayuda..
Eh realizado todos los pasos y al verificar la instalación me abre correctamente la información de php_versión, sin embargo cuando creo un archivo .php en otro folder que no sea JavaBrige no lo reconoce, únicamente si el archivo está en la carpeta JavaBridge, usando: require_once(«java/Java.inc»); pero si creo una nueva carpeta en /apache-tomcat/webapps/<> y cambio la ruta a require_once(«../JavaBridge/java/Java.inc»), deja de funcionar.