tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sebastian Bergmann <li...@sebastian-bergmann.de>
Subject Integrating PHP 4 with Tomcat
Date Sat, 27 Oct 2001 15:55:24 GMT
  (I already tried twice today to send this posting to tomcat-user@, but
  it did not went through, as of yet. As I think it more likely to get an
  answer to my problem on this list, I sent it here now. Sorry if I'm out
  of the line or off-topic here.)

  Hello there!

  I'm new to this list, so I'll introduce myself quickly: As one can
  already guess from this mail's From: header - my name is Sebastian 
  Bergmann. I am a 23 years old computer science student from Germany and
  involved in various Open Source projects, most actively with PHP and
  phpOpenTracker.

  This semester I'm attending a cource at my university that focuses on
  Apache's Tomcat and Cocoon2 projects. Although I like Java as a
  programming language, I never used it in 'real world' applications, but
  only for University projects.

  Beeing 'confronted' with the concepts of Tomcat and Cocoon2 I 
  remembered Sam Ruby's Java Servlet SAPI [1] implementation for PHP 4.
  This SAPI modules enables the execution of the PHP processor as a
  Servlet.

  Having already installed Tomcat 4.0 and Cocoon 2.0 RC1 on my Win2K box
  I decided to install the PHP 4 servlet SAPI module first [2] in such a 
  way, that Tomcat would be able to execute .php scripts.

  Sam Ruby writes in the Java Servlet SAPI readme:

    "add phpsrvlt.jar to CLASSPATH
     add directory containing php4ts.dll and phpsrvlt.dll to PATH
     merge/overwrite build\tomcat\examples\WEB-INF\web.xml from 
     sapi\servlet"

  Given the fact that Sam Ruby wrote this over a year ago and for Tomcat
  3.x, some things must have changed.

  One thing I found out is that CLASSPATH is beeing overwritten by
  catalina.bat, which caused the phpsrvlt.jar not be found. I solved
  this problem by changing line 75 of catalina.bat to

    set CLASSPATH=%CP%;%_CLASSPATH%

  Another problem I came across is a parse error in the web.xml, that
  comes with the Java Servlet SAPI:

    <web-app>
      <servlet>
        <servlet-name>
          php
        </servlet-name>
        <servlet-class>
          net.php.servlet
        </servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>
          php
        </servlet-name>
        <url-pattern>
          *.php
        </url-pattern>
      </servlet-mapping>
      <servlet>
        <servlet-name>
          php-formatter
        </servlet-name>
        <servlet-class>
          net.php.formatter
        </servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>
          php-formatter
        </servlet-name>
        <url-pattern>
          *.phps
        </url-pattern>
      </servlet-mapping>
    </web-app>

  Tomcat accepts this configuration, if I remove everything except the
  first <servlet> and <servlet-mapping> section. The second ones are only
  needed to pretty-print a PHP script's source, so this is not dramatic.

  Having done all this, I put a simple test.php

    <?php phpinfo(); ?>

  into Tomcat/webapps/php, together with the web.xml in this directory's
  WEB-INF directory.

  When I access http://localhost:8080/php/test.php, I get this error
  message:

  A Servlet Exception Has Occurred
  Exception Report:
  javax.servlet.ServletException: Class net.php.servlet is not a Servlet
        at org.apache.catalina.core.StandardWrapper.load
        at org.apache.catalina.core.StandardWrapper.allocate
        at org.apache.catalina.core.StandardWrapperValve.invoke
        at org.apache.catalina.core.StandardPipeline.invokeNext
        at org.apache.catalina.core.StandardPipeline.invoke
        at org.apache.catalina.core.ContainerBase.invoke
        at org.apache.catalina.core.StandardContextValve.invoke
        at org.apache.catalina.core.StandardPipeline.invokeNext
        at org.apache.catalina.core.StandardPipeline.invoke
        at org.apache.catalina.core.ContainerBase.invoke
        at org.apache.catalina.core.StandardContext.invoke
        at org.apache.catalina.core.StandardHostValve.invoke
        at org.apache.catalina.core.StandardPipeline.invokeNext
        at org.apache.catalina.valves.AccessLogValve.invoke
        at org.apache.catalina.core.StandardPipeline.invokeNext
        at org.apache.catalina.core.StandardPipeline.invoke
        at org.apache.catalina.core.ContainerBase.invoke
        at org.apache.catalina.core.StandardEngineValve.invoke
        at org.apache.catalina.core.StandardPipeline.invokeNext
        at org.apache.catalina.core.StandardPipeline.invoke
        at org.apache.catalina.core.ContainerBase.invoke
        at org.apache.catalina.connector.http.HttpProcessor.process
        at org.apache.catalina.connector.http.HttpProcessor.run
        at java.lang.Thread.run(Thread.java:484)
  
  Root Cause:
  java.lang.ClassCastException: net.php.servlet
        at org.apache.catalina.core.StandardWrapper.load
        at org.apache.catalina.core.StandardWrapper.allocate
        at org.apache.catalina.core.StandardWrapperValve.invoke
        at org.apache.catalina.core.StandardPipeline.invokeNext
        at org.apache.catalina.core.StandardPipeline.invoke
        at org.apache.catalina.core.ContainerBase.invoke
        at org.apache.catalina.core.StandardContextValve.invoke
        at org.apache.catalina.core.StandardPipeline.invokeNext
        at org.apache.catalina.core.StandardPipeline.invoke
        at org.apache.catalina.core.ContainerBase.invoke
        at org.apache.catalina.core.StandardContext.invoke
        at org.apache.catalina.core.StandardHostValve.invoke
        at org.apache.catalina.core.StandardPipeline.invokeNext
        at org.apache.catalina.valves.AccessLogValve.invoke
        at org.apache.catalina.core.StandardPipeline.invokeNext
        at org.apache.catalina.core.StandardPipeline.invoke
        at org.apache.catalina.core.ContainerBase.invoke
        at org.apache.catalina.core.StandardEngineValve.invoke
        at org.apache.catalina.core.StandardPipeline.invokeNext
        at org.apache.catalina.core.StandardPipeline.invoke
        at org.apache.catalina.core.ContainerBase.invoke
        at org.apache.catalina.connector.http.HttpProcessor.process
        at org.apache.catalina.connector.http.HttpProcessor.run
        at java.lang.Thread.run(Thread.java:484)
  
  Any ideas on what I could be doing wrong here, or what could be amiss
  with PHP's Java Servlet SAPI, since it's code hasn't changed since
  its original submission by Sam Ruby last year?

  Greetings,
Sebastian

  [1] SAPI is PHP 4's server abstraction layer.

  [2] The next step beeing to use PHP as a generator with Cocoon2.

-- 
  Sebastian Bergmann
  http://sebastian-bergmann.de/                 http://phpOpenTracker.de/

  Did I help you? Consider a gift: http://wishlist.sebastian-bergmann.de/

--
To unsubscribe, e-mail:   <mailto:tomcat-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-dev-help@jakarta.apache.org>


Mime
View raw message