我一直在尝试在Tomcat上使用PHP(不要问为什么,我只需要),并且一直在关注Configure PHP with Tomcat以及为PECL和PHP提供的PHP教程。 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)
从昨天开始,我一直试图解决这个问题,但没有成功。谁能告诉我这里我做错了什么?或者解决方案可能是什么?感谢。
答案 0 :(得分: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
此测试使用的 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>