前言
kali2023发布的环境中,默认支持php8.2,对于低版本的php并不支持,因此配置低版本的php需要自行编译安装。但是编译配置环境过程中有很多问题,此处记录备忘,也希望能帮助有需要的。
环境配置与路径扫盲
kali 2023虚拟机
使用kali自带gcc进行编译
待编译:php5.6、openssl-1.0.2k
kali中apache2对于php模块的配置,分为两个存储目录,一个是/etc/apache2/mods-avaiable/,存储可以使用的模块配置文件,另一个是/etc/apache2/mods-enabled/,存储的是软连接文件,用于标识激活的模块。a2enmod
和a2dismod
命令可以用于激活、停止配置文件。
openssl-1.0.2编译安装
使用kali自带的openssl进行编译php,会显示数据类型的错误,需要自行编译低版本的openssl来编译php。
下载openssl-1.0.2压缩包文件至/home/kali路径下并解压
wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
tar -zxvf openssl-1.0.2k.tar.gz
cd openssl-1.0.2k
因为后面php要用到openssl的库,所以此处openssl编译的时候,要生成位置无关的静态库。
./config -fPIC no-shared
make
openssl默认的存储路径/usr/local/ssl
就是等会编译php时,–with-openssl参数的值
参考文章
php5.6.30编译
编译php命令如下:
./configure --prefix=/home/kali/php --with-config-file-path=/etc/php/5.6 --with-apxs2=/usr/bin/apxs --enable-fpm --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-soap --with-libxml-dir --with-xmlrpc --with-openssl=/usr/local/ssl --with-mcrypt --with-mhash --with-pcre-regex --with-sqlite3 --with-zlib --enable-bcmath --with-iconv --with-bz2 --enable-calendar --with-curl=/usr/include --with-cdb --enable-dom --enable-exif --enable-fileinfo --enable-filter --with-pcre-dir --enable-ftp --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir --enable-gd-native-ttf --enable-gd-jis-conv --with-gettext --with-gmp --with-mhash --enable-json --enable-mbstring --enable-mbregex --enable-mbregex-backtrack --with-libmbfl --with-onig --enable-pdo --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-zlib-dir --with-pdo-sqlite --with-readline --enable-session --enable-shmop --enable-simplexml --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --with-libxml-dir --with-xsl --enable-zip --enable-mysqlnd-compression-support --with-fpm-group=nginx --with-fpm-user=nginx --enable-pcntl --with-mysql
--prefix
指定php安装路径
--with-config-file-path
指定php.ini类的配置文件存储路径
--with-apxs2
创建libphp5.so动态链接库模块
--with-openssl
指定使用版本openssl的存储路路径
中间可能会遇到很多lib库缺失的问题,可以简单用apt-get安装即可。
我遇到两个问题,需要修改文件内容或者文件路径。
一个是:
configure: error: Please reinstall the libcurl distribution -
easy.h should be in /include/curl/
安装libcurl4-gnutls-dev库并不起作用,但是根据configure文件和报错来看,应该是路径配置的问题,需要创建软连接,让configure能够找到easy.h头文件即可。
sudo ln -s /usr/include/x86_64-linux-gnu/curl /usr/include/curl
另一个:
The `freetype-config’ script is no longer installed by default
(Closes: #871470, #886461). All packages depending on libfreetype6-dev
should use pkg-config to find the relevant CFLAGS and libraries.
是因为freetype-config 被替代成 pkg-config ,新版本使用 pkg-config 管理 CFLAGS 和 库。
参考文章
需要先安装pkg-config
sudo apt install pkg-config
再修改config文件
cd php-5.6.30/
sed -i "s/freetype-config/pkg-config/g" ./configure
sed -i "s/freetype-config/pkg-config/g" ./ext/gd/config.m4
sed -i "s/FREETYPE2_CONFIG --cflags/FREETYPE2_CONFIG freetype2 --cflags/g" ./configure
sed -i "s/FREETYPE2_CONFIG --libs/FREETYPE2_CONFIG freetype2 --cflags/g" ./configure
后面再进行make && make install
至此,php5.6.30模块编译安装成功
查看apache2的modules路径,可以找到成功编译的libphp5.so动态链接模块。
网站启用php解析
编译安装好php后,网站还是无法用php5对php文件进行解析,需要在/etc/apache2/mods-avaiable/目录下,照着原有的php配置文件的conf、load文件,新建php5.conf、php5.load文件。
php5.conf文件中,要允许对php后缀文件进行解析。将原来denied的地方修改成granted即可。
如果命令行需要使用php,可以用update-alternatives命令修改php链接文件。
创建php5链接
update-alternatives --install <被链接的文件名> <配置名称> <真正执行的二进制文件> <优先级别>
sudo update-alternatives --install /usr/bin/php php /home/kali/php/bin/php 81
使用的时候用–config查找php,并修改即可。