php扩展模块安装的脚本

有些在源码里面有的扩展,需要一个个安装很麻烦,写个脚本一键安装

#!/usr/bin/python
# -*- coding: utf-8 -*-
# 2020-3-20
# author:hhh

import os
import sys
import subprocess
import signal

install_phpmode_list = ['curl','wddx','bcmath','sysvsem','sysvshm']

def syscmd(cmd_line):
    if len(cmd_line) <= 0:
        return -1,None
    try:
        p = subprocess.Popen(cmd_line, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        try:
            outs, errs = p.communicate()
            retval = p.returncode
        except subprocess.TimeoutExpired:
            os.kill(p.pid, signal.SIGKILL)
            outs, errs = p.communicate()
            retval = p.returncode
        return retval, outs.decode("utf-8", "replace"), errs.decode()
    except Exception as e:
        return -1, None, None

def yum_install(rpm):
    check_rpm = 'rpm -qa |grep -w %s' % rpm
    ret,output,err = syscmd(check_rpm)
    if ret == 1:
        install_cmd = 'yum -y install %s' % rpm
        ret,output,err = syscmd(install_cmd)
        if ret == 0:
            print('install %s success...' % rpm)
            return True
        else:
            print('install %s faild...' % rpm)
            sys.exit(1)
    else:
        print('skip install %s ' % rpm)
        return True

def download_source(version):
    wegt = 'wget -P /usr/local/src http://www.php.net/distributions/%s.tar.gz'%version
    ret1, output1, err1 = syscmd(wegt)
    if ret1 == 0:
        print('wget %s success!'%version)
        tar = 'tar zxvf /usr/local/src/%s.tar.gz'%version
        ret2, output2, err2 = syscmd(tar)
        if ret2 == 0:
            print('tar zxvf %s success!'%version)
        else:
            print('tar failed!',err2)
            sys.exit(1)
    else:
        print('wget failed!',err1)
        sys.exit(1)


def php_mod(install_php_mod):
    ret1, output1, err1 = syscmd('/usr/local/php72/bin/php -m | grep -w %s'%install_php_mod)
    ret2, output2, err2 = syscmd('ls /usr/local/src/php-7.2.11/ext |grep -w %s' %install_php_mod)
    if ret1 == 0 and '%s'%install_php_mod in output1:
        print('php mode %s is installed!'%install_php_mod)
    elif ret1 == 1 and ret2 == 0 and '%s'%install_php_mod in output2:
        os.chdir('/usr/local/src/php-7.2.11/ext/%s'%install_php_mod)
        phpize = '/usr/local/php72/bin/phpize'
        ret3, output3, err3 = syscmd(phpize)
        if ret3 == 0:
            configure = './configure --with-php-config=/usr/local/php72/bin/php-config && make && make install'
            ret4, output4, err4 = syscmd(configure)
            if ret4 == 0:
                echo_so ="echo 'extension = %s.so
' >>/usr/local/php72/etc/php.ini"%install_php_mod
                ret5, output5, err5 = syscmd(echo_so)
                if ret5 == 0:
                    print('install %s success!'%install_php_mod)
                else:
                    print('echo failed!',err5)
                    sys.exit(1)
            else:
                print('configure failed!',err4)
                sys.exit(1)
        else:
            print('phpize failed',err3)
            sys.exit(1)
    else:
        print('%s php mode not in source!'%install_php_mod)

def main():
    yum_install('php72')
    yum_install('libxml2')
    yum_install('libxml2_devel')
    download_source('php-7.2.11')
    for install_php_mod in install_phpmode_list:
        php_mod(install_php_mod)


if __name__ == '__main__':
    main()
原文地址:https://www.cnblogs.com/guantou1992/p/12618443.html