寫在前面:我們的云服務(wù)器最早使用的框架是tomcat+jsp,前輩們的web都是jsp完成的,js很強(qiáng)但新手入門難,個(gè)人感覺php對(duì)新手來說入門快。所以我想在tomcat下用php寫一個(gè)新的web,這樣就可以和之前的jsp站點(diǎn)共用tomcat!之后各種搜索,終于可以tomcat+php完成自己的web,分享給電腦前的凌亂的小伙伴們。
1. 安裝php環(huán)境
雖然可以在tomcat運(yùn)行php項(xiàng)目,但是不代表不用配置php環(huán)境,所以第一步要做的是安裝php環(huán)境。目前普遍的是使用apache+php+mysql組成一個(gè)php項(xiàng)目的開發(fā),可以分別針對(duì)安裝。
Php的安裝主要分為windows和Linux下安裝(這些不多說,之前百度搜的安裝過程,現(xiàn)在忘了,大家可以百度搜下)
2. 配置tomcat支持php項(xiàng)目
四個(gè)jar包放到tomcat的lib文件中(百度可以下載到,我這也有):JavaBridge.jar, script-api.jar, php-servlet.jar, php-script.jar;

接著我們需要配置web.xml,它在tomcat的conf目錄下,我們?cè)?lt;web-app>節(jié)點(diǎn)中加入一下內(nèi)容:
<listener><listener-class>php.java.servlet.ContextLoaderListener</listener-class></listener>
<servlet>
????<servlet-name>PhpJavaServlet</servlet-name>
????<servlet-class>php.java.servlet.PhpJavaServlet</servlet-class>
</servlet>
<servlet>
????<servlet-name>PhpCGIServlet</servlet-name>
????<servlet-class>php.java.servlet.fastcgi.FastCGIServlet</servlet-class>
????????<init-param>
????????????<param-name>prefer_system_php_exec</param-name>
????????????<param-value>On</param-value>
????????</init-param>
????????<init-param>
????????????<param-name>php_include_java</param-name>
????????????<param-value>Off</param-value>
????????</init-param>
</servlet>
<servlet-mapping>
????<servlet-name>PhpJavaServlet</servlet-name>
????<url-pattern>*.phpjavabridge</url-pattern>
</servlet-mapping>
<servlet-mapping>
????<servlet-name>PhpCGIServlet</servlet-name>
????<url-pattern>*.php</url-pattern>
</servlet-mapping>

然后找到<welcome-file-list>節(jié)點(diǎn),添加以下歡迎內(nèi)容:
<welcome-file>index.php</welcome-file>

重啟tomcat,新建test.php測(cè)試

(我的本地tomcat是8080端口,顯示這樣表明tomcat可以運(yùn)行php項(xiàng)目了)
不過上述方式后來發(fā)現(xiàn)一個(gè)問題,云服務(wù)器搜索.php文件的時(shí)候不分站點(diǎn),例localhost/AAA/demo.php居然用?localhost/demo.php就能訪問,這就不利用編輯新的網(wǎng)站了。換換換?。。?!
第二種方式:
把上述的web.xml的修改刪除掉,替換下面內(nèi)容,其它不更改。在 Tomcat / conf / 找 web.xml,添加:
<!-- 嘗試成功 -->
<servlet>
? ? <servlet-name>php</servlet-name>
? ? <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
? ? <init-param>
? ? ? ? <param-name>clientInputTimeout</param-name>
? ? ? ? <param-value>200</param-value>
? ? </init-param>
? ? <init-param>
? ? ? ? <param-name>debug</param-name>
? ? ? ? <param-value>0</param-value>
? ? </init-param>
? ? <init-param>
? ? ? ? <param-name>executable</param-name>
? ? ? ? <!-- 這里是放置你的 php/php-cgi.exe -->
? ? ? ? <param-value>E:\app\php-7.4.7-Win32-vc15-x64\php-cgi.exe</param-value>
? ? </init-param>
? ? <init-param>
? ? ? ? <param-name>passShellEnvironment</param-name>
? ? ? ? <param-value>true</param-value>
? ? </init-param>
? ? <!-- 指定攔截前綴,可用可不用,使用之后URL需要帶上 前綴 + 原訪問路徑 -->
? ? <!--
<init-param>
? <param-name>cgiPathPrefix</param-name>
? <param-value>WEB-INF/mibew</param-value>
? ? </init-param>
? ? -->
? ? <load-on-startup>5</load-on-startup>
</servlet>
<servlet-mapping>
? ? <servlet-name>php</servlet-name>
? ? <url-pattern>*.php</url-pattern>
</servlet-mapping>
如果是linux系統(tǒng)需要把路徑改為php-cgi的位置,我的是在/usr/bin/php-cgi;
還需要修改 TOMCAT / conf / context.xml ;在 Context 節(jié)點(diǎn)下添加 privileged="true",這樣能訪問你剛剛添加的<servlet>;
命途多舛,又遇到新的問題了,訪問php文件除了新問題,這個(gè)百度一下就可以解決了:進(jìn)入php目錄,修改php.ini ,將 ;cgi.force_redirect = 1 修改為 cgi.force_redirect = 0。

ok!一切又好使了,現(xiàn)在可以分站點(diǎn)訪問php了,現(xiàn)在感覺清楚多了。
參考鏈接:
https://blog.csdn.net/qq_28033719/article/details/80361823
https://blog.csdn.net/changingshow/article/details/78040134