2011-02-24 212 views
3

我想配置,以便jetty运行PHP文件,但迄今为止一直没有成功。我的Eclipse IDE中安装了Jetty WTP工具。码头服务器运行php代码

当我启动Jetty服务器。我收到了以下异常:java.lang.ClassNotFoundException org.mortbay.servlet.CGI:org.mortbay.servlet.CGI and javax.servlet.UnavailableException:org.mortbay.servlet.CGI。我把一个简单的php文件(index.php)放在我的WebContent文件夹下。我还下载了这个library并将其添加到类路径(Eclipse:构建路径并添加外部jar)。现在我不知道我做错了什么。我还编写PHP搭配:

./configure --with-fastcgi=/usr/local 
make 
sudo make install 

我的web.xml文件看起来是这样的:

<?xml version="1.0" encoding="UTF-8"?> 
<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"> 
    <display-name>Sample PHP Application</display-name> 
    <servlet> 
     <servlet-name>PHP</servlet-name> 
     <servlet-class>org.mortbay.servlet.CGI</servlet-class> 
     <init-param> 
      <param-name>commandPrefix</param-name> 
      <param-value>/usr/local/bin/php-cgi-fix</param-value> 
     </init-param> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>PHP</servlet-name> 
     <url-pattern>/index.php/*</url-pattern> 
    </servlet-mapping> 

    <welcome-file-list> 
     <welcome-file>index.php</welcome-file> 
    </welcome-file-list> 
</web-app> 

这可能是我的php-cgi的修复文件,我当我接到followig文本I端子打开它:

$ /usr/local/bin/php-cgi-fix ; exit; 
/usr/local/bin/php-cgi-fix: line 3: /usr/bin/php-cgi: No such file or directory 
logout 

不应该是/ usr/local/php-cgi代替吗?好吧,我现在试过,但是当我启动服务器时,仍然得到了相同的ecxeptions。

(我真的不喜欢使用Maven呢!)

回答

2

你几乎可以肯定要遵守这些指示 - 它们是为码头5这是非常老。

尝试下列2个指令集

之一

他们采取完全不同的方法,所以你需要决定你想做哪种方式。

第一个使用Quercus,它是用Java编写的PHP实现。 第二个使用CGI来运行标准的PHP实现。

向您报告任何具体问题。

+0

对不起,延迟的响应。我一直在试图弄清楚如何在昨天完成这一切。我不会尝试第一个链接,但我尝试了第二个链接,这与我的链接非常相​​似。那么我得到的错误服务不可用? – einstein 2011-02-25 08:29:52

+0

对不起,但这些链接不适合我。我不使用maven:( – einstein 2011-02-25 10:49:58

1

servlet类已更名为org.eclipse.jetty.servlets.CGI

2

这里就是我没有得到它的运行:使用

林码头,分布8.1.5.v20120716

  • 提取物jetty-分布-8.1.5.v20120716.zip让我们说一个目录码头

  • 我不认为这是必要的,但我不想ot她的webapps/servlets会干扰配置,因此:清空目录Jetty /上下文,Jetty /上下文可用,Jetty/webapps

  • 可选:要获取调试消息,请在Jetty/etc/jetty中添加以下内容。XML

 
    <Get class="org.eclipse.jetty.util.log.Log" name="log"> 
     <Call name="setDebugEnabled"> 
     <Arg type="boolean">true</Arg> 
     </Call> 
    </Get> 
  • 创建一个文件码头/斌/ php5-cgi-fix.sh与内容
 
    #!/usr/bin/bash 
    export SCRIPT_FILENAME=$1 
    /usr/bin/php5-cgi 
  • 创建以下目录:码头/ webapps中/ MYPROJECT,Jetty/webapps/MYPROJECT/WEB-INF,Jetty/webapps/MYPROJECT/cgi-bin

    码头/ web应用/ MYPROJECT/WEB-INFO/web.xml中的含量为

 
    <?xml version="1.0" encoding="ISO-8859-1"?> 
    <web-app 
     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" 
     version="2.4" 
    > 

    <display-name>MYPROJECT</display-name> 

    <servlet> 
     <servlet-name>PHP</servlet-name> 
     <servlet-class>org.eclipse.jetty.servlets.CGI</servlet-class> 
     <load-on-startup>1</load-on-startup> 

     <init-param> 
      <param-name>commandPrefix</param-name> 
      <param-value>../../../bin/php5-cgi-fix.sh</param-value> 
     </init-param> 

      <init-param> 
       <param-name>Path</param-name> 
       <param-value>/bin:/usr/bin:/usr/local/bin</param-value> 
      </init-param> 
      <init-param> 
       <param-name>cgibinResourceBase</param-name> 
       <param-value>webapps/MYPROJECT</param-value> 
      </init-param> 

    <!-- 
      <init-param> 
       <param-name>cgibinResourceBaseIsRelative</param-name> 
       <param-value>true</param-value> 
      </init-param> 
    --> 
    <!-- 
     <init-param> 
      <param-name>ENV_yourRequiredEnvironmentVariable</param-name> 
      <param-value>yourValue</param-value> 
     </init-param> 
    --> 
     <!-- Path, other ENV_variables including ENV_SystemRoot, ENV_REDIRECT_STATUS on Windows --> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>PHP</servlet-name> 
     <url-pattern>*.php</url-pattern> 
     <!-- Any other URL patterns that are needed by your app to be processed by PHP --> 
    </servlet-mapping> 

    <!-- If you want http://yourhost/yourapp to call yourapp/yourapp.php then make a welcome file --> 
    <!-- 
    <welcome-file-list> 
     <welcome-file>index.php</welcome-file> 
    </welcome-file-list> 
    --> 
    </web-app> 
  • 创建一个php文件等码头/ web应用/ MYPROJECT /的cgi-bin/test.php的with content

    <?php phpinfo();

  • 在php.ini
  • 设置 的cgi.force_redirect = 0
  • 运行码头:

    的java -Dorg.eclipse.jetty.servlets.CGI.LEVEL = DEBUG -jar start.jar等/ jetty- requestlog.xml

    OR

    Java的罐子start.jar

  • 测试与
    http://localhost:8080/MYPROJECT/cgi-bin/test.php

提示:

  • 的情况下,您尝试使用此经由例如窗户php5-cgi-fix.bat文件,你必须改变web.xml配置中的命令前缀,如下所示:

    cmd.exe/c ../../../bin/php5-cgi-fix.bat

  • 码头源可从http://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/ 其中组织/蚀/码头/ servlet的/ CGI.java是CGI的servlet代码执行该PHP脚本来获得

HTH

+1

对于Jetty 9.0.x,我必须在之间的web.xml文件中添加 true >。我还必须在start.ini中添加“--module = servlets”这一行,以便org.eclipse.jetty.servlets.CGI及其依赖项在类路径中可用。 – 2014-01-17 01:27:02

+0

我得到'500 :未能在码头执行CGI',使用Windows 7和我** php5-cgi-fix.bat **看起来像是'SET SCRIPT_FILENAME =%1 C:\ php \ php-cgi.exe',命令提示符告诉'PHP警告:未知:文件名不能在第0行的未知中清空 – cs1193 2015-07-02 05:46:53