php-apt
This commit is contained in:
parent
a97ba2fa71
commit
b14be16f1d
|
|
@ -53,7 +53,7 @@ cd /www/server/mdserver-web/plugins/php && bash all_test.sh
|
|||
| CentOS 8.4 |:x: |✅ |✅ |✅ |
|
||||
| CentOS 8 Stream |✅ |✅ |✅ |✅ |
|
||||
| CentOS 9 Stream |✅ |:x: |:x: |:x: |
|
||||
| Debian 10.3 |✅ |✅ |✅ |✅ |
|
||||
| Debian 10.3 |✅ |✅ |✅ |:x: |
|
||||
| Debian 11.3 |✅ |✅ |✅ |✅ |
|
||||
| Ubuntu 10.04 |✅ |✅ |✅ |✅ |
|
||||
| Ubuntu 11.3 |✅ |✅ |✅ |✅ |
|
||||
|
|
|
|||
|
|
@ -0,0 +1,53 @@
|
|||
#! /bin/sh
|
||||
export PATH=$PATH:/opt/local/bin:/opt/local/sbin:/opt/local/share/man:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
|
||||
DIR=$(cd "$(dirname "$0")"; pwd)
|
||||
|
||||
|
||||
|
||||
# cd /www/server/mdserver-web/scripts/quick && bash debug.sh
|
||||
# cd /www/server/mdserver-web/plugins/php && bash all_test.sh
|
||||
|
||||
|
||||
# cd /www/server/mdserver-web/plugins/php && bash install.sh install 71
|
||||
# cd /www/server/mdserver-web/plugins/php/versions/52/ && bash gd.sh install 52
|
||||
|
||||
# cd /www/server/mdserver-web/plugins/php/versions/52/ && bash openssl.sh install 52
|
||||
# cd /www/server/mdserver-web/plugins/php/versions/81/ && bash imagemagick.sh install 81
|
||||
# cd /www/server/mdserver-web/plugins/php/versions/70/ && bash imagemagick.sh install 70
|
||||
|
||||
PHP_VER=71
|
||||
echo "php${PHP_VER} -- start"
|
||||
cmd_ext=$(ls -l $DIR/versions/$PHP_VER/ |awk '{print $9}')
|
||||
cd $DIR && /bin/bash install.sh install $PHP_VER
|
||||
for ii in $cmd_ext
|
||||
do
|
||||
if [ "install.sh" == "$ii" ];then
|
||||
echo '' > /tmp/t.log
|
||||
else
|
||||
cd $DIR/versions/$PHP_VER && /bin/bash $ii install $PHP_VER
|
||||
fi
|
||||
done
|
||||
echo "php${PHP_VER} -- end"
|
||||
|
||||
|
||||
PHP_VER_LIST=(53 54 55 56 70 71 72 73 74 80 81)
|
||||
# PHP_VER_LIST=(81)
|
||||
for PHP_VER in ${PHP_VER_LIST[@]}; do
|
||||
echo "php${PHP_VER} -- start"
|
||||
if [ -d /www/server/php/${PHP_VER} ];then
|
||||
cmd_ext=$(ls -l $DIR/versions/$PHP_VER/ |awk '{print $9}')
|
||||
for ii in $cmd_ext
|
||||
do
|
||||
echo "${ii}"
|
||||
if [ "install.sh" == "$ii" ];then
|
||||
echo '' > /tmp/t.log
|
||||
else
|
||||
cd $DIR/versions/$PHP_VER/ && bash $ii install ${PHP_VER}
|
||||
fi
|
||||
done
|
||||
fi
|
||||
echo "php${PHP_VER} -- end"
|
||||
done
|
||||
|
||||
|
||||
rm -rf /tmp/t.log
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
set $PHP_ENV 1;
|
||||
location ~ [^/]\.php(/|$)
|
||||
{
|
||||
try_files $uri =404;
|
||||
fastcgi_pass unix:/var/opt/remi/php{$PHP_VERSION}/run/php-fpm/www.sock;
|
||||
fastcgi_index index.php;
|
||||
include fastcgi.conf;
|
||||
include {$SERVER_PATH}/web_conf/php/pathinfo.conf;
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
set $real_script_name $fastcgi_script_name;
|
||||
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
|
||||
set $real_script_name $1;
|
||||
set $path_info $2;
|
||||
}
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
|
||||
fastcgi_param SCRIPT_NAME $real_script_name;
|
||||
fastcgi_param PATH_INFO $path_info;
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
location /phpfpm_status_yum{$PHP_VERSION} {
|
||||
fastcgi_pass unix:/var/opt/remi/php{$PHP_VERSION}/run/php-fpm/www.sock;
|
||||
include fastcgi_params;
|
||||
fastcgi_param SCRIPT_FILENAME \$fastcgi_script_name;
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
location /{$PHP_VERSION} {
|
||||
root {$ROOT_PATH}/phpinfo;
|
||||
include {$SERVER_PATH}/web_conf/php/conf/enable-php-yum{$PHP_VERSION}.conf;
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
[www]
|
||||
user = {$PHP_USER}
|
||||
group = {$PHP_GROUP}
|
||||
|
||||
listen = /var/opt/remi/php{$PHP_VERSION}/run/php-fpm/www.sock
|
||||
listen.owner = {$PHP_USER}
|
||||
listen.group = {$PHP_GROUP}
|
||||
pm = dynamic
|
||||
pm.max_children = 50
|
||||
pm.start_servers = 5
|
||||
pm.min_spare_servers = 5
|
||||
pm.max_spare_servers = 35
|
||||
pm.status_path = /phpfpm_status_yum{$PHP_VERSION}
|
||||
request_terminate_timeout = 100
|
||||
request_slowlog_timeout = 30
|
||||
slowlog = /var/opt/remi/php{$PHP_VERSION}/log/php-fpm/www-slow.log
|
||||
|
||||
php_admin_flag[log_errors] = on
|
||||
php_admin_value[error_log] = /var/opt/remi/php{$PHP_VERSION}/log/php-fpm/error.log
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 785 B |
|
|
@ -0,0 +1,30 @@
|
|||
<div class="bt-form">
|
||||
<div class='plugin_version'></div>
|
||||
<div class="bt-w-main">
|
||||
<div class="bt-w-menu">
|
||||
<p class="bgw" onclick="pluginService('php-apt', $('.plugin_version').attr('version'));">服务</p>
|
||||
<p onclick="pluginInitD('php-apt', $('.plugin_version').attr('version'));">自启动</p>
|
||||
<p onclick="phpLibConfig($('.plugin_version').attr('version'));">安装扩展</p>
|
||||
<p onclick="phpSetConfig($('.plugin_version').attr('version'));">配置修改</p>
|
||||
<p onclick="phpUploadLimitReq($('.plugin_version').attr('version'));">上传限制</p>
|
||||
<p onclick="phpTimeLimitReq($('.plugin_version').attr('version'));">超时限制</p>
|
||||
<p onclick="pluginConfig('php-apt', $('.plugin_version').attr('version'));">配置文件</p>
|
||||
<p onclick="pluginConfig('php-apt', $('.plugin_version').attr('version'),'get_fpm_conf_file');">FPM配置</p>
|
||||
<p onclick="disableFunc($('.plugin_version').attr('version'));">禁用函数</p>
|
||||
<p onclick="getFpmConfig($('.plugin_version').attr('version'));">性能调整</p>
|
||||
<p onclick="getFpmStatus($('.plugin_version').attr('version'));">负载状况</p>
|
||||
<p onclick="pluginLogs('php-apt',$('.plugin_version').attr('version'),'fpm_log');">FPM日志</p>
|
||||
<p onclick="pluginLogs('php-apt',$('.plugin_version').attr('version'),'fpm_slow_log');">慢日志</p>
|
||||
<p onclick="getPhpinfo($('.plugin_version').attr('version'));">PHPIFNO</p>
|
||||
</div>
|
||||
<div class="bt-w-con pd15">
|
||||
<div class="soft-man-con"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$.getScript( "/plugins/file?name=php-apt&f=js/php.js", function(){
|
||||
pluginService('php-apt', $('.plugin_version').attr('version'));
|
||||
});
|
||||
</script>
|
||||
|
|
@ -0,0 +1,714 @@
|
|||
# coding:utf-8
|
||||
|
||||
import sys
|
||||
import io
|
||||
import os
|
||||
import time
|
||||
import re
|
||||
import json
|
||||
import shutil
|
||||
|
||||
|
||||
sys.path.append(os.getcwd() + "/class/core")
|
||||
import mw
|
||||
|
||||
if mw.isAppleSystem():
|
||||
cmd = 'ls /usr/local/lib/ | grep python | cut -d \\ -f 1 | awk \'END {print}\''
|
||||
info = mw.execShell(cmd)
|
||||
p = "/usr/local/lib/" + info[0].strip() + "/site-packages"
|
||||
sys.path.append(p)
|
||||
|
||||
app_debug = False
|
||||
if mw.isAppleSystem():
|
||||
app_debug = True
|
||||
|
||||
|
||||
def getPluginName():
|
||||
return 'php-apt'
|
||||
|
||||
|
||||
def getServerDir():
|
||||
return '/etc/opt/remi'
|
||||
|
||||
|
||||
def getPluginDir():
|
||||
return mw.getPluginDir() + '/' + getPluginName()
|
||||
|
||||
|
||||
def getArgs():
|
||||
args = sys.argv[3:]
|
||||
tmp = {}
|
||||
args_len = len(args)
|
||||
|
||||
if args_len == 1:
|
||||
t = args[0].strip('{').strip('}')
|
||||
t = t.split(':')
|
||||
tmp[t[0]] = t[1]
|
||||
elif args_len > 1:
|
||||
for i in range(len(args)):
|
||||
t = args[i].split(':')
|
||||
tmp[t[0]] = t[1]
|
||||
|
||||
return tmp
|
||||
|
||||
|
||||
def checkArgs(data, ck=[]):
|
||||
for i in range(len(ck)):
|
||||
if not ck[i] in data:
|
||||
return (False, mw.returnJson(False, '参数:(' + ck[i] + ')没有!'))
|
||||
return (True, mw.returnJson(True, 'ok'))
|
||||
|
||||
|
||||
def getConf(version):
|
||||
path = getServerDir() + '/php' + version + '/php.ini'
|
||||
return path
|
||||
|
||||
|
||||
def status(version):
|
||||
# ps -ef|grep 'php/81' |grep -v grep | grep -v python | awk '{print $2}
|
||||
cmd = "ps -ef|grep 'remi/php" + version + \
|
||||
"' |grep -v grep | grep -v python | awk '{print $2}'"
|
||||
data = mw.execShell(cmd)
|
||||
if data[0] == '':
|
||||
return 'stop'
|
||||
return 'start'
|
||||
|
||||
|
||||
def contentReplace(content, version):
|
||||
service_path = mw.getServerDir()
|
||||
content = content.replace('{$ROOT_PATH}', mw.getRootDir())
|
||||
content = content.replace('{$SERVER_PATH}', service_path)
|
||||
content = content.replace('{$PHP_VERSION}', version)
|
||||
content = content.replace('{$LOCAL_IP}', mw.getLocalIp())
|
||||
|
||||
if mw.isAppleSystem():
|
||||
# user = mw.execShell(
|
||||
# "who | sed -n '2, 1p' |awk '{print $1}'")[0].strip()
|
||||
content = content.replace('{$PHP_USER}', 'nobody')
|
||||
content = content.replace('{$PHP_GROUP}', 'nobody')
|
||||
|
||||
rep = 'listen.owner\s*=\s*(.+)\r?\n'
|
||||
val = ';listen.owner = nobody\n'
|
||||
content = re.sub(rep, val, content)
|
||||
|
||||
rep = 'listen.group\s*=\s*(.+)\r?\n'
|
||||
val = ';listen.group = nobody\n'
|
||||
content = re.sub(rep, val, content)
|
||||
|
||||
rep = 'user\s*=\s*(.+)\r?\n'
|
||||
val = ';user = nobody\n'
|
||||
content = re.sub(rep, val, content)
|
||||
|
||||
rep = r'[^\.]group\s*=\s*(.+)\r?\n'
|
||||
val = ';group = nobody\n'
|
||||
content = re.sub(rep, val, content)
|
||||
|
||||
else:
|
||||
content = content.replace('{$PHP_USER}', 'www')
|
||||
content = content.replace('{$PHP_GROUP}', 'www')
|
||||
return content
|
||||
|
||||
|
||||
def makeOpenrestyConf(version):
|
||||
|
||||
sdir = mw.getServerDir()
|
||||
d_pathinfo = sdir + '/web_conf/php/pathinfo.conf'
|
||||
if not os.path.exists(d_pathinfo):
|
||||
s_pathinfo = getPluginDir() + '/conf/pathinfo.conf'
|
||||
shutil.copyfile(s_pathinfo, d_pathinfo)
|
||||
|
||||
dst_dir = sdir + '/web_conf/php'
|
||||
dst_dir_conf = sdir + '/web_conf/php/conf'
|
||||
dst_dir_status = sdir + '/web_conf/php/status'
|
||||
if not os.path.exists(dst_dir):
|
||||
mw.execShell('mkdir -p ' + dst_dir)
|
||||
|
||||
if not os.path.exists(dst_dir_conf):
|
||||
mw.execShell('mkdir -p ' + dst_dir_conf)
|
||||
|
||||
if not os.path.exists(dst_dir_status):
|
||||
mw.execShell('mkdir -p ' + dst_dir_status)
|
||||
|
||||
info = getPluginDir() + '/info.json'
|
||||
content = mw.readFile(info)
|
||||
content = json.loads(content)
|
||||
versions = content['versions']
|
||||
tpl = getPluginDir() + '/conf/enable-php.conf'
|
||||
tpl_content = mw.readFile(tpl)
|
||||
dfile = sdir + '/web_conf/php/conf/enable-php-yum' + version + '.conf'
|
||||
if not os.path.exists(dfile):
|
||||
w_content = contentReplace(tpl_content, version)
|
||||
mw.writeFile(dfile, w_content)
|
||||
|
||||
# php-fpm status
|
||||
dfile = sdir + '/web_conf/php/status/phpfpm_status_yum' + version + '.conf'
|
||||
tpl = getPluginDir() + '/conf/phpfpm_status.conf'
|
||||
if not os.path.exists(dfile):
|
||||
content = mw.readFile(tpl)
|
||||
content = contentReplace(content, version)
|
||||
mw.writeFile(dfile, content)
|
||||
|
||||
|
||||
def phpFpmWwwReplace(version):
|
||||
service_php_fpm_dir = getServerDir() + '/php' + version + '/php-fpm.d/'
|
||||
if not os.path.exists(service_php_fpm_dir):
|
||||
os.mkdir(service_php_fpm_dir)
|
||||
|
||||
service_php_fpmwww = service_php_fpm_dir + '/www.conf'
|
||||
if os.path.exists(service_php_fpmwww):
|
||||
# 原来文件备份
|
||||
mw.execShell('mv ' + service_php_fpmwww +
|
||||
' ' + service_php_fpmwww + '.bak')
|
||||
|
||||
service_php_fpm_mw = service_php_fpm_dir + '/mw.conf'
|
||||
if not os.path.exists(service_php_fpm_mw):
|
||||
tpl_php_fpmwww = getPluginDir() + '/conf/www.conf'
|
||||
content = mw.readFile(tpl_php_fpmwww)
|
||||
content = contentReplace(content, version)
|
||||
mw.writeFile(service_php_fpm_mw, content)
|
||||
|
||||
|
||||
def getFpmConfFile(version):
|
||||
return getServerDir() + '/php' + version + '/php-fpm.d/mw.conf'
|
||||
|
||||
|
||||
def deleteConfList(version):
|
||||
sdir = mw.getServerDir()
|
||||
enable_conf = sdir + '/web_conf/php/conf/enable-php-yum' + version + '.conf'
|
||||
status_conf = sdir + '/web_conf/php/status/phpfpm_status_yum' + version + '.conf'
|
||||
|
||||
clist = (status_conf, enable_conf)
|
||||
for f in clist:
|
||||
if os.path.exists(f):
|
||||
os.remove(f)
|
||||
|
||||
|
||||
def initReplace(version):
|
||||
makeOpenrestyConf(version)
|
||||
phpFpmWwwReplace(version)
|
||||
|
||||
# systemd
|
||||
# mw.execShell('systemctl daemon-reload')
|
||||
return 'ok'
|
||||
|
||||
|
||||
def phpOp(version, method):
|
||||
if method == 'start':
|
||||
initReplace(version)
|
||||
|
||||
if mw.isAppleSystem():
|
||||
return 'fail'
|
||||
data = mw.execShell('systemctl ' + method + ' ' +
|
||||
'php' + version + '-php-fpm')
|
||||
if data[1] == '':
|
||||
return 'ok'
|
||||
return data[1]
|
||||
|
||||
|
||||
def start(version):
|
||||
return phpOp(version, 'start')
|
||||
|
||||
|
||||
def stop(version):
|
||||
status = phpOp(version, 'stop')
|
||||
deleteConfList(version)
|
||||
return status
|
||||
|
||||
|
||||
def restart(version):
|
||||
return phpOp(version, 'restart')
|
||||
|
||||
|
||||
def reload(version):
|
||||
return phpOp(version, 'reload')
|
||||
|
||||
|
||||
def initdStatus(version):
|
||||
if mw.isAppleSystem():
|
||||
return "Apple Computer does not support"
|
||||
|
||||
shell_cmd = 'systemctl status php' + version + \
|
||||
'-php-fpm | grep loaded | grep "enabled;"'
|
||||
data = mw.execShell(shell_cmd)
|
||||
if data[0] == '':
|
||||
return 'fail'
|
||||
return 'ok'
|
||||
|
||||
|
||||
def initdInstall(version):
|
||||
if mw.isAppleSystem():
|
||||
return "Apple Computer does not support"
|
||||
|
||||
mw.execShell('systemctl enable php' + version + '-php-fpm')
|
||||
return 'ok'
|
||||
|
||||
|
||||
def initdUinstall(version):
|
||||
if mw.isAppleSystem():
|
||||
return "Apple Computer does not support"
|
||||
|
||||
mw.execShell('systemctl disable php' + version + '-php-fpm')
|
||||
return 'ok'
|
||||
|
||||
|
||||
def fpmLog(version):
|
||||
return '/var/opt/remi/php' + version + '/log/php-fpm/error.log'
|
||||
|
||||
|
||||
def fpmSlowLog(version):
|
||||
return '/var/opt/remi/php' + version + '/log/php-fpm/www-slow.log'
|
||||
|
||||
|
||||
def getPhpConf(version):
|
||||
gets = [
|
||||
{'name': 'short_open_tag', 'type': 1, 'ps': '短标签支持'},
|
||||
{'name': 'asp_tags', 'type': 1, 'ps': 'ASP标签支持'},
|
||||
{'name': 'max_execution_time', 'type': 2, 'ps': '最大脚本运行时间'},
|
||||
{'name': 'max_input_time', 'type': 2, 'ps': '最大输入时间'},
|
||||
{'name': 'max_input_vars', 'type': 2, 'ps': '最大输入数量'},
|
||||
{'name': 'memory_limit', 'type': 2, 'ps': '脚本内存限制'},
|
||||
{'name': 'post_max_size', 'type': 2, 'ps': 'POST数据最大尺寸'},
|
||||
{'name': 'file_uploads', 'type': 1, 'ps': '是否允许上传文件'},
|
||||
{'name': 'upload_max_filesize', 'type': 2, 'ps': '允许上传文件的最大尺寸'},
|
||||
{'name': 'max_file_uploads', 'type': 2, 'ps': '允许同时上传文件的最大数量'},
|
||||
{'name': 'default_socket_timeout', 'type': 2, 'ps': 'Socket超时时间'},
|
||||
{'name': 'error_reporting', 'type': 3, 'ps': '错误级别'},
|
||||
{'name': 'display_errors', 'type': 1, 'ps': '是否输出详细错误信息'},
|
||||
{'name': 'cgi.fix_pathinfo', 'type': 0, 'ps': '是否开启pathinfo'},
|
||||
{'name': 'date.timezone', 'type': 3, 'ps': '时区'}
|
||||
]
|
||||
phpini = mw.readFile(getConf(version))
|
||||
result = []
|
||||
for g in gets:
|
||||
rep = g['name'] + '\s*=\s*([0-9A-Za-z_& ~]+)(\s*;?|\r?\n)'
|
||||
tmp = re.search(rep, phpini)
|
||||
if not tmp:
|
||||
continue
|
||||
g['value'] = tmp.groups()[0]
|
||||
result.append(g)
|
||||
return mw.getJson(result)
|
||||
|
||||
|
||||
def submitPhpConf(version):
|
||||
gets = ['display_errors', 'cgi.fix_pathinfo', 'date.timezone', 'short_open_tag',
|
||||
'asp_tags', 'max_execution_time', 'max_input_time', 'max_input_vars', 'memory_limit',
|
||||
'post_max_size', 'file_uploads', 'upload_max_filesize', 'max_file_uploads',
|
||||
'default_socket_timeout', 'error_reporting']
|
||||
args = getArgs()
|
||||
filename = getConf(version)
|
||||
phpini = mw.readFile(filename)
|
||||
for g in gets:
|
||||
if g in args:
|
||||
rep = g + '\s*=\s*(.+)\r?\n'
|
||||
val = g + ' = ' + args[g] + '\n'
|
||||
phpini = re.sub(rep, val, phpini)
|
||||
mw.writeFile(filename, phpini)
|
||||
reload(version)
|
||||
return mw.returnJson(True, '设置成功')
|
||||
|
||||
|
||||
def getLimitConf(version):
|
||||
fileini = getConf(version)
|
||||
phpini = mw.readFile(fileini)
|
||||
filefpm = getFpmConfFile(version)
|
||||
phpfpm = mw.readFile(filefpm)
|
||||
|
||||
# print fileini, filefpm
|
||||
data = {}
|
||||
try:
|
||||
rep = "upload_max_filesize\s*=\s*([0-9]+)M"
|
||||
tmp = re.search(rep, phpini).groups()
|
||||
data['max'] = tmp[0]
|
||||
except:
|
||||
data['max'] = '50'
|
||||
|
||||
try:
|
||||
rep = "request_terminate_timeout\s*=\s*([0-9]+)\n"
|
||||
tmp = re.search(rep, phpfpm).groups()
|
||||
data['maxTime'] = tmp[0]
|
||||
except:
|
||||
data['maxTime'] = 0
|
||||
|
||||
try:
|
||||
rep = r"\n;*\s*cgi\.fix_pathinfo\s*=\s*([0-9]+)\s*\n"
|
||||
tmp = re.search(rep, phpini).groups()
|
||||
|
||||
if tmp[0] == '1':
|
||||
data['pathinfo'] = True
|
||||
else:
|
||||
data['pathinfo'] = False
|
||||
except:
|
||||
data['pathinfo'] = False
|
||||
|
||||
return mw.getJson(data)
|
||||
|
||||
|
||||
def setMaxTime(version):
|
||||
args = getArgs()
|
||||
data = checkArgs(args, ['time'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
|
||||
time = args['time']
|
||||
if int(time) < 30 or int(time) > 86400:
|
||||
return mw.returnJson(False, '请填写30-86400间的值!')
|
||||
|
||||
filefpm = getFpmConfFile(version)
|
||||
conf = mw.readFile(filefpm)
|
||||
rep = "request_terminate_timeout\s*=\s*([0-9]+)\n"
|
||||
conf = re.sub(rep, "request_terminate_timeout = " + time + "\n", conf)
|
||||
mw.writeFile(filefpm, conf)
|
||||
|
||||
fileini = getConf(version)
|
||||
phpini = mw.readFile(fileini)
|
||||
rep = "max_execution_time\s*=\s*([0-9]+)\r?\n"
|
||||
phpini = re.sub(rep, "max_execution_time = " + time + "\n", phpini)
|
||||
rep = "max_input_time\s*=\s*([0-9]+)\r?\n"
|
||||
phpini = re.sub(rep, "max_input_time = " + time + "\n", phpini)
|
||||
mw.writeFile(fileini, phpini)
|
||||
return mw.returnJson(True, '设置成功!')
|
||||
|
||||
|
||||
def setMaxSize(version):
|
||||
args = getArgs()
|
||||
data = checkArgs(args, ['max'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
|
||||
maxVal = args['max']
|
||||
if int(maxVal) < 2:
|
||||
return mw.returnJson(False, '上传大小限制不能小于2MB!')
|
||||
|
||||
path = getConf(version)
|
||||
conf = mw.readFile(path)
|
||||
rep = u"\nupload_max_filesize\s*=\s*[0-9]+M"
|
||||
conf = re.sub(rep, u'\nupload_max_filesize = ' + maxVal + 'M', conf)
|
||||
rep = u"\npost_max_size\s*=\s*[0-9]+M"
|
||||
conf = re.sub(rep, u'\npost_max_size = ' + maxVal + 'M', conf)
|
||||
mw.writeFile(path, conf)
|
||||
|
||||
msg = mw.getInfo('设置PHP-{1}最大上传大小为[{2}MB]!', (version, maxVal,))
|
||||
mw.writeLog('插件管理[PHP]', msg)
|
||||
return mw.returnJson(True, '设置成功!')
|
||||
|
||||
|
||||
def getFpmConfig(version):
|
||||
|
||||
filefpm = getFpmConfFile(version)
|
||||
conf = mw.readFile(filefpm)
|
||||
data = {}
|
||||
rep = "\s*pm.max_children\s*=\s*([0-9]+)\s*"
|
||||
tmp = re.search(rep, conf).groups()
|
||||
data['max_children'] = tmp[0]
|
||||
|
||||
rep = "\s*pm.start_servers\s*=\s*([0-9]+)\s*"
|
||||
tmp = re.search(rep, conf).groups()
|
||||
data['start_servers'] = tmp[0]
|
||||
|
||||
rep = "\s*pm.min_spare_servers\s*=\s*([0-9]+)\s*"
|
||||
tmp = re.search(rep, conf).groups()
|
||||
data['min_spare_servers'] = tmp[0]
|
||||
|
||||
rep = "\s*pm.max_spare_servers \s*=\s*([0-9]+)\s*"
|
||||
tmp = re.search(rep, conf).groups()
|
||||
data['max_spare_servers'] = tmp[0]
|
||||
|
||||
rep = "\s*pm\s*=\s*(\w+)\s*"
|
||||
tmp = re.search(rep, conf).groups()
|
||||
data['pm'] = tmp[0]
|
||||
return mw.getJson(data)
|
||||
|
||||
|
||||
def setFpmConfig(version):
|
||||
args = getArgs()
|
||||
# if not 'max' in args:
|
||||
# return 'missing time args!'
|
||||
|
||||
version = args['version']
|
||||
max_children = args['max_children']
|
||||
start_servers = args['start_servers']
|
||||
min_spare_servers = args['min_spare_servers']
|
||||
max_spare_servers = args['max_spare_servers']
|
||||
pm = args['pm']
|
||||
|
||||
file = getServerDir() + '/php' + version + '/php-fpm.d/www.conf'
|
||||
conf = mw.readFile(file)
|
||||
|
||||
rep = "\s*pm.max_children\s*=\s*([0-9]+)\s*"
|
||||
conf = re.sub(rep, "\npm.max_children = " + max_children, conf)
|
||||
|
||||
rep = "\s*pm.start_servers\s*=\s*([0-9]+)\s*"
|
||||
conf = re.sub(rep, "\npm.start_servers = " + start_servers, conf)
|
||||
|
||||
rep = "\s*pm.min_spare_servers\s*=\s*([0-9]+)\s*"
|
||||
conf = re.sub(rep, "\npm.min_spare_servers = " +
|
||||
min_spare_servers, conf)
|
||||
|
||||
rep = "\s*pm.max_spare_servers \s*=\s*([0-9]+)\s*"
|
||||
conf = re.sub(rep, "\npm.max_spare_servers = " +
|
||||
max_spare_servers + "\n", conf)
|
||||
|
||||
rep = "\s*pm\s*=\s*(\w+)\s*"
|
||||
conf = re.sub(rep, "\npm = " + pm + "\n", conf)
|
||||
|
||||
mw.writeFile(file, conf)
|
||||
reload(version)
|
||||
|
||||
msg = mw.getInfo('设置PHP-{1}并发设置,max_children={2},start_servers={3},min_spare_servers={4},max_spare_servers={5}', (version, max_children,
|
||||
start_servers, min_spare_servers, max_spare_servers,))
|
||||
mw.writeLog('插件管理[PHP]', msg)
|
||||
return mw.returnJson(True, '设置成功!')
|
||||
|
||||
|
||||
def checkFpmStatusFile(version):
|
||||
if not mw.isInstalledWeb():
|
||||
return False
|
||||
|
||||
dfile = getServerDir() + '/nginx/conf/php_status/phpfpm_status_yum' + version + '.conf'
|
||||
if not os.path.exists(dfile):
|
||||
tpl = getPluginDir() + '/conf/phpfpm_status.conf'
|
||||
content = mw.readFile(tpl)
|
||||
content = contentReplace(content, version)
|
||||
mw.writeFile(dfile, content)
|
||||
mw.restartWeb()
|
||||
return True
|
||||
|
||||
|
||||
def getFpmStatus(version):
|
||||
|
||||
checkFpmStatusFile(version)
|
||||
stat = status(version)
|
||||
if stat == 'stop':
|
||||
return mw.returnJson(False, 'PHP[' + version + ']未启动!!!')
|
||||
|
||||
try:
|
||||
url = 'http://' + mw.getHostAddr() + '/phpfpm_status_yum' + version + '?json'
|
||||
result = mw.httpGet(url, 1)
|
||||
data = json.loads(result)
|
||||
fTime = time.localtime(int(data['start time']))
|
||||
data['start time'] = time.strftime('%Y-%m-%d %H:%M:%S', fTime)
|
||||
except Exception as e:
|
||||
url = 'http://127.0.0.1/phpfpm_status_yum' + version + '?json'
|
||||
result = mw.httpGet(url, 1)
|
||||
data = json.loads(result)
|
||||
fTime = time.localtime(int(data['start time']))
|
||||
data['start time'] = time.strftime('%Y-%m-%d %H:%M:%S', fTime)
|
||||
except Exception as e:
|
||||
data = {}
|
||||
|
||||
return mw.returnJson(True, "OK", data)
|
||||
|
||||
|
||||
def getDisableFunc(version):
|
||||
filename = getConf(version)
|
||||
if not os.path.exists(filename):
|
||||
return mw.returnJson(False, '指定PHP版本不存在!')
|
||||
|
||||
phpini = mw.readFile(filename)
|
||||
data = {}
|
||||
rep = "disable_functions\s*=\s{0,1}(.*)\n"
|
||||
tmp = re.search(rep, phpini).groups()
|
||||
data['disable_functions'] = tmp[0]
|
||||
return mw.getJson(data)
|
||||
|
||||
|
||||
def setDisableFunc(version):
|
||||
filename = getConf(version)
|
||||
if not os.path.exists(filename):
|
||||
return mw.returnJson(False, '指定PHP版本不存在!')
|
||||
|
||||
args = getArgs()
|
||||
disable_functions = args['disable_functions']
|
||||
|
||||
phpini = mw.readFile(filename)
|
||||
rep = "disable_functions\s*=\s*.*\n"
|
||||
phpini = re.sub(rep, 'disable_functions = ' +
|
||||
disable_functions + "\n", phpini)
|
||||
|
||||
msg = mw.getInfo('修改PHP-{1}的禁用函数为[{2}]', (version, disable_functions,))
|
||||
mw.writeLog('插件管理[PHP-YUM]', msg)
|
||||
mw.writeFile(filename, phpini)
|
||||
reload(version)
|
||||
return mw.returnJson(True, '设置成功!')
|
||||
|
||||
|
||||
def checkPhpinfoFile(v):
|
||||
sdir = mw.getServerDir()
|
||||
dfile = sdir + '/web_conf/php/status/phpinfo_' + v + '.conf'
|
||||
tpl = getPluginDir() + '/conf/phpinfo.conf'
|
||||
content = mw.readFile(tpl)
|
||||
content = contentReplace(content, v)
|
||||
mw.writeFile(dfile, content)
|
||||
mw.restartWeb()
|
||||
|
||||
|
||||
def getPhpinfo(v):
|
||||
checkPhpinfoFile(v)
|
||||
sPath = mw.getRootDir() + '/phpinfo/' + v
|
||||
|
||||
mw.execShell("rm -rf " + mw.getRootDir() + '/phpinfo')
|
||||
mw.execShell("mkdir -p " + sPath)
|
||||
mw.writeFile(sPath + '/phpinfo.php', '<?php phpinfo(); ?>')
|
||||
url = 'http://127.0.0.1/' + v + '/phpinfo.php'
|
||||
phpinfo = mw.httpGet(url)
|
||||
os.system("rm -rf " + mw.getRootDir() + '/phpinfo')
|
||||
return phpinfo
|
||||
|
||||
|
||||
def get_php_info(args):
|
||||
if not mw.isInstalledWeb():
|
||||
return "openresty is not running!!!"
|
||||
return getPhpinfo(args['version'])
|
||||
|
||||
|
||||
def getLibConf(version):
|
||||
fname = getConf(version)
|
||||
if not os.path.exists(fname):
|
||||
return mw.returnJson(False, '指定PHP版本不存在!')
|
||||
|
||||
# phpini = mw.readFile(fname)
|
||||
content = mw.execShell('cat /etc/opt/remi/php' +
|
||||
version + "/php.d/* | grep -v '^;' |tr -s '\n'")
|
||||
content = content[0]
|
||||
|
||||
libpath = getPluginDir() + '/versions/phplib.conf'
|
||||
phplib = json.loads(mw.readFile(libpath))
|
||||
|
||||
libs = []
|
||||
tasks = mw.M('tasks').where(
|
||||
"status!=?", ('1',)).field('status,name').select()
|
||||
for lib in phplib:
|
||||
lib['task'] = '1'
|
||||
for task in tasks:
|
||||
tmp = mw.getStrBetween('[', ']', task['name'])
|
||||
if not tmp:
|
||||
continue
|
||||
tmp1 = tmp.split('-')
|
||||
if tmp1[0].lower() == lib['name'].lower():
|
||||
lib['task'] = task['status']
|
||||
lib['phpversions'] = []
|
||||
lib['phpversions'].append(tmp1[1])
|
||||
if content.find(lib['check']) == -1:
|
||||
lib['status'] = False
|
||||
else:
|
||||
lib['status'] = True
|
||||
libs.append(lib)
|
||||
return mw.returnJson(True, 'OK!', libs)
|
||||
|
||||
|
||||
def installLib(version):
|
||||
args = getArgs()
|
||||
data = checkArgs(args, ['name'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
|
||||
name = args['name']
|
||||
execstr = "cd " + getPluginDir() + '/versions/' + \
|
||||
" && /bin/bash common.sh " + version + ' install ' + name
|
||||
|
||||
rettime = time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
insert_info = (None, '安装PHPYUM[' + name + '-' + version + ']',
|
||||
'execshell', '0', rettime, execstr)
|
||||
mw.M('tasks').add('id,name,type,status,addtime,execstr', insert_info)
|
||||
|
||||
mw.triggerTask()
|
||||
return mw.returnJson(True, '已将下载任务添加到队列!')
|
||||
|
||||
|
||||
def uninstallLib(version):
|
||||
args = getArgs()
|
||||
data = checkArgs(args, ['name'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
|
||||
name = args['name']
|
||||
execstr = "cd " + getPluginDir() + '/versions/' + \
|
||||
" && /bin/bash common.sh " + version + ' uninstall ' + name
|
||||
|
||||
data = mw.execShell(execstr)
|
||||
# data[0] == '' and
|
||||
if data[1] == '':
|
||||
return mw.returnJson(True, '已经卸载成功!')
|
||||
else:
|
||||
return mw.returnJson(False, '卸载错误信息!:' + data[1])
|
||||
|
||||
|
||||
def installPreInspection(version):
|
||||
sys = mw.execShell(
|
||||
"cat /etc/*-release | grep PRETTY_NAME |awk -F = '{print $2}' | awk -F '\"' '{print $2}'| awk '{print $1}'")
|
||||
|
||||
sys_id = mw.execShell(
|
||||
"cat /etc/*-release | grep VERSION_ID | awk -F = '{print $2}' | awk -F '\"' '{print $2}'")
|
||||
|
||||
sysName = sys[0].strip().lower()
|
||||
sysId = sys_id[0].strip()
|
||||
|
||||
if not sysName in ('centos'):
|
||||
return '暂时仅支持centos'
|
||||
return 'ok'
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
if len(sys.argv) < 3:
|
||||
print('missing parameters')
|
||||
exit(0)
|
||||
|
||||
func = sys.argv[1]
|
||||
version = sys.argv[2]
|
||||
|
||||
if func == 'status':
|
||||
print(status(version))
|
||||
elif func == 'start':
|
||||
print(start(version))
|
||||
elif func == 'stop':
|
||||
print(stop(version))
|
||||
elif func == 'restart':
|
||||
print(restart(version))
|
||||
elif func == 'reload':
|
||||
print(reload(version))
|
||||
elif func == 'install_pre_inspection':
|
||||
print(installPreInspection(version))
|
||||
elif func == 'initd_status':
|
||||
print(initdStatus(version))
|
||||
elif func == 'initd_install':
|
||||
print(initdInstall(version))
|
||||
elif func == 'initd_uninstall':
|
||||
print(initdUinstall(version))
|
||||
elif func == 'fpm_log':
|
||||
print(fpmLog(version))
|
||||
elif func == 'fpm_slow_log':
|
||||
print(fpmSlowLog(version))
|
||||
elif func == 'conf':
|
||||
print(getConf(version))
|
||||
elif func == 'get_php_conf':
|
||||
print(getPhpConf(version))
|
||||
elif func == 'get_fpm_conf_file':
|
||||
print(getFpmConfFile(version))
|
||||
elif func == 'submit_php_conf':
|
||||
print(submitPhpConf(version))
|
||||
elif func == 'get_limit_conf':
|
||||
print(getLimitConf(version))
|
||||
elif func == 'set_max_time':
|
||||
print(setMaxTime(version))
|
||||
elif func == 'set_max_size':
|
||||
print(setMaxSize(version))
|
||||
elif func == 'get_fpm_conf':
|
||||
print(getFpmConfig(version))
|
||||
elif func == 'set_fpm_conf':
|
||||
print(setFpmConfig(version))
|
||||
elif func == 'get_fpm_status':
|
||||
print(getFpmStatus(version))
|
||||
elif func == 'get_disable_func':
|
||||
print(getDisableFunc(version))
|
||||
elif func == 'set_disable_func':
|
||||
print(setDisableFunc(version))
|
||||
elif func == 'get_phpinfo':
|
||||
print(getPhpinfo(version))
|
||||
elif func == 'get_lib_conf':
|
||||
print(getLibConf(version))
|
||||
elif func == 'install_lib':
|
||||
print(installLib(version))
|
||||
elif func == 'uninstall_lib':
|
||||
print(uninstallLib(version))
|
||||
else:
|
||||
print("fail")
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"sort": 7,
|
||||
"ps": "PHP是世界上最好的编程语言[APT]",
|
||||
"shell": "install.sh",
|
||||
"name": "php-apt",
|
||||
"title": "PHP[APT]",
|
||||
"coexist": true,
|
||||
"versions": ["74","80","81","82"],
|
||||
"install_pre_inspection":true,
|
||||
"tip": "soft",
|
||||
"checks": "server/php-apt/VERSION",
|
||||
"path": "server/php-apt/VERSION",
|
||||
"display": 1,
|
||||
"author": "Zend",
|
||||
"date": "2022-07-07",
|
||||
"home": "https://www.php.net",
|
||||
"type": "PHP语言解释器",
|
||||
"pid": "1"
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
#!/bin/bash
|
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
||||
export PATH
|
||||
|
||||
curPath=`pwd`
|
||||
rootPath=$(dirname "$curPath")
|
||||
rootPath=$(dirname "$rootPath")
|
||||
serverPath=$(dirname "$rootPath")
|
||||
|
||||
install_tmp=${rootPath}/tmp/mw_install.pl
|
||||
|
||||
if id www &> /dev/null ;then
|
||||
echo "www UID is `id -u www`"
|
||||
echo "www Shell is `grep "^www:" /etc/passwd |cut -d':' -f7 `"
|
||||
else
|
||||
groupadd www
|
||||
# useradd -g www -s /sbin/nologin www
|
||||
useradd -g www -s /bin/bash www
|
||||
fi
|
||||
|
||||
action=$1
|
||||
type=$2
|
||||
|
||||
if [ "${2}" == "" ];then
|
||||
echo '缺少安装脚本...' > $install_tmp
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ ! -d $curPath/versions/$2 ];then
|
||||
echo '缺少安装脚本2...' > $install_tmp
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
||||
if [ "${action}" == "uninstall" ] && [ -d ${serverPath}/php-apt/${type} ];then
|
||||
#初始化
|
||||
cd ${rootPath} && python3 ${rootPath}/plugins/php-apt/index.py stop ${type}
|
||||
cd ${rootPath} && python3 ${rootPath}/plugins/php-apt/index.py initd_uninstall ${type}
|
||||
fi
|
||||
|
||||
cd ${curPath} && sh -x $curPath/versions/$2/install.sh $1
|
||||
|
||||
if [ "${action}" == "install" ] && [ -d ${serverPath}/php-apt/${type} ];then
|
||||
#初始化
|
||||
cd ${rootPath} && python3 ${rootPath}/plugins/php-apt/index.py start ${type}
|
||||
cd ${rootPath} && python3 ${rootPath}/plugins/php-apt/index.py initd_install ${type}
|
||||
fi
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,545 @@
|
|||
|
||||
function str2Obj(str){
|
||||
var data = {};
|
||||
kv = str.split('&');
|
||||
for(i in kv){
|
||||
v = kv[i].split('=');
|
||||
data[v[0]] = v[1];
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
function phpPost(method, version, args,callback){
|
||||
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
|
||||
|
||||
var req_data = {};
|
||||
req_data['name'] = 'php-apt';
|
||||
req_data['func'] = method;
|
||||
req_data['version'] = version;
|
||||
|
||||
if (typeof(args) == 'string'){
|
||||
req_data['args'] = JSON.stringify(str2Obj(args));
|
||||
} else {
|
||||
req_data['args'] = JSON.stringify(args);
|
||||
}
|
||||
|
||||
$.post('/plugins/run', req_data, function(data) {
|
||||
layer.close(loadT);
|
||||
if (!data.status){
|
||||
//错误展示10S
|
||||
layer.msg(data.msg,{icon:0,time:2000,shade: [10, '#000']});
|
||||
return;
|
||||
}
|
||||
|
||||
if(typeof(callback) == 'function'){
|
||||
callback(data);
|
||||
}
|
||||
},'json');
|
||||
}
|
||||
|
||||
function phpPostCallbak(method, version, args,callback){
|
||||
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
|
||||
|
||||
var req_data = {};
|
||||
req_data['name'] = 'php-apt';
|
||||
req_data['func'] = method;
|
||||
args['version'] = version;
|
||||
|
||||
if (typeof(args) == 'string'){
|
||||
req_data['args'] = JSON.stringify(str2Obj(args));
|
||||
} else {
|
||||
req_data['args'] = JSON.stringify(args);
|
||||
}
|
||||
|
||||
$.post('/plugins/callback', req_data, function(data) {
|
||||
layer.close(loadT);
|
||||
if (!data.status){
|
||||
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
|
||||
return;
|
||||
}
|
||||
|
||||
if(typeof(callback) == 'function'){
|
||||
callback(data);
|
||||
}
|
||||
},'json');
|
||||
}
|
||||
|
||||
|
||||
//配置修改
|
||||
function phpSetConfig(version) {
|
||||
phpPost('get_php_conf', version,'',function(data){
|
||||
// console.log(data);
|
||||
var rdata = $.parseJSON(data.data);
|
||||
// console.log(rdata);
|
||||
var mlist = '';
|
||||
for (var i = 0; i < rdata.length; i++) {
|
||||
var w = '70'
|
||||
if (rdata[i].name == 'error_reporting') w = '250';
|
||||
var ibody = '<input style="width: ' + w + 'px;" class="bt-input-text mr5" name="' + rdata[i].name + '" value="' + rdata[i].value + '" type="text" >';
|
||||
switch (rdata[i].type) {
|
||||
case 0:
|
||||
var selected_1 = (rdata[i].value == 1) ? 'selected' : '';
|
||||
var selected_0 = (rdata[i].value == 0) ? 'selected' : '';
|
||||
ibody = '<select class="bt-input-text mr5" name="' + rdata[i].name + '" style="width: ' + w + 'px;"><option value="1" ' + selected_1 + '>开启</option><option value="0" ' + selected_0 + '>关闭</option></select>'
|
||||
break;
|
||||
case 1:
|
||||
var selected_1 = (rdata[i].value == 'On') ? 'selected' : '';
|
||||
var selected_0 = (rdata[i].value == 'Off') ? 'selected' : '';
|
||||
ibody = '<select class="bt-input-text mr5" name="' + rdata[i].name + '" style="width: ' + w + 'px;"><option value="On" ' + selected_1 + '>开启</option><option value="Off" ' + selected_0 + '>关闭</option></select>'
|
||||
break;
|
||||
}
|
||||
mlist += '<p><span>' + rdata[i].name + '</span>' + ibody + ', <font>' + rdata[i].ps + '</font></p>'
|
||||
}
|
||||
var phpCon = '<style>.conf_p p{margin-bottom: 2px}</style><div class="conf_p" style="margin-bottom:0">\
|
||||
' + mlist + '\
|
||||
<div style="margin-top:10px; padding-right:15px" class="text-right"><button class="btn btn-success btn-sm mr5" onclick="phpSetConfig(' + version + ')">刷新</button><button class="btn btn-success btn-sm" onclick="submitConf(' + version + ')">保存</button></div>\
|
||||
</div>'
|
||||
$(".soft-man-con").html(phpCon);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
//提交PHP配置
|
||||
function submitConf(version) {
|
||||
var data = {
|
||||
version: version,
|
||||
display_errors: $("select[name='display_errors']").val(),
|
||||
'cgi.fix_pathinfo': $("select[name='cgi.fix_pathinfo']").val(),
|
||||
'date.timezone': $("input[name='date.timezone']").val(),
|
||||
short_open_tag: $("select[name='short_open_tag']").val(),
|
||||
asp_tags: $("select[name='asp_tags']").val() || 'On',
|
||||
safe_mode: $("select[name='safe_mode']").val(),
|
||||
max_execution_time: $("input[name='max_execution_time']").val(),
|
||||
max_input_time: $("input[name='max_input_time']").val(),
|
||||
max_input_vars: $("input[name='max_input_vars']").val(),
|
||||
memory_limit: $("input[name='memory_limit']").val(),
|
||||
post_max_size: $("input[name='post_max_size']").val(),
|
||||
file_uploads: $("select[name='file_uploads']").val(),
|
||||
upload_max_filesize: $("input[name='upload_max_filesize']").val(),
|
||||
max_file_uploads: $("input[name='max_file_uploads']").val(),
|
||||
default_socket_timeout: $("input[name='default_socket_timeout']").val(),
|
||||
error_reporting: $("input[name='error_reporting']").val() || 'On'
|
||||
};
|
||||
|
||||
phpPost('submit_php_conf', version, data, function(ret_data){
|
||||
var rdata = $.parseJSON(ret_data.data);
|
||||
// console.log(rdata);
|
||||
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
//php上传限制
|
||||
function phpUploadLimitReq(version){
|
||||
phpPost('get_limit_conf', version, '', function(ret_data){
|
||||
var rdata = $.parseJSON(ret_data.data);
|
||||
phpUploadLimit(version,rdata['max']);
|
||||
});
|
||||
}
|
||||
|
||||
function phpUploadLimit(version,max){
|
||||
var LimitCon = '<p class="conf_p"><input class="phpUploadLimit bt-input-text mr5" type="number" value="'+
|
||||
max+'" name="max">MB<button class="btn btn-success btn-sm" onclick="setPHPMaxSize(\''+
|
||||
version+'\')" style="margin-left:20px">保存</button></p>';
|
||||
$(".soft-man-con").html(LimitCon);
|
||||
}
|
||||
|
||||
|
||||
//php超时限制
|
||||
function phpTimeLimitReq(version){
|
||||
phpPost('get_limit_conf', version, '', function(ret_data){
|
||||
var rdata = $.parseJSON(ret_data.data);
|
||||
phpTimeLimit(version,rdata['maxTime']);
|
||||
});
|
||||
}
|
||||
|
||||
function phpTimeLimit(version, max) {
|
||||
var LimitCon = '<p class="conf_p"><input class="phpTimeLimit bt-input-text mr5" type="number" value="' + max + '">秒<button class="btn btn-success btn-sm" onclick="setPHPMaxTime(\'' + version + '\')" style="margin-left:20px">保存</button></p>';
|
||||
$(".soft-man-con").html(LimitCon);
|
||||
}
|
||||
|
||||
//设置超时限制
|
||||
function setPHPMaxTime(version) {
|
||||
var max = $(".phpTimeLimit").val();
|
||||
phpPost('set_max_time',version,{'time':max},function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||||
});
|
||||
}
|
||||
//设置PHP上传限制
|
||||
function setPHPMaxSize(version) {
|
||||
max = $(".phpUploadLimit").val();
|
||||
if (max < 2) {
|
||||
alert(max);
|
||||
layer.msg('上传大小限制不能小于2M', { icon: 2 });
|
||||
return;
|
||||
}
|
||||
|
||||
phpPost('set_max_size',version,{'max':max},function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function getFpmConfig(version){
|
||||
phpPost('get_fpm_conf', version, {}, function(data){
|
||||
// console.log(data);
|
||||
var rdata = $.parseJSON(data.data);
|
||||
// console.log(rdata);
|
||||
var limitList = "<option value='0'>自定义</option>" +
|
||||
"<option value='1' " + (rdata.max_children == 30 ? 'selected' : '') + ">30并发</option>" +
|
||||
"<option value='2' " + (rdata.max_children == 50 ? 'selected' : '') + ">50并发</option>" +
|
||||
"<option value='3' " + (rdata.max_children == 100 ? 'selected' : '') + ">100并发</option>" +
|
||||
"<option value='4' " + (rdata.max_children == 200 ? 'selected' : '') + ">200并发</option>" +
|
||||
"<option value='5' " + (rdata.max_children == 300 ? 'selected' : '') + ">300并发</option>" +
|
||||
"<option value='6' " + (rdata.max_children == 500 ? 'selected' : '') + ">500并发</option>"
|
||||
var pms = [{ 'name': 'static', 'title': '静态' }, { 'name': 'dynamic', 'title': '动态' }];
|
||||
var pmList = '';
|
||||
for (var i = 0; i < pms.length; i++) {
|
||||
pmList += '<option value="' + pms[i].name + '" ' + ((pms[i].name == rdata.pm) ? 'selected' : '') + '>' + pms[i].title + '</option>';
|
||||
}
|
||||
var body = "<div class='bingfa'>" +
|
||||
"<p class='line'><span class='span_tit'>并发方案:</span><select class='bt-input-text' name='limit' style='width:100px;'>" + limitList + "</select></p>" +
|
||||
"<p class='line'><span class='span_tit'>运行模式:</span><select class='bt-input-text' name='pm' style='width:100px;'>" + pmList + "</select><span class='c9'>*PHP-FPM运行模式</span></p>" +
|
||||
"<p class='line'><span class='span_tit'>max_children:</span><input class='bt-input-text' type='number' name='max_children' value='" + rdata.max_children + "' /><span class='c9'>*允许创建的最大子进程数</span></p>" +
|
||||
"<p class='line'><span class='span_tit'>start_servers:</span><input class='bt-input-text' type='number' name='start_servers' value='" + rdata.start_servers + "' /> <span class='c9'>*起始进程数(服务启动后初始进程数量)</span></p>" +
|
||||
"<p class='line'><span class='span_tit'>min_spare_servers:</span><input class='bt-input-text' type='number' name='min_spare_servers' value='" + rdata.min_spare_servers + "' /> <span class='c9'>*最小空闲进程数(清理空闲进程后的保留数量)</span></p>" +
|
||||
"<p class='line'><span class='span_tit'>max_spare_servers:</span><input class='bt-input-text' type='number' name='max_spare_servers' value='" + rdata.max_spare_servers + "' /> <span class='c9'>*最大空闲进程数(当空闲进程达到此值时清理)</span></p>" +
|
||||
"<div class='mtb15'><button class='btn btn-success btn-sm' onclick='setFpmConfig(\"" + version + "\",1)'>保存</button></div>" +
|
||||
"</div>";
|
||||
|
||||
$(".soft-man-con").html(body);
|
||||
$("select[name='limit']").change(function() {
|
||||
var type = $(this).val();
|
||||
var max_children = rdata.max_children;
|
||||
var start_servers = rdata.start_servers;
|
||||
var min_spare_servers = rdata.min_spare_servers;
|
||||
var max_spare_servers = rdata.max_spare_servers;
|
||||
switch (type) {
|
||||
case '1':
|
||||
max_children = 30;
|
||||
start_servers = 5;
|
||||
min_spare_servers = 5;
|
||||
max_spare_servers = 20;
|
||||
break;
|
||||
case '2':
|
||||
max_children = 50;
|
||||
start_servers = 15;
|
||||
min_spare_servers = 15;
|
||||
max_spare_servers = 35;
|
||||
break;
|
||||
case '3':
|
||||
max_children = 100;
|
||||
start_servers = 20;
|
||||
min_spare_servers = 20;
|
||||
max_spare_servers = 70;
|
||||
break;
|
||||
case '4':
|
||||
max_children = 200;
|
||||
start_servers = 25;
|
||||
min_spare_servers = 25;
|
||||
max_spare_servers = 150;
|
||||
break;
|
||||
case '5':
|
||||
max_children = 300;
|
||||
start_servers = 30;
|
||||
min_spare_servers = 30;
|
||||
max_spare_servers = 180;
|
||||
break;
|
||||
case '6':
|
||||
max_children = 500;
|
||||
start_servers = 35;
|
||||
min_spare_servers = 35;
|
||||
max_spare_servers = 250;
|
||||
break;
|
||||
}
|
||||
|
||||
$("input[name='max_children']").val(max_children);
|
||||
$("input[name='start_servers']").val(start_servers);
|
||||
$("input[name='min_spare_servers']").val(min_spare_servers);
|
||||
$("input[name='max_spare_servers']").val(max_spare_servers);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function setFpmConfig(version){
|
||||
var max_children = Number($("input[name='max_children']").val());
|
||||
var start_servers = Number($("input[name='start_servers']").val());
|
||||
var min_spare_servers = Number($("input[name='min_spare_servers']").val());
|
||||
var max_spare_servers = Number($("input[name='max_spare_servers']").val());
|
||||
var pm = $("select[name='pm']").val();
|
||||
|
||||
if (max_children < max_spare_servers) {
|
||||
layer.msg('max_spare_servers 不能大于 max_children', { icon: 2 });
|
||||
return;
|
||||
}
|
||||
|
||||
if (min_spare_servers > start_servers) {
|
||||
layer.msg('min_spare_servers 不能大于 start_servers', { icon: 2 });
|
||||
return;
|
||||
}
|
||||
|
||||
if (max_spare_servers < min_spare_servers) {
|
||||
layer.msg('min_spare_servers 不能大于 max_spare_servers', { icon: 2 });
|
||||
return;
|
||||
}
|
||||
|
||||
if (max_children < start_servers) {
|
||||
layer.msg('start_servers 不能大于 max_children', { icon: 2 });
|
||||
return;
|
||||
}
|
||||
|
||||
if (max_children < 1 || start_servers < 1 || min_spare_servers < 1 || max_spare_servers < 1) {
|
||||
layer.msg('配置值不能小于1', { icon: 2 });
|
||||
return;
|
||||
}
|
||||
|
||||
var data = {
|
||||
version:version,
|
||||
max_children:max_children,
|
||||
start_servers:start_servers,
|
||||
min_spare_servers:min_spare_servers,
|
||||
max_spare_servers:max_spare_servers,
|
||||
pm:pm,
|
||||
};
|
||||
phpPost('set_fpm_conf', version, data, function(ret_data){
|
||||
var rdata = $.parseJSON(ret_data.data);
|
||||
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function getFpmStatus(version){
|
||||
phpPost('get_fpm_status', version, '', function(ret_data){
|
||||
var tmp_data = $.parseJSON(ret_data.data);
|
||||
if(!tmp_data.status){
|
||||
layer.msg(tmp_data.msg, { icon: tmp_data.status ? 1 : 2 });
|
||||
return;
|
||||
}
|
||||
|
||||
var rdata = tmp_data.data;
|
||||
var con = "<div style='height:420px;overflow:hidden;'><table class='table table-hover table-bordered GetPHPStatus' style='margin:0;padding:0'>\
|
||||
<tr><th>应用池(pool)</th><td>" + rdata.pool + "</td></tr>\
|
||||
<tr><th>进程管理方式(process manager)</th><td>" + ((rdata['process manager'] == 'dynamic') ? '动态' : '静态') + "</td></tr>\
|
||||
<tr><th>启动日期(start time)</th><td>" + rdata['start time'] + "</td></tr>\
|
||||
<tr><th>请求数(accepted conn)</th><td>" + rdata['accepted conn'] + "</td></tr>\
|
||||
<tr><th>请求队列(listen queue)</th><td>" + rdata['listen queue'] + "</td></tr>\
|
||||
<tr><th>最大等待队列(max listen queue)</th><td>" + rdata['max listen queue'] + "</td></tr>\
|
||||
<tr><th>socket队列长度(listen queue len)</th><td>" + rdata['listen queue len'] + "</td></tr>\
|
||||
<tr><th>空闲进程数量(idle processes)</th><td>" + rdata['idle processes'] + "</td></tr>\
|
||||
<tr><th>活跃进程数量(active processes)</th><td>" + rdata['active processes'] + "</td></tr>\
|
||||
<tr><th>总进程数量(total processes)</th><td>" + rdata['total processes'] + "</td></tr>\
|
||||
<tr><th>最大活跃进程数量(max active processes)</th><td>" + rdata['max active processes'] + "</td></tr>\
|
||||
<tr><th>到达进程上限次数(max children reached)</th><td>" + rdata['max children reached'] + "</td></tr>\
|
||||
<tr><th>慢请求数量(slow requests)</th><td>" + rdata['slow requests'] + "</td></tr>\
|
||||
</table></div>";
|
||||
$(".soft-man-con").html(con);
|
||||
$(".GetPHPStatus td,.GetPHPStatus th").css("padding", "7px");
|
||||
});
|
||||
}
|
||||
|
||||
//禁用函数
|
||||
function disableFunc(version) {
|
||||
phpPost('get_disable_func', version,'',function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
var disable_functions = rdata.disable_functions.split(',');
|
||||
var dbody = ''
|
||||
for (var i = 0; i < disable_functions.length; i++) {
|
||||
if (disable_functions[i] == '') continue;
|
||||
dbody += "<tr><td>" + disable_functions[i] + "</td><td><a style='float:right;' href=\"javascript:setDisableFunc('" + version + "','" + disable_functions[i] + "','" + rdata.disable_functions + "');\">删除</a></td></tr>";
|
||||
}
|
||||
|
||||
var con = "<div class='dirBinding'>" +
|
||||
"<input class='bt-input-text mr5' type='text' placeholder='添加要被禁止的函数名,如: exec' id='disable_function_val' style='height: 28px; border-radius: 3px;width: 410px;' />" +
|
||||
"<button class='btn btn-success btn-sm' onclick=\"setDisableFunc('" + version + "',1,'" + rdata.disable_functions + "')\">添加</button>" +
|
||||
"</div>" +
|
||||
"<div class='divtable mtb15' style='height:350px;overflow:auto'><table class='table table-hover' width='100%' style='margin-bottom:0'>" +
|
||||
"<thead><tr><th>名称</th><th width='100' class='text-right'>操作</th></tr></thead>" +
|
||||
"<tbody id='blacktable'>" + dbody + "</tbody>" +
|
||||
"</table></div>";
|
||||
|
||||
con += '<ul class="help-info-text">\
|
||||
<li>在此处可以禁用指定函数的调用,以增强环境安全性!</li>\
|
||||
<li>强烈建议禁用如exec,system等危险函数!</li>\
|
||||
</ul>';
|
||||
|
||||
$(".soft-man-con").html(con);
|
||||
});
|
||||
}
|
||||
//设置禁用函数
|
||||
function setDisableFunc(version, act, fs) {
|
||||
var fsArr = fs.split(',');
|
||||
if (act == 1) {
|
||||
var functions = $("#disable_function_val").val();
|
||||
for (var i = 0; i < fsArr.length; i++) {
|
||||
if (functions == fsArr[i]) {
|
||||
layer.msg(lan.soft.fun_msg, { icon: 5 });
|
||||
return;
|
||||
}
|
||||
}
|
||||
fs += ',' + functions;
|
||||
msg = '添加成功';
|
||||
} else {
|
||||
|
||||
fs = '';
|
||||
for (var i = 0; i < fsArr.length; i++) {
|
||||
if (act == fsArr[i]) continue;
|
||||
fs += fsArr[i] + ','
|
||||
}
|
||||
msg = '删除成功';
|
||||
fs = fs.substr(0, fs.length - 1);
|
||||
}
|
||||
|
||||
var data = {
|
||||
'version':version,
|
||||
'disable_functions':fs,
|
||||
};
|
||||
|
||||
phpPost('set_disable_func', version,data,function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
showMsg(rdata.status ? msg : rdata.msg, function(){
|
||||
disableFunc(version);
|
||||
} ,{ icon: rdata.status ? 1 : 2 });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
//phpinfo
|
||||
function getPhpinfo(version) {
|
||||
var con = '<button class="btn btn-default btn-sm" onclick="getPHPInfo(\'' + version + '\')">查看phpinfo()</button>';
|
||||
$(".soft-man-con").html(con);
|
||||
}
|
||||
|
||||
//获取PHPInfo
|
||||
function getPHPInfo_old(version) {
|
||||
phpPost('get_phpinfo', version, '', function(data){
|
||||
var rdata = data.data;
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: "PHP-" + version + "-PHPINFO",
|
||||
area: ['90%', '90%'],
|
||||
closeBtn: 2,
|
||||
shadeClose: true,
|
||||
content: rdata
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function getPHPInfo(version) {
|
||||
phpPostCallbak('get_php_info', version, {}, function(data){
|
||||
if (!data.status){
|
||||
layer.msg(rdata.msg, { icon: 2 });
|
||||
}
|
||||
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: "PHP-" + version + "-PHPINFO",
|
||||
area: ['90%', '90%'],
|
||||
closeBtn: 2,
|
||||
shadeClose: true,
|
||||
content: data.data
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
function phpLibConfig(version){
|
||||
|
||||
phpPost('get_lib_conf', version, '', function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
|
||||
if (!rdata.status){
|
||||
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||||
return;
|
||||
}
|
||||
|
||||
var libs = rdata.data;
|
||||
var body = '';
|
||||
var opt = '';
|
||||
|
||||
for (var i = 0; i < libs.length; i++) {
|
||||
if (libs[i].versions.indexOf(version) == -1){
|
||||
continue;
|
||||
}
|
||||
|
||||
if (libs[i]['task'] == '-1' && libs[i].phpversions.indexOf(version) != -1) {
|
||||
opt = '<a style="color:green;" href="javascript:messageBox();">安装</a>'
|
||||
} else if (libs[i]['task'] == '0' && libs[i].phpversions.indexOf(version) != -1) {
|
||||
opt = '<a style="color:#C0C0C0;" href="javascript:messageBox();">等待安装...</a>'
|
||||
} else if (libs[i].status) {
|
||||
opt = '<a style="color:red;" href="javascript:uninstallPHPLib(\'' + version + '\',\'' + libs[i].name + '\',\'' + libs[i].title + '\',' + '' + ');">卸载</a>'
|
||||
} else {
|
||||
opt = '<a class="btlink" href="javascript:installPHPLib(\'' + version + '\',\'' + libs[i].name + '\',\'' + libs[i].title + '\',' + '' + ');">安装</a>'
|
||||
}
|
||||
|
||||
body += '<tr>' +
|
||||
'<td>' + libs[i].name + '</td>' +
|
||||
'<td>' + libs[i].type + '</td>' +
|
||||
'<td>' + libs[i].msg + '</td>' +
|
||||
'<td><span class="ico-' + (libs[i].status ? 'start' : 'stop') + ' glyphicon glyphicon-' + (libs[i].status ? 'ok' : 'remove') + '"></span></td>' +
|
||||
'<td style="text-align: right;">' + opt + '</td>' +
|
||||
'</tr>';
|
||||
}
|
||||
|
||||
|
||||
var con = '<div class="divtable" id="phpextdiv" style="margin-right:10px;height: 420px; overflow: auto; margin-right: 0px;">' +
|
||||
'<table class="table table-hover" width="100%" cellspacing="0" cellpadding="0" border="0">' +
|
||||
'<thead>' +
|
||||
'<tr>' +
|
||||
'<th>名称</th>' +
|
||||
'<th width="64">类型</th>' +
|
||||
'<th>说明</th>' +
|
||||
'<th width="40">状态</th>' +
|
||||
'<th style="text-align: right;" width="50">操作</th>' +
|
||||
'</tr>' +
|
||||
'</thead>' +
|
||||
'<tbody>' + body + '</tbody>' +
|
||||
'</table>' +
|
||||
'</div>' +
|
||||
'<ul class="help-info-text c7 pull-left">\
|
||||
<li>请按实际需求安装扩展,不要安装不必要的PHP扩展,这会影响PHP执行效率,甚至出现异常</li>\
|
||||
<li>Redis扩展只允许在1个PHP版本中使用,安装到其它PHP版本请在[软件管理]重装Redis</li>\
|
||||
<li>opcache/xcache/apc等脚本缓存扩展,请只安装其中1个,否则可能导致您的站点程序异常</li>\
|
||||
<li>ioncube要在ZendGuardLoader/opcache前安装,否则可能导致您的站点程序异常</li>\
|
||||
</ul>';
|
||||
$('.soft-man-con').html(con);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
//安装扩展
|
||||
function installPHPLib(version, name, title, pathinfo) {
|
||||
layer.confirm('您真的要安装{1}吗?'.replace('{1}', name), { icon: 3, closeBtn: 2 }, function() {
|
||||
name = name.toLowerCase();
|
||||
var data = "name=" + name + "&version=" + version + "&type=1";
|
||||
|
||||
phpPost('install_lib', version, data, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
// layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||||
showMsg(rdata.msg, function(){
|
||||
getTaskCount();
|
||||
phpLibConfig(version);
|
||||
},{ icon: rdata.status ? 1 : 2 });
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
//卸载扩展
|
||||
function uninstallPHPLib(version, name, title, pathinfo) {
|
||||
layer.confirm('您真的要安装{1}吗?'.replace('{1}', name), { icon: 3, closeBtn: 2 }, function() {
|
||||
name = name.toLowerCase();
|
||||
var data = 'name=' + name + '&version=' + version;
|
||||
phpPost('uninstall_lib', version, data, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
// layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
|
||||
showMsg(rdata.msg, function(){
|
||||
getTaskCount();
|
||||
phpLibConfig(version);
|
||||
},{ icon: rdata.status ? 1 : 2 },5000);
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
#!/bin/bash
|
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
||||
export PATH
|
||||
|
||||
curPath=`pwd`
|
||||
rootPath=$(dirname "$curPath")
|
||||
rootPath=$(dirname "$rootPath")
|
||||
serverPath=$(dirname "$rootPath")
|
||||
sourcePath=${serverPath}/source
|
||||
sysName=`uname`
|
||||
install_tmp=${rootPath}/tmp/mw_install.pl
|
||||
|
||||
|
||||
#获取信息和版本
|
||||
# bash /www/server/mdsever-web/scripts/getos.sh
|
||||
bash ${rootPath}/scripts/getos.sh
|
||||
OSNAME=`cat ${rootPath}/data/osname.pl`
|
||||
VERSION_ID=`cat /etc/*-release | grep VERSION_ID | awk -F = '{print $2}' | awk -F "\"" '{print $2}'`
|
||||
|
||||
version=7.4.x
|
||||
PHP_VER=74
|
||||
|
||||
|
||||
Install_php()
|
||||
{
|
||||
#------------------------ install start ------------------------------------#
|
||||
|
||||
### centos start ################
|
||||
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-${VERSION_ID}.rpm
|
||||
yum install -y php74 php74-php-fpm
|
||||
### centos start ################
|
||||
|
||||
if [ "$?" == "0" ];then
|
||||
mkdir -p $serverPath/php-yum/${PHP_VER}
|
||||
fi
|
||||
|
||||
#------------------------ install end ------------------------------------#
|
||||
}
|
||||
|
||||
Uninstall_php()
|
||||
{
|
||||
# $serverPath/php-ya/init.d/php${PHP_VER} stop
|
||||
rm -rf $serverPath/php-yum/${PHP_VER}
|
||||
echo "卸载php-${version}..." > $install_tmp
|
||||
}
|
||||
|
||||
action=${1}
|
||||
if [ "${1}" == 'install' ];then
|
||||
Install_php
|
||||
else
|
||||
Uninstall_php
|
||||
fi
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
#!/bin/bash
|
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
||||
export PATH
|
||||
|
||||
curPath=`pwd`
|
||||
rootPath=$(dirname "$curPath")
|
||||
rootPath=$(dirname "$rootPath")
|
||||
serverPath=$(dirname "$rootPath")
|
||||
sourcePath=${serverPath}/source
|
||||
sysName=`uname`
|
||||
install_tmp=${rootPath}/tmp/mw_install.pl
|
||||
|
||||
|
||||
#获取信息和版本
|
||||
# bash /www/server/mdsever-web/scripts/getos.sh
|
||||
bash ${rootPath}/scripts/getos.sh
|
||||
OSNAME=`cat ${rootPath}/data/osname.pl`
|
||||
VERSION_ID=`cat /etc/*-release | grep VERSION_ID | awk -F = '{print $2}' | awk -F "\"" '{print $2}'`
|
||||
|
||||
version=8.0.x
|
||||
PHP_VER=80
|
||||
|
||||
|
||||
Install_php()
|
||||
{
|
||||
#------------------------ install start ------------------------------------#
|
||||
|
||||
### centos start ################
|
||||
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-${VERSION_ID}.rpm
|
||||
yum install -y php80 php80-php-fpm
|
||||
### centos start ################
|
||||
|
||||
if [ "$?" == "0" ];then
|
||||
mkdir -p $serverPath/php-yum/${PHP_VER}
|
||||
fi
|
||||
|
||||
#------------------------ install end ------------------------------------#
|
||||
}
|
||||
|
||||
Uninstall_php()
|
||||
{
|
||||
# $serverPath/php-ya/init.d/php${PHP_VER} stop
|
||||
rm -rf $serverPath/php-yum/${PHP_VER}
|
||||
echo "卸载php-${version}..." > $install_tmp
|
||||
}
|
||||
|
||||
action=${1}
|
||||
if [ "${1}" == 'install' ];then
|
||||
Install_php
|
||||
else
|
||||
Uninstall_php
|
||||
fi
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
#!/bin/bash
|
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
||||
export PATH
|
||||
|
||||
curPath=`pwd`
|
||||
rootPath=$(dirname "$curPath")
|
||||
rootPath=$(dirname "$rootPath")
|
||||
serverPath=$(dirname "$rootPath")
|
||||
sourcePath=${serverPath}/source
|
||||
sysName=`uname`
|
||||
install_tmp=${rootPath}/tmp/mw_install.pl
|
||||
|
||||
|
||||
#获取信息和版本
|
||||
# bash /www/server/mdsever-web/scripts/getos.sh
|
||||
bash ${rootPath}/scripts/getos.sh
|
||||
OSNAME=`cat ${rootPath}/data/osname.pl`
|
||||
VERSION_ID=`cat /etc/*-release | grep VERSION_ID | awk -F = '{print $2}' | awk -F "\"" '{print $2}'`
|
||||
|
||||
version=8.1.x
|
||||
PHP_VER=81
|
||||
|
||||
|
||||
Install_php()
|
||||
{
|
||||
#------------------------ install start ------------------------------------#
|
||||
|
||||
### centos start ################
|
||||
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-${VERSION_ID}.rpm
|
||||
yum install -y php81 php81-php-fpm
|
||||
### centos start ################
|
||||
|
||||
if [ "$?" == "0" ];then
|
||||
mkdir -p $serverPath/php-yum/${PHP_VER}
|
||||
fi
|
||||
|
||||
#------------------------ install end ------------------------------------#
|
||||
}
|
||||
|
||||
Uninstall_php()
|
||||
{
|
||||
# $serverPath/php-ya/init.d/php${PHP_VER} stop
|
||||
rm -rf $serverPath/php-yum/${PHP_VER}
|
||||
echo "卸载php-${version}..." > $install_tmp
|
||||
}
|
||||
|
||||
action=${1}
|
||||
if [ "${1}" == 'install' ];then
|
||||
Install_php
|
||||
else
|
||||
Uninstall_php
|
||||
fi
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
#!/bin/bash
|
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
||||
export PATH
|
||||
|
||||
curPath=`pwd`
|
||||
rootPath=$(dirname "$curPath")
|
||||
rootPath=$(dirname "$rootPath")
|
||||
serverPath=$(dirname "$rootPath")
|
||||
sourcePath=${serverPath}/source
|
||||
sysName=`uname`
|
||||
install_tmp=${rootPath}/tmp/mw_install.pl
|
||||
|
||||
|
||||
#获取信息和版本
|
||||
# bash /www/server/mdsever-web/scripts/getos.sh
|
||||
bash ${rootPath}/scripts/getos.sh
|
||||
OSNAME=`cat ${rootPath}/data/osname.pl`
|
||||
VERSION_ID=`cat /etc/*-release | grep VERSION_ID | awk -F = '{print $2}' | awk -F "\"" '{print $2}'`
|
||||
|
||||
version=8.2.x
|
||||
PHP_VER=82
|
||||
|
||||
|
||||
Install_php()
|
||||
{
|
||||
#------------------------ install start ------------------------------------#
|
||||
|
||||
### centos start ################
|
||||
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-${VERSION_ID}.rpm
|
||||
yum install -y php82 php82-php-fpm
|
||||
### centos start ################
|
||||
|
||||
if [ "$?" == "0" ];then
|
||||
mkdir -p $serverPath/php-apt/${PHP_VER}
|
||||
fi
|
||||
|
||||
#------------------------ install end ------------------------------------#
|
||||
}
|
||||
|
||||
Uninstall_php()
|
||||
{
|
||||
# $serverPath/php-ya/init.d/php${PHP_VER} stop
|
||||
rm -rf $serverPath/php-apt/${PHP_VER}
|
||||
echo "卸载php-${version}..." > $install_tmp
|
||||
}
|
||||
|
||||
action=${1}
|
||||
if [ "${1}" == 'install' ];then
|
||||
Install_php
|
||||
else
|
||||
Uninstall_php
|
||||
fi
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
#!/bin/bash
|
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
||||
export PATH
|
||||
|
||||
curPath=`pwd`
|
||||
rootPath=$(dirname "$curPath")
|
||||
rootPath=$(dirname "$rootPath")
|
||||
rootPath=$(dirname "$rootPath")
|
||||
serverPath=$(dirname "$rootPath")
|
||||
|
||||
version=$1
|
||||
action=$2
|
||||
extName=$3
|
||||
|
||||
# echo $1,$2,$3
|
||||
|
||||
# echo $curPath
|
||||
# echo $rootPath
|
||||
# echo $serverPath
|
||||
|
||||
FILE=${curPath}/${version}/${extName}.sh
|
||||
|
||||
# yum install -y php81-php-yar
|
||||
|
||||
|
||||
if [ "$action" == 'install' ];then
|
||||
|
||||
if [ -f $FILE ];then
|
||||
bash ${curPath}/${version}/${extName}.sh install
|
||||
else
|
||||
yum install -y php${version}-php*-${extName}
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# yum remove -y php81-php-yar
|
||||
if [ "$action" == 'uninstall' ];then
|
||||
|
||||
if [ -f $FILE ];then
|
||||
bash ${curPath}/${version}/${extName}.sh uninstall
|
||||
else
|
||||
yum remove -y php${version}-php*-${extName}
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "yum install -y php${version}-php-${extName}"
|
||||
echo "yum remove -y php${version}-php-${extName}"
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
#!/bin/bash
|
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
||||
export PATH
|
||||
|
||||
curPath=`pwd`
|
||||
rootPath=$(dirname "$curPath")
|
||||
rootPath=$(dirname "$rootPath")
|
||||
rootPath=$(dirname "$rootPath")
|
||||
serverPath=$(dirname "$rootPath")
|
||||
|
||||
version=$1
|
||||
action=$2
|
||||
|
||||
if [ -f /lib/systemd/system/php${version}.service ];then
|
||||
systemctl ${action} php${version}
|
||||
elif [[ -f /usr/lib/systemd/system/php${version}.service ]]; then
|
||||
systemctl ${action} php${version}
|
||||
else
|
||||
$serverPath/php/init.d/php${version} ${action}
|
||||
fi
|
||||
|
|
@ -0,0 +1,534 @@
|
|||
[
|
||||
{
|
||||
"name": "pdo",
|
||||
"versions": [
|
||||
"74",
|
||||
"80",
|
||||
"81",
|
||||
"82"
|
||||
],
|
||||
"type": "数据库",
|
||||
"msg": "数据库访问抽象模块!",
|
||||
"shell": "pdo.sh",
|
||||
"check": "pdo"
|
||||
},
|
||||
{
|
||||
"name": "mysqlnd",
|
||||
"versions": [
|
||||
"53",
|
||||
"54",
|
||||
"56",
|
||||
"80",
|
||||
"81",
|
||||
"82"
|
||||
],
|
||||
"type": "数据库",
|
||||
"msg": "用于使用MySQL数据库的模块!",
|
||||
"shell": "mysqlnd.sh",
|
||||
"check": "mysqlnd"
|
||||
},
|
||||
{
|
||||
"name": "oci8",
|
||||
"versions": [
|
||||
"53",
|
||||
"54",
|
||||
"56",
|
||||
"80",
|
||||
"81",
|
||||
"82"
|
||||
],
|
||||
"type": "数据库",
|
||||
"msg": "用于使用OCI8数据库的模块!",
|
||||
"shell": "oci8.sh",
|
||||
"check": "oci8"
|
||||
},
|
||||
{
|
||||
"name": "odbc",
|
||||
"versions": [
|
||||
"53",
|
||||
"54",
|
||||
"56",
|
||||
"80",
|
||||
"81",
|
||||
"82"
|
||||
],
|
||||
"type": "数据库",
|
||||
"msg": "用于使用ODBC数据库的模块!",
|
||||
"shell": "odbc.sh",
|
||||
"check": "odbc"
|
||||
},
|
||||
{
|
||||
"name": "ZendGuardLoader",
|
||||
"versions": [
|
||||
"53",
|
||||
"54",
|
||||
"56"
|
||||
],
|
||||
"type": "脚本解密",
|
||||
"msg": "用于解密ZendGuard加密脚本!",
|
||||
"shell": "zend_guard_loader.sh",
|
||||
"check": "ZendGuardLoader"
|
||||
},
|
||||
{
|
||||
"name": "ZendOptimizer",
|
||||
"versions": [
|
||||
"52"
|
||||
],
|
||||
"type": "脚本解密",
|
||||
"msg": "用于解密ZendOptimizer加密脚本!",
|
||||
"shell": "zend_optimizer.sh",
|
||||
"check": "ZendOptimizer"
|
||||
},
|
||||
{
|
||||
"name": "ionCube",
|
||||
"versions": [
|
||||
"52",
|
||||
"53",
|
||||
"54",
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74"
|
||||
],
|
||||
"type": "脚本解密",
|
||||
"msg": "用于解密ionCube Encoder加密脚本!",
|
||||
"shell": "ioncube.sh",
|
||||
"check": "ioncube"
|
||||
},
|
||||
{
|
||||
"name": "opcache",
|
||||
"versions": [
|
||||
"53",
|
||||
"54",
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81",
|
||||
"82"
|
||||
],
|
||||
"type": "缓存器",
|
||||
"msg": "用于加速PHP脚本!",
|
||||
"shell": "opcache.sh",
|
||||
"check": "opcache"
|
||||
},
|
||||
{
|
||||
"name": "mcrypt",
|
||||
"versions": [
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81"
|
||||
],
|
||||
"type": "通用扩展",
|
||||
"msg": "加密软件!",
|
||||
"shell": "mcrypt.sh",
|
||||
"check": "mcrypt"
|
||||
},
|
||||
{
|
||||
"name": "fileinfo",
|
||||
"versions": [
|
||||
"53",
|
||||
"54",
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81"
|
||||
],
|
||||
"type": "通用扩展",
|
||||
"msg": "用于FILE!",
|
||||
"shell": "fileinfo.sh",
|
||||
"check": "fileinfo"
|
||||
},
|
||||
{
|
||||
"name": "exif",
|
||||
"versions": [
|
||||
"53",
|
||||
"54",
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81"
|
||||
],
|
||||
"type": "通用扩展",
|
||||
"msg": "用于图像文件格式!",
|
||||
"shell": "exif.sh",
|
||||
"check": "exif"
|
||||
},
|
||||
{
|
||||
"name": "gd",
|
||||
"versions": [
|
||||
"74",
|
||||
"80",
|
||||
"81",
|
||||
"82"
|
||||
],
|
||||
"type": "通用扩展",
|
||||
"msg": "通用GD库!",
|
||||
"shell": "gd.sh",
|
||||
"check": "gd"
|
||||
},
|
||||
{
|
||||
"name": "intl",
|
||||
"versions": [
|
||||
"52",
|
||||
"53",
|
||||
"54",
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81",
|
||||
"82"
|
||||
],
|
||||
"type": "通用扩展",
|
||||
"msg": "提供国际化支持",
|
||||
"shell": "intl.sh",
|
||||
"check": "intl"
|
||||
},
|
||||
{
|
||||
"name": "memcache",
|
||||
"versions": [
|
||||
"74",
|
||||
"80",
|
||||
"81"
|
||||
],
|
||||
"type": "缓存器",
|
||||
"msg": "强大的内容缓存器,不支持集群",
|
||||
"shell": "memcache.sh",
|
||||
"check": "memcache"
|
||||
},
|
||||
{
|
||||
"name": "memcached",
|
||||
"versions": [
|
||||
"53",
|
||||
"54",
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81",
|
||||
"82"
|
||||
],
|
||||
"type": "缓存器",
|
||||
"msg": "强大的内容缓存器,支持集群",
|
||||
"shell": "memcached.sh",
|
||||
"check": "memcached"
|
||||
},
|
||||
{
|
||||
"name": "redis",
|
||||
"versions": [
|
||||
"52",
|
||||
"53",
|
||||
"54",
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81"
|
||||
],
|
||||
"type": "缓存器",
|
||||
"msg": "更强大的内容缓存器,支持集群",
|
||||
"shell": "redis.sh",
|
||||
"check": "redis"
|
||||
},
|
||||
{
|
||||
"name": "apc",
|
||||
"versions": [
|
||||
"53",
|
||||
"54"
|
||||
],
|
||||
"type": "缓存器",
|
||||
"msg": "脚本缓存器",
|
||||
"shell": "apc.sh",
|
||||
"check": "apc"
|
||||
},
|
||||
{
|
||||
"name": "imagick-im7",
|
||||
"versions": [
|
||||
"54",
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81",
|
||||
"82"
|
||||
],
|
||||
"type": "通用扩展",
|
||||
"msg": "比GD更强大的图形库",
|
||||
"shell": "imagick.sh",
|
||||
"check": "imagick"
|
||||
},
|
||||
{
|
||||
"name": "xdebug",
|
||||
"versions": [
|
||||
"53",
|
||||
"54",
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81"
|
||||
],
|
||||
"type": "调试器",
|
||||
"msg": "不多说,不了解的不要安装",
|
||||
"shell": "xdebug.sh",
|
||||
"check": "xdebug"
|
||||
},
|
||||
{
|
||||
"name": "xhprof",
|
||||
"versions": [
|
||||
"52",
|
||||
"53",
|
||||
"54",
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81"
|
||||
],
|
||||
"type": "性能分析",
|
||||
"msg": "不多说,不了解的不要安装!",
|
||||
"shell": "xhprof.sh",
|
||||
"check": "xhprof"
|
||||
},
|
||||
{
|
||||
"name": "Swoole",
|
||||
"versions": [
|
||||
"53",
|
||||
"54",
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81"
|
||||
],
|
||||
"type": "通用扩展",
|
||||
"msg": "异步、并行、高性能网络通信引擎",
|
||||
"shell": "swoole.sh",
|
||||
"check": "swoole"
|
||||
},
|
||||
{
|
||||
"name": "eAccelerator",
|
||||
"versions": [
|
||||
"52",
|
||||
"53"
|
||||
],
|
||||
"type": "缓存器",
|
||||
"msg": "内容缓存器",
|
||||
"shell": "eaccelerator.sh",
|
||||
"check": "eaccelerator"
|
||||
},
|
||||
{
|
||||
"name": "yaf",
|
||||
"versions": [
|
||||
"53",
|
||||
"54",
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81"
|
||||
],
|
||||
"type": "框架",
|
||||
"msg": "Yaf是一个C语言编写的PHP框架",
|
||||
"shell": "yaf.sh",
|
||||
"check": "yaf"
|
||||
},
|
||||
{
|
||||
"name": "yar",
|
||||
"versions": [
|
||||
"53",
|
||||
"54",
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81"
|
||||
],
|
||||
"type": "框架",
|
||||
"msg": "Yar是一个RPC框架",
|
||||
"shell": "yar.sh",
|
||||
"check": "yar"
|
||||
},
|
||||
{
|
||||
"name": "mongo",
|
||||
"versions": [
|
||||
"53",
|
||||
"54",
|
||||
"55",
|
||||
"56"
|
||||
],
|
||||
"type": "通用扩展",
|
||||
"msg": "Mongodb数据库连接驱动",
|
||||
"shell": "mongo.sh",
|
||||
"check": "mongo"
|
||||
},
|
||||
{
|
||||
"name": "mongodb",
|
||||
"versions": [
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81"
|
||||
],
|
||||
"type": "通用扩展",
|
||||
"msg": "Mongodb数据库连接驱动",
|
||||
"shell": "mongodb.sh",
|
||||
"check": "mongodb"
|
||||
},
|
||||
{
|
||||
"name": "yac",
|
||||
"versions": [
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81"
|
||||
],
|
||||
"type": "缓存器",
|
||||
"msg": "高性能无锁共享内存Cache",
|
||||
"shell": "yac.sh",
|
||||
"check": "yac"
|
||||
},
|
||||
{
|
||||
"name": "solr",
|
||||
"versions": [
|
||||
"53",
|
||||
"54",
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81"
|
||||
],
|
||||
"type": "大数据",
|
||||
"msg": "SOLR全文搜索服务",
|
||||
"shell": "solr.sh",
|
||||
"check": "solr"
|
||||
},
|
||||
{
|
||||
"name": "seaslog",
|
||||
"versions": [
|
||||
"53",
|
||||
"54",
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81"
|
||||
],
|
||||
"type": "日志",
|
||||
"msg": "SeasLog高性能日志记录",
|
||||
"shell": "seaslog.sh",
|
||||
"check": "seaslog"
|
||||
},
|
||||
{
|
||||
"name": "mbstring",
|
||||
"versions": [
|
||||
"53",
|
||||
"54",
|
||||
"55",
|
||||
"56",
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81",
|
||||
"82"
|
||||
],
|
||||
"type": "通用扩展",
|
||||
"msg": "用于需要多字节字符串处理的模块",
|
||||
"shell": "mbstring.sh",
|
||||
"check": "mbstring"
|
||||
},
|
||||
{
|
||||
"name": "zip",
|
||||
"versions": [
|
||||
"70",
|
||||
"71",
|
||||
"72",
|
||||
"73",
|
||||
"74",
|
||||
"80",
|
||||
"81",
|
||||
"82"
|
||||
],
|
||||
"type": "压缩",
|
||||
"msg": "压缩组件",
|
||||
"shell": "zip.sh",
|
||||
"check": "zip"
|
||||
}
|
||||
]
|
||||
Loading…
Reference in New Issue