关于PHPStudy中使用AddType application/x-httpd-php该Apache的设置命令无效的问题
写在前面的话(随便说两句,与文章主要内容无关)
前几天遇到一个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独立配置后就能解决问题了。