2013-03-04 44 views
3

我一直試圖在Tomcat上使用PHP(不要問爲什麼,我只需要),並且一直遵循Configure PHP with Tomcat以及針對PHP和PECL & Tomcat給出的幾個教程。在Tomcat上配置PHP給出了一個例外:UnsatisfiedLinkError

我所做的大部分由教程要求,如設置了所需要的所有環境變量的東西,但我仍然會碰到錯誤,如下面所示的一個,在啓動時:

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) 

我一直在試圖解決這個,自從昨天失敗,失敗。誰能告訴我我在這裏做錯了什麼?或者解決方案可能是什麼?謝謝。

回答

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不起作用。

最後一個版本PECL與所需的庫(php5servlet.dll,php_java.dll,php_java.jar和phpsrvlt.jar)爲http://museum.php.net/php5/pecl-5.2.5-Win32.zip

的Tomcat用於此測試是http://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> 
相關問題