背景
由于公司业务需求需要安装禅道项目管理软件https://www.zentao.net/,由于此软件最新版本需要php7以上版本支持,而Apache默认关联php5,所以需要对其进行修改。
Apache安装后默认会与自带php-5.4.16版本进行关联,导致禅道安装时自动识别到php5.4.16,安装后无法正常访问主页。 Apache/2.4.6设置php版本的配置文件为/etc/httpd/conf.modules.d/10-php.conf,此文件为yum安装php后产生,经测试php-5.4.16不可删除。
[root@dev]# cat /etc/httpd/conf.modules.d/10-php.conf
#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
<IfModule prefork.c>
LoadModule php7_module modules/libphp5.so
</IfModule>
将libphp5.so修改为libphp7.so:
[root@dev]# cat /etc/httpd/conf.modules.d/10-php.conf
#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
<IfModule prefork.c>
LoadModule php7_module modules/libphp7.so
</IfModule>
那么问题来了libphp7.so文件从哪来,如果编译安装php7时没有添加--with-apxs2参数不会产生这个文件,这就需要重新编译安装一次php7用来生成这个文件,当然生产环境最好不要直接重新编译安装,可以在自己的虚拟机上编译安装后,将libphp7.so文件拷贝到生产环境使用
此时在安装禅道等软件,php版本已经变成php7。但是安装中遇到了另一个问题,那就是zabbix问题,因为我公司zabbix-web服务也安装在此设备上,且之前稳定运行在apache2.4.6+php5.4.16环境下,替换后出现例如gettext、ldap等诸多报错,所以需要编译安装时添加上相关参数,这里贴出我的参数。安装版本为php-7.1.21:
[root@test]#./configure --prefix=/usr/local/php --with-ldap --with-gettext --with-apxs2 --with-mysqli --with-pdo-mysql --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-simplexml --enable-xml --disable-rpath --enable-bcmath --enable-soap --enable-zip --with-curl --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mbstring --enable-sockets --with-gd --with-openssl --with-mhash --enable-opcache --disable-fileinfo
编译到ldap时出现报错:
configure: error: Cannot find ldap libraries in /usr/lib
解决办法:
cp -frp /usr/lib64/libldap* /usr/lib/
此时可以正常编译,然后make又出现如下报错:
/lib64/liblber-2.4.so.2: could not read symbols: Invalid operation
解决办法:
编译后编辑MakeFile 找到开头是 'EXTRA_LIBS' 这一行,在结尾加上'-llber'然后执行
make && make install
按以上方式编译后会在/usr/lib64/httpd/modules中产生libphp7.so文件,拷贝到生产环境相应文件夹即可。
Zabbix还有一个单独的配置文件需要配置,将/etc/httpd/conf.d/zabbix.conf文件中的modphp5.c改为modphp7.c,如下:
[root@dev ~]# cd /etc/httpd/conf.d
[root@dev conf.d]# cat zabbix.conf
Alias /zabbix /usr/share/zabbix
<Directory "/usr/share/zabbix">
Options FollowSymLinks
AllowOverride None
Require all granted
<IfModule mod_php7.c>
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value max_input_vars 10000
php_value always_populate_raw_post_data -1
php_value date.timezone Asia/Shanghai
</IfModule>
</Directory>
<Directory "/usr/share/zabbix/conf">
Require all denied
</Directory>
<Directory "/usr/share/zabbix/app">
Require all denied
</Directory>
<Directory "/usr/share/zabbix/include">
Require all denied
</Directory>
<Directory "/usr/share/zabbix/local">
Require all denied
</Directory>
这时zabbix和禅道软件都可以正常运行。