【问题标题】:Configuring PHP on Tomcat gives exception: UnsatisfiedLinkError在 Tomcat 上配置 PHP 会出现异常:UnsatisfiedLinkError
【发布时间】:2013-03-04 10:14:30
【问题描述】:

我一直在尝试在 Tomcat 上使用 PHP(不要问为什么,我只是必须这样做),并且一直在关注 Configure PHP with Tomcat 以及为 PHP with PECL & Tomcat 提供的几个教程。

我已经完成了教程要求的大部分事情,比如设置了所有需要的环境变量,但在启动时我仍然遇到如下所示的错误:

javax.servlet.ServletException: Servlet.init() for servlet php threw exception
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    java.lang.Thread.run(Thread.java:619)

root cause

java.lang.UnsatisfiedLinkError: C:\WINDOWS\system32\php5servlet.dll: The specified procedure could not be found
    java.lang.ClassLoader$NativeLibrary.load(Native Method)
    java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)
    java.lang.ClassLoader.loadLibrary(ClassLoader.java:1728)
    java.lang.Runtime.loadLibrary0(Runtime.java:823)
    java.lang.System.loadLibrary(System.java:1028)
    net.php.reflect.loadLibrary(reflect.java:34)
    net.php.reflect.<clinit>(reflect.java:29)
    net.php.servlet.init(servlet.java:157)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    java.lang.Thread.run(Thread.java:619)

此外,每当我刷新页面时。它给出了这个例外:

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.UnsatisfiedLinkError: 
net.php.servlet.send(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Z)V
net.php.servlet.send(Native Method)
net.php.servlet.service(servlet.java:190)
net.php.servlet.service(servlet.java:214)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

从昨天开始,我一直在尝试解决这个问题,但没有成功。谁能告诉我我在这里做错了什么?或者解决方案可能是什么?谢谢。

【问题讨论】:

    标签: java php pecl


    【解决方案1】:

    您使用的是什么版本的 PHP?

    并非所有版本的 PHP 都支持 php5servlet。 php5servlet.dll库需要php5ts.dll库中包含的函数或方法,但是php5ts.dll这个库会根据PHP的版本而变化(添加新的或减去旧的方法),因此当php5servlet.dll调用某个方法时,可能找不到。

    根据您使用的 PECL 库,您需要一个 PHP 版本(可能比您使用的旧)。

    PHP 对我来说最后一个测试版本是http://windows.php.net/downloads/releases/archives/php-5.2.16-Win32-VC6-x86.zip

    我仍然不知道为什么 PHP 5.3.0 或更新的 VC6 无法运行。

    带有所需库(php5servlet.dll、php_java.dll、php_java.jar 和 phpsrvlt.jar)的 PECL 的最新版本是 http://museum.php.net/php5/pecl-5.2.5-Win32.zip

    用于此测试的 Tomcathttp://archive.apache.org/dist/tomcat/tomcat-7/v7.0.27/bin/apache-tomcat-7.0.27-windows-x86.zip

    如果您只想使用 .php 文件...

    现在(下面这部分不是错误的原因,所以不要修复它。),您可以将 .php 文件直接放入

    TOMCATDIR\webapps\ROOT\
    

    将生成的.jar文件php5srvlt.jar放入\lib 显然将 web.xml 文件更改为:

    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
      version="3.0"
      metadata-complete="true">
      <servlet>
        <servlet-name>php</servlet-name>
        <servlet-class>net.php.servlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>php-formatter</servlet-name>
        <servlet-class>net.php.formatter</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>php</servlet-name>
        <url-pattern>*.php</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>php-formatter</servlet-name>
        <url-pattern>*.phps</url-pattern>
      </servlet-mapping>
    </web-app>
    

    【讨论】:

      猜你喜欢
      • 2011-01-09
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      相关资源
      最近更新 更多