X

PHP in GlassFish using Caucho Quercus

Guest Author

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

Join the discussion

Comments ( 9 )
  • Arun Gupta's Blog Friday, August 24, 2007
    [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...
  • Alexis MP Friday, August 24, 2007

    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?


  • Arun Gupta Friday, August 24, 2007

    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 ?


  • &#26376;&#39292; Sunday, August 26, 2007

    thanks


  • Fredrik W Thursday, October 11, 2007

    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


  • Searle Saturday, March 8, 2008

    Is the datasource problem solved?

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

    Thanks!


  • Niklas Norberg Tuesday, June 3, 2008

    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>


  • pkcinna Thursday, June 19, 2008

    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.


  • Arturo Tena Sunday, February 20, 2011

    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


Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.