【问题标题】:jetty server run php code码头服务器运行php代码
【发布时间】:2011-02-24 16:44:40
【问题描述】:

我想配置让码头运行 PHP 文件,但到目前为止一直不成功。我的 Eclipse IDE 中安装了 Jetty WTP 工具。

当我启动 Jetty 服务器时。我得到了异常: java.lang.ClassNotFoundException org.mortbay.servlet.CGI: org.mortbay.servlet.CGIjavax.servlet.UnavailableException: org.mortbay.servlet.CGI。我在我的 WebContent 文件夹下放了一个简单的 php 文件(index.php)。我还下载了这个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-fix 文件,当我打开它时,我在终端收到了以下文本:

$ /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!)

【问题讨论】:

    标签: php jetty


    【解决方案1】:

    您几乎可以肯定想要遵循这些说明 - 它们适用于非常旧的 Jetty 5。

    尝试遵循这两组说明中的一组

    他们采用非常不同的方法,因此您需要决定要采用哪种方式。

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

    报告您遇到的任何具体问题。

    【讨论】:

    • 抱歉回复晚了。昨天我一直在试图弄清楚如何做到这一点。我不会尝试第一个链接,但我尝试了第二个链接,这与我的链接惊人地相似。那么我得到错误服务不可用?
    • 抱歉,这些链接不适合我。我也不使用 maven:(
    【解决方案2】:

    这是我为使其运行所做的工作:

    我正在使用 jetty-distribution-8.1.5.v20120716

    • 解压 jetty-distribution-8.1.5.v20120716.zip 让我们说一个目录 Jetty

    • 我不认为这是必要的,但我不希望其他 webapps/servlet 干扰配置,所以:清空目录 Jetty/contexts、Jetty/contexts-available、Jetty/webapps

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

    呼叫> 获取>
    • 创建一个包含内容的文件 Jetty/bin/php5-cgi-fix.sh
    #!/usr/bin/bash 导出 SCRIPT_FILENAME=$1 /usr/bin/php5-cgi
    • 创建以下目录:Jetty/webapps/MYPROJECT、Jetty/webapps/MYPROJECT/WEB-INF、Jetty/webapps/MYPROJECT/cgi-bin

      Jetty/webapps/MYPROJECT/WEB-INFO/web.xml的内容是

    我的项目PHPorg.eclipse.jetty.servlets.CGI1commandPrefix../../../bin/php5-cgi-fix.sh路径/bin:/usr/bin:/usr/local/bincgibinResourceBasewebapps/MYPROJECTPHP*.php
    • 创建一个像 Jetty/webapps/MYPROJECT/cgi-bin/test.php 这样的 php 文件,其中包含内容

    • 在 php.ini 集中 cgi.force_redirect = 0
    • 运行码头:

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

      java -jar start.jar

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

    提示:

    • 如果您尝试通过例如在 Windows 上使用它php5-cgi-fix.bat 文件,您必须像这样更改 web.xml 配置中的命令前缀:

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

    • jetty源可以从http://repo1.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/获取 其中 org/eclipse/jetty/servlets/CGI.java 是执行 php 脚本的 cgi servlets 代码

    【讨论】:

    • 对于 Jetty 9.0.x,我必须在 true >。我还必须在 start.ini 中添加“--module=servlets”行,以便 org.eclipse.jetty.servlets.CGI 及其依赖项在类路径中可用。
    • 我在码头得到500: Failed to exec CGI,使用Windows 7,我的php5-cgi-fix.bat看起来像SET SCRIPT_FILENAME=%1 C:\php\php-cgi.exe,命令提示符告诉PHP Warning: Unknown: Filename cannot be empty in Unknown on line 0
    【解决方案3】:

    servlet 类已重命名为org.eclipse.jetty.servlets.CGI

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      相关资源
      最近更新 更多