Is it possible to run a PHP app using tomcat?
Before you tell me to just use httpd, I already have a Java application running on my webserver at host/myapp
. Now I want to install RoundCube at host/roundcube.
One is PHP and one is Java. I keep seeing offhand references saying this is possible but no real instructions. I do not want to put them on separate ports, I need the standard HTTP and HTTPS ports.
Does anyone have any resources for this?
Yes it is Possible Will Den. we can run PHP code in tomcat server using it\'s own port number localhost:8080
here I\'m writing some step which is so much useful for you.
How to install or run PHP on Tomcat 6 in windows
download and unzip PHP 5 to a directory, c:\\php-5.2.6-Win32
- php-5.2.9-2-Win32.zip Download
download PECL 5.2.5 Win32 binaries - PECL 5.2.5 Win32 Download
rename php.ini-dist
to php.ini
in c:\\php-5.2.6-Win32
Uncomment or add the line (remove semi-colon at the beginning) in php.ini
:
;extension=php_java.dll
copy php5servlet.dll
from PECL 5.2.5 to c:\\php-5.2.6-Win32
copy php_java.dll
from PECL 5.2.5 to c:\\php-5.2.6-Win32\\ext
copy php_java.jar
from PECL 5.2.5 to tomcat\\lib
create a directory named \"php\"
(or what ever u like) in tomcat\\webapps
directory
copy phpsrvlt.jar
from PECL 5.2.5 to tomcat\\webapps\\php\\WEB-INF\\lib
Unjar or unzip phpsrvlt.jar
for unzip use winrar or winzip for unjar use : jar xfv phpsrvlt.jar
change both net\\php\\reflect.properties
and net\\php\\servlet.properties
to library=php5servlet
Recreate the jar file
-> jar cvf php5srvlt.jar net/php/.
PS: if the jar file doesnt run you have to add the Path to system variables for me I added C:\\Program Files\\Java\\jdk1.6.0\\bin; to System variables/Path
create web.xml
in tomcat\\webapps\\php\\WEB-INF
with this content:
<web-app version=\"2.4\"
xmlns=\"http://java.sun.com/xml/ns/j2ee\"
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance \"
xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd \">
<servlet>
<servlet-name>php</servlet-name>
<servlet-class>net.php.servlet</servlet-class>
</servlet>
<servlet>
<servlet-name>php-formatter</servlet-name>
<servlet-class>net.php.formatter</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>php</servlet-name>
<url-pattern>*.php</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>php-formatter</servlet-name>
<url-pattern>*.phps</url-pattern>
</servlet-mapping>
</web-app>
Add PHP path( c:\\php-5.2.6-Win32
) to your System or User Path in Windows enironment (Hint: Right-click and select Properties from My Computer
create test.php
for testing under tomcat\\webapps\\php
like
Restart tomcat
browse localhost:8080/php/test.php
It\'s quite common to run Tomcat behind Apache. In Apache you can then direct certain URLs to Tomcat, and have Apache/PHP handle the others (including the static images).
(On Unix, Tomcat itself cannot securely made to run on port 80, while Apache can. Tomcat, being a Java process, would be required to run as root, while Apache will switch to non-root privileges as soon as port 80 has been claimed. So, running Apache on port 80 and have it redirect some or all requests to Tomcat, is quite common on Unix.)
Caucho Quercus can run PHP code on the jvm.
A tad late, but here goes.
How about http://wiki.apache.org/tomcat/UsingPhp if you just want to run the real php on tomcat.
Concerning running tomcat on port 80 there\'s always jsvc, just google jsvc + tomcat.
There this PHP/Java bridge. This is basically running PHP via FastCGI. I have not used it myself.
tomcat is designed as JSP servlet container. Apache is designed PHP web server. Use apache as web server, responding for PHP request, and direct JSP servlet request to tomcat container. should be better implementation.
If anyone\'s still looking -
Quercus has a war that allows to run PHP scripts in apache tomcat or glassfish. For a step by step guide look at this article
- Make sure you have php installed on your server
- Find the latest release of php-java-bridge off of sourceforge
- From the exploded directory on Sourceforge, download
php-servlet.jar
and JavaBridge.jar
- Place those jar files into
webapp/WEB-INF/lib
folder of your project
- Edit webapp/WEB-INF/web.xml to look like:
ok
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<web-app>
<filter>
<filter-name>PhpCGIFilter</filter-name>
<filter-class>php.java.servlet.PhpCGIFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PhpCGIFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- the following adds the JSR223 listener. Remove it if you don\'t want to use the JSR223 API -->
<listener>
<listener-class>php.java.servlet.ContextLoaderListener</listener-class>
</listener>
<!-- the back end for external (console, Apache/IIS-) PHP scripts; remove it if you don\'t need this -->
<servlet>
<servlet-name>PhpJavaServlet</servlet-name>
<servlet-class>php.java.servlet.PhpJavaServlet</servlet-class>
</servlet>
<!-- runs PHP scripts in this web app; remove it if you don\'t need this -->
<servlet>
<servlet-name>PhpCGIServlet</servlet-name>
<servlet-class>php.java.servlet.fastcgi.FastCGIServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>PhpJavaServlet</servlet-name>
<url-pattern>*.phpjavabridge</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>PhpCGIServlet</servlet-name>
<url-pattern>*.php</url-pattern>
</servlet-mapping>
</web-app>
You may have other content inside this file, just make sure you have added everything between the web-app tag.
- Add your php files to the webapp directory
You can do other special things with this as well. You cal learn more about it here: http://php-java-bridge.sourceforge.net/pjb/how_it_works.php