Джетти сервер запустить PHP-код - PullRequest
3 голосов
/ 24 февраля 2011

Я хочу настроить так, чтобы Jetty запускал файлы PHP, но пока не увенчался успехом.В моей среде Eclipse IDE установлены средства Jetty WTP.

Когда я запускаю сервер Jetty.Я получил исключение: java.lang.ClassNotFoundException org.mortbay.servlet.CGI: org.mortbay.servlet.CGI и javax.servlet.UnavailableException: org.mortbay.servlet.CGI .Я поместил простой php-файл (index.php) в папку WebContent.Я также скачал эту библиотеку и добавил ее в путь к классам (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?Хорошо, я попробовал это сейчас, но все же у меня были те же самые слова, когда я запускал сервер.

(я действительно не люблю использовать maven!)

Ответы [ 3 ]

2 голосов
/ 02 августа 2012

Вот что я сделал, чтобы запустить его:

Я использую jetty-distribution-8.1.5.v20120716

  • extract jetty-distribution-8.1.5.v20120716.zip, скажем, каталог Jetty

  • я не думаю, что это необходимо, но я не хотел, чтобы другие веб-приложения / сервлеты вмешивались в конфигурацию, поэтому: очистите каталогиJetty / contextxts, Jetty / contextxts-available, 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>
  • создайте файл Jetty / bin / php5-cgi-fix.sh с содержимым
    #!/usr/bin/bash
    export 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 составляет

    <?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, например, Jetty / webapps / MYPROJECT / cgi-bin / test.php с содержимым

2 голосов
/ 25 февраля 2011

Вы почти наверняка не хотите следовать этим инструкциям - они предназначены для Jetty 5, очень старой.

Попробуйте выполнить одну из этих 2наборы инструкций

Они используют самые разные подходы, поэтому вам нужно будет решить, какой путь вы хотитеto do.

Первый использует Quercus, который является реализацией PHP, написанного на Java.Второй использует CGI для запуска стандартной реализации PHP.

Сообщайте о любых проблемах, которые у вас есть.

1 голос
/ 01 марта 2011

Класс сервлета был переименован в org.eclipse.jetty.servlets.CGI

...