【问题标题】:Failed to Start ["php-cgi","-v"]启动失败 ["php-cgi","-v"]
【发布时间】:2017-09-13 04:32:15
【问题描述】:

我正在尝试构建 php-java 桥,但我总是遇到错误 “HTTP 状态 500 - php.java.bridge.http.FCGIConnectException:无法连接到服务器”。

致命错误:无法启动 PHP ["php-cgi", "-v"],原因:java.io.IOException: 无法运行程序 ""php-cgi"" (在目录 "C:\Users\ Rob"): CreateProcess error=2, 系统找不到指定的文件 无法启动 FCGI 服务器:java.io.IOException:找不到 PHP。请安装 php-cgi。 PHP 测试命令为:[php-cgi, -v]

我已经读过这个this 但不知道如何解决它

我在 localhost:8080/JavaBridge 上使用 xampp - tomcat

如何解决这个问题?

【问题讨论】:

    标签: tomcat xampp php-java-bridge


    【解决方案1】:

    首先,php-cgi 二进制文件技术上不是运行 常规 PHP->Java 交互的桥接器...(对于 Java->PHP它是)。

    很遗憾,如果您使用的是通用 JavaBridgeTemplate.war,默认情况下会启用 (Java->PHP) 模式,并会查找无法确定的 php-cgi 可执行文件自动 在您的系统上。

    mentionned 的解决方案允许在使用集成 独立服务器时指定php-cgi 可执行文件的位置。但是如果你使用 Tomcat,这将不起作用(不是 100% 正确,但我们假设是这样)

    那该怎么办?

    在 Tomcat 下,网桥参数存储在 war 文件内的 /WEB-INF/web.xml 文件中。我假设您已经下载并使用了sourceforge repo 中的一个。

    只需使用存档管理器打开 JavaBridgeTemplate<version>.war 文件(战争几乎就是一个 zip) 并使用以下解决方案之一编辑 /WEB-INF/web.xml

    1. 要么完全删除对 Java->PHP 的支持。

    这可以通过删除PhpCGIServlet 条目的注册来实现。检查以下 xml 行并在 () 周围放置 cmets。

    <servlet>
      <servlet-name>PhpCGIServlet</servlet-name>
      <servlet-class>php.java.servlet.fastcgi.FastCGIServlet</servlet-class>
      <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
      <servlet-name>PhpCGIServlet</servlet-name>
      <url-pattern>*.php</url-pattern>
    </servlet-mapping>
    

    (PS:我不完全确定此解决方案适用于所有版本的网桥)

    1. 或者指定php-cgi二进制文件的位置。

    首先确保您有一个php-cgi 可执行文件并记下它的位置(在您的情况下可能是c:/xampp/php/php-cgi.exe,但我没有使用Windows)。然后寻找

    <context-param>
        <param-name>prefer_system_php_exec</param-name>
        <param-value>On</param-value>
    </context-param>
    
    <!-- Location of your system PHP executable. Default is /usr/bin/php-cgi or c:/Program Files/PHP/php-cgi.exe
         If exported (Linux) or on the path (Windows) you can use 'php-cgi' as a platform
         independent pointer to the executable
    -->
    <context-param>
        <param-name>php_exec</param-name>
        <param-value>php-cgi</param-value>
        <!-- As an example, the param value
             of the php-cgi executable could be:
                <param-value>/usr/bin/php-cgi5.6</param-value>
                <param-value>/usr/bin/php-cgi7.0</param-value>
                <param-value>c:/Program Files/PHP/php-cgi.exe</param-value>
        -->
    </context-param>
    

    确保&lt;param-value&gt;c:/Program Files/PHP/php-cgi.exe&lt;/param-value&gt; 包含php-cgi 的位置。


    然后保存您的更改(确保 web.xml 很好地保存在 .war 文件中)并重新部署到您的 Tomcat 服务器上。

    尚未测试,但希望对您有所帮助。

    PS:

    • 如果可能,升级到 Tomcat 7 或 8。

    • 注意 soluble-japha 重做客户端的存在(与 java 桥服务器一起使用),这将有很大帮助;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 2023-01-25
      • 1970-01-01
      • 2014-11-17
      • 2019-08-11
      • 2015-08-24
      • 2021-08-26
      相关资源
      最近更新 更多