2011-02-24 143 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