PHP in GlassFish using Caucho Quercus

Quercus is Caucho Technology's 100% Java implementation of PHP 5. Ludo described the steps to deploy PHP web applications on GlassFish. Caucho has released a new version of Quercus since then. This blog entry is an update to the steps described earlier.

  1. First, PHP-enable GlassFish.
    1. Unjar quercus-3.1.1.war and copy the JAR files in "WEB-INF/lib" directory to "GLASSFISH_HOME/domains/domain/lib" directory. That's it! Although the original entry requires to copy the JARs in "GLASSFISH_HOME/lib/addons" directory but that didn't work.
  2. Create a PHP web application
    1. Create a new Web application project, lets say "hellophp", using NetBeans IDE and choose GlassFish as the server.
    2. Replace the contents of "web.xml" with the following fragment:

      <?xml version="1.0" encoding="UTF-8"?>
      <web-app xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        version="2.5">
        <description>Caucho Technology's PHP Implementation, Running on GlassFish Java EE 5</description>
        <servlet>
          <servlet-name>Quercus Servlet</servlet-name>
          <servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class>
        </servlet>
        <servlet-mapping>
          <servlet-name>Quercus Servlet</servlet-name>
          <url-pattern>\*.php</url-pattern>
        </servlet-mapping>
        <welcome-file-list>
          <welcome-file>index.php</welcome-file>
        </welcome-file-list>
      </web-app>


      This will declare PHP engine as the servlet.
    3. Add a new page "index.php" in "Web pages" folder. The contents of the page are:

      <?php
      echo "Hello World!";
      phpinfo();
      ?>

      This page prints "Hello World!" on the browser and some configuration settings of PHP. The directory structure of the created project looks like:

      META-INF/
      META-INF/MANIFEST.MF
      WEB-INF/
      WEB-INF/classes/
      WEB-INF/sun-web.xml
      WEB-INF/web.xml
      index.jsp
      index.php

      Notice, "index.jsp" is only a template file to get started with JSPs and "sun-web.xml" is GlassFish-specific deployment descriptor. These files are not required for this PHP application although it does not hurt to leave them in the webapp as well.
  3. Deploy the application by right-clicking on the project and selecting "Deploy Project". Your first PHP application in GlassFish is now deployed at "http://localhost:8080/hellophp/index.php".

Now that you have verified that your GlassFish is ready to host PHP applications, try the different applications that are described in Ludo's blog.

Technorati: php glassfish caucho quercus

Comments:

[Trackback] jMaki is a light-weight framework for build Web 2.0 applications. It provides support for multiple languages - Java (1, 2, 3, 4, 5, 6) , PHP, Ruby (1, 2), Phobos (1). The numbers in parentheses indicate the entries that I've...

Posted by Arun Gupta's Blog on August 23, 2007 at 11:08 PM PDT #

Since your adding quercus capabilities to a an entire domain, you might as well modify config/default-web.xml .

I imagine using NetBeans here is for further PHP->Java integration.

Also, is Quercus 3.1.1 new?

Posted by Alexis MP on August 24, 2007 at 12:33 AM PDT #

Yeah 3.1.1 is new and does not require php.ini. NetBeans is useful for two purposes:

1). It creates a template webapp project easily.
2). The reason you mentioned.

I'm not fully aware of the purpose of modifying default-web.xml. The name seems to indicate it's the default web.xml if none is packaged in webapp. Is that right ?

Posted by Arun Gupta on August 24, 2007 at 12:48 AM PDT #

thanks

Posted by 月饼 on August 26, 2007 at 03:51 AM PDT #

Glassfish and Quercus works fine!

But, what about datasources? I 've been experimenting with the pg_connect() call in php to access a PostGreSql db with no success.
There's a good tutorial for Resin here http://quercus.caucho.com/quercus-3.1/doc/quercus-overview.xtp#databases

How´s this done in Glassfish?

Thanks

Posted by Fredrik W on October 10, 2007 at 06:09 PM PDT #

Is the datasource problem solved?

I spend a lot of time trying to get pg_connect working, but no success :-/

Thanks!

Posted by Searle on March 08, 2008 at 03:09 AM PST #

The description above gives support for PHP per WAR-module which is cool. BUT if one want it generally it's just to include this servlet definition in the file default-web.xml:

<!-- PHP support -->
<servlet>
<servlet-name>Quercus Servlet</servlet-name>
<servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Quercus Servlet</servlet-name>
<url-pattern>\*.php</url-pattern>
</servlet-mapping>

Posted by Niklas Norberg on June 02, 2008 at 09:03 PM PDT #

If anyone is trying to configure default-web.xml, use php not just in webapps but anything in docroot folder and also use a custom php.ini, I found this path works since there is no WEB-INF for docroot:

<servlet>
<servlet-name>Quercus Servlet</servlet-name>
<servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class>
<init-param>
<param-name>ini-file</param-name>
<param-value>../config/php.ini</param-value>
</init-param>
</servlet>

If you use phpinfo() to display the php.ini location, it always says WEB-INF/php.ini no matter what. That must be a bug.

Posted by pkcinna on June 19, 2008 at 09:25 AM PDT #

You need to add the datasource in your web.xml:

<resource-ref>
<res-ref-name>jdbc/base</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

I used PDO to access it:

<?php
$pdo = new PDO("java:comp/env/jdbc/base");
echo "<table border=1>"
$sql = "SELECT valor FROM Tabla1";
foreach ($pdo->query($sql) as $renglon) {
echo "<tr><td>$renglon[valor]</td></tr>";
}
echo "</table>"
?>

For a complete tutorial (in Spanish), visit programacioncotidiana.blogspot.com/2011/02/tutorial-como-acceder-sybase-desde-php.html

Posted by Arturo Tena on February 19, 2011 at 06:37 PM PST #

Post a Comment:
Comments are closed for this entry.
About

profile image
Arun Gupta is a technology enthusiast, a passionate runner, author, and a community guy who works for Oracle Corp.


Java EE 7 Samples

Stay Connected

Search

Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today