寫在前面的話(隨便說兩句,與文章主要內容無關)
前幾天遇到一個CTF題目(這個->BUUCTF (buuoj.cn)),對着WP(Orz太菜了不會寫)解題的時候發現寫進去的一句話的PHP碼全部不作為PHP文件解析,當時就懵逼了,還能這樣?都是.php后綴的文件了還可以不當PHP解析?

后來摸索了一番發現,題目中目錄下除了index.php其余的文件均不能作為PHP文件解析,百度得知Apache中有設置不啟動引擎解析PHP文件的設置命令,自己本地用PHPStudy測試了半天發現要么沒有任何反應要么直接變成500,總之就不能看到想要的結果。突然又想起來以前自己也測試AddType application/x-httpd-php來看看效果,結果也是不像網上說的那樣把其他類型的文件作為PHP文件解析。

沒辦法,知識匱乏,也不知道哪出問題了,百度都不知道搜什么,也搜不到想要的東西。最后在不斷地憑感覺搜索與瞎測試下好在是找到了問題所在和解決方案。
問題與解決方案
哪出問題了
PHPStudy中AddType application/x-httpd-php等Apache命令之所以在Apache的設置文件中設置后未實現目標效果是由於PHP的版本不符導致的,但注意這里的PHP版本並不是指PHP7.3.0、PHP7.4.0這種版本號,也不是適用於32位的PHP、適用於64位的PHP這種不同機型的版本,而是PHP的NTS(Non Thread Safe)與TS(Thread Safe)的這種不同版本導致的。

(在適用於Windows的PHP下載中可以看到按照64與32系統、NTS與TS的區分提供的四種不同版本的PHP)
簡單來說TS版本的PHP是更適合與Apache配套使用的(雖然NTS版本也能用但是多少有些不足),如果我們想使用在前面說的那些Apache設置指令就需要使用TS版本的PHP,但不幸的是PHPStduy中提供的均是NTS版本的PHP,並且網上關於Apache設置指令的修改教程均是對於TS版本的PHP適用的(NTS貌似改不了?確實找不到相關文章),這就導致了我們對着自己PHPStudy中的Apache配置各種更改但均不見效。

(如圖示,PHP中提供的均為NTS版本的PHP)
該怎么辦
安裝TS版本的PHP,並在Apache中配置好相關設置。
先去PHP官網下載好需要版本的PHP(官網的下載頁面->PHP For Windows: Binaries and sources Releases),注意需要下載TS的PHP。這里博主下載的是7.3.28版本TS的PHP的zip壓縮包。

將下載好的壓縮包解壓好存入空文件夾再將文件夾移動到PHPStudy存放PHP的文件夾中,博主PHPStudy安裝在D盤下,所以路徑為D:\phpstudy_pro\Extensions\php。

(php_7.3.28_ts中存放的是博主剛剛解壓好的PHP)
進入到PHP文件夾內,找到php.ini-development文件,復制黏貼一份並改名為php.ini。

打開php.ini,找到extension_dir,並把前面的";"符號刪掉(在php.ini相當於注釋符),其值改為"PHP文件的路徑/ext"。

保存后,我們PHP就設置完成了,接下來要設置Apache。
來到PHPStudy安裝Apache的目錄下,打開Apache的配置文件httpd.conf,博主這里是D:\phpstudy_pro\Extensions\Apache2.4.39\conf(如果之后有需要可以先把httpd.conf備份一份,以后更換時直接替換就好),搜索LoadModule,找到有很多LoadModule語句的地方。

在末尾加上LoadModule php7_module "PHP文件的路徑/php7apache2_4.dll"和PHPIniDir "PHP文件的路徑"。

再搜索AddType application,在AddType application/x-gzip .gz .tgz下一行加上一句AddType application/x-httpd-php .php .html .txt(將.txt、.php、.html后綴文件作為PHP文件解析)。

保存並退出,Apache就配置好了。
這時我們便可以打開PHPStudy啟用相關軟件進行測試是否修改成功,而PHP放入PHPStudy的PHP安裝文件夾下后便可以在PHPStudy中選擇切換。

效果展示
PHPStudy來到www目錄下,新建一個txt文本隨便寫上一些PHP語句。


成功解析了,說明我們的配置修改成功。
寫在最后面
整個修改相當於是Apache加載了TS的PHP一些東西,而且由於是我們手動添加的在Apache的配置文件中的,所以我們切換到其他PHP版本后仍然會使用我們加載的這部分內容。好處是現在使用其他版本的NTS的PHP也能在Apache配置文件中使用對於的TS的PHP才能使用的Apache配置命令,壞處是博主並不清楚這樣會不會導致某些潛在的沖突。
此外在Apache的配置文件中添加配置命令的位置並不是強制固定的,僅因為辨識度高方便找到所以添加在那些位置,所以也可以添加在其他的合適位置。
很不幸,之后測試發現還是有相當一部分Apache的配置指令在.htaccess中並不會生效,甚至在httpd.conf中修改也是如此,技術有限也搜索不到相關內容,只好作罷。
[2021-07-12 09:00:42]昨天配好了環境,發現還是重新配一套獨立環境方便,之前咨詢了前輩才知道PHPStudy集成環境做了很多改動,可能這就是改不了配置的原因,將PHP和Apache獨立配置后就能解決問題了。
