2019-12-10 23:04:24 +05:00
|
|
|
#!/usr/local/CyberCP/bin/python
|
2019-11-07 15:06:34 +05:00
|
|
|
import os
|
|
|
|
|
import subprocess
|
|
|
|
|
import shlex
|
|
|
|
|
import plogical.CyberCPLogFileWriter as logging
|
2019-12-15 13:30:40 +05:00
|
|
|
from ApachController.ApacheVhosts import ApacheVhost
|
2023-05-15 12:19:42 +05:00
|
|
|
from plogical.processUtilities import ProcessUtilities
|
2019-11-07 15:06:34 +05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class ApacheController:
|
|
|
|
|
apacheInstallStatusPath = '/home/cyberpanel/apacheInstallStatus'
|
|
|
|
|
serverRootPath = '/etc/httpd'
|
|
|
|
|
mpmConfigs = """# Select the MPM module which should be used by uncommenting exactly
|
|
|
|
|
# one of the following LoadModule lines:
|
|
|
|
|
|
|
|
|
|
# prefork MPM: Implements a non-threaded, pre-forking web server
|
|
|
|
|
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
|
|
|
|
|
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
|
|
|
|
|
|
|
|
|
|
# worker MPM: Multi-Processing Module implementing a hybrid
|
|
|
|
|
# multi-threaded multi-process web server
|
|
|
|
|
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
|
|
|
|
|
#
|
|
|
|
|
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
|
|
|
|
|
|
|
|
|
|
# event MPM: A variant of the worker MPM with the goal of consuming
|
|
|
|
|
# threads only for connections with active processing
|
|
|
|
|
# See: http://httpd.apache.org/docs/2.4/mod/event.html
|
|
|
|
|
#
|
|
|
|
|
LoadModule mpm_event_module modules/mod_mpm_event.so
|
|
|
|
|
|
|
|
|
|
<IfModule mpm_event_module>
|
|
|
|
|
StartServers 2
|
|
|
|
|
MinSpareThreads 25
|
|
|
|
|
MaxSpareThreads 75
|
|
|
|
|
ThreadLimit 64
|
|
|
|
|
ThreadsPerChild 25
|
|
|
|
|
MaxRequestWorkers 30
|
|
|
|
|
MaxConnectionsPerChild 1000
|
|
|
|
|
</IfModule>"""
|
|
|
|
|
mpmConfigsPath = "/etc/httpd/conf.modules.d/00-mpm.conf"
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def checkIfApacheInstalled():
|
|
|
|
|
try:
|
|
|
|
|
if os.path.exists(ApacheController.serverRootPath):
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
if os.path.exists(ApacheVhost.php54Path):
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
if os.path.exists(ApacheVhost.php55Path):
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
if os.path.exists(ApacheVhost.php56Path):
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
if os.path.exists(ApacheVhost.php70Path):
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
if os.path.exists(ApacheVhost.php71Path):
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
if os.path.exists(ApacheVhost.php72Path):
|
|
|
|
|
pass
|
|
|
|
|
else:
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
if os.path.exists(ApacheVhost.php73Path):
|
|
|
|
|
return 1
|
|
|
|
|
else:
|
|
|
|
|
return 0
|
2019-12-10 15:09:10 +05:00
|
|
|
except BaseException as msg:
|
2019-11-07 15:06:34 +05:00
|
|
|
message = "%s. [%s]" % (str(msg), '[ApacheController.checkIfApacheInstalled]')
|
|
|
|
|
logging.CyberCPLogFileWriter.writeToFile(message)
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def executioner(command):
|
|
|
|
|
try:
|
|
|
|
|
# subprocess.call(shlex.split(command))
|
|
|
|
|
res = subprocess.call(shlex.split(command))
|
|
|
|
|
if res == 1:
|
|
|
|
|
return 0
|
|
|
|
|
else:
|
|
|
|
|
return 1
|
2019-12-10 15:09:10 +05:00
|
|
|
except BaseException as msg:
|
2019-11-07 15:06:34 +05:00
|
|
|
logging.CyberCPLogFileWriter.writeToFile(str(msg))
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def InstallApache():
|
|
|
|
|
try:
|
|
|
|
|
|
2023-05-15 12:19:42 +05:00
|
|
|
if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
|
|
|
|
|
command = "yum install -y httpd httpd-tools mod_ssl php-fpm"
|
|
|
|
|
else:
|
|
|
|
|
command = "apt update -y && sudo apt upgrade -y && apt install apache2 -y"
|
|
|
|
|
|
|
|
|
|
if ProcessUtilities.executioner(command, None, True) == 0:
|
2019-11-07 15:06:34 +05:00
|
|
|
return "Failed to install Apache and PHP-FPM."
|
|
|
|
|
|
2023-05-15 12:19:42 +05:00
|
|
|
if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
|
2019-11-07 15:06:34 +05:00
|
|
|
|
2023-05-15 12:19:42 +05:00
|
|
|
command = "yum -y install centos-release-scl yum-utils"
|
|
|
|
|
if ProcessUtilities.executioner(command) == 0:
|
|
|
|
|
return "Failed to centos-release-scl and yum-utils"
|
|
|
|
|
|
|
|
|
|
command = "yum-config-manager --enable rhel-server-rhscl-7-rpms"
|
|
|
|
|
if ProcessUtilities.executioner(command) == 0:
|
|
|
|
|
return "Failed to --enable rhel-server-rhscl-7-rpms"
|
2019-11-07 15:06:34 +05:00
|
|
|
|
2023-05-15 12:19:42 +05:00
|
|
|
sslPath = "/etc/apache2/conf.d/ssl.conf"
|
2019-11-07 15:06:34 +05:00
|
|
|
|
2023-05-15 12:19:42 +05:00
|
|
|
if os.path.exists(sslPath):
|
|
|
|
|
os.remove(sslPath)
|
2019-11-07 15:06:34 +05:00
|
|
|
|
2023-05-15 12:19:42 +05:00
|
|
|
confPath = ApacheVhost.serverRootPath + "/conf/httpd.conf"
|
2019-11-07 15:06:34 +05:00
|
|
|
|
2023-05-15 12:19:42 +05:00
|
|
|
data = open(confPath, 'r').readlines()
|
|
|
|
|
writeToFile = open(confPath, 'w')
|
2019-11-07 15:06:34 +05:00
|
|
|
|
2023-05-15 12:19:42 +05:00
|
|
|
for items in data:
|
|
|
|
|
if items.find("Listen") > -1 and items.find("80") > -1 and items.find('#') == -1:
|
|
|
|
|
writeToFile.writelines("Listen 8081\nListen 8082\n")
|
|
|
|
|
elif items.find("User") > -1 and items.find('#') == -1:
|
|
|
|
|
writeToFile.writelines("User nobody\n")
|
|
|
|
|
elif items.find("Group") > -1 and items.find('#') == -1:
|
|
|
|
|
writeToFile.writelines("Group nobody\n")
|
|
|
|
|
writeToFile.writelines('SetEnv LSWS_EDITION Openlitespeed\nSetEnv X-LSCACHE on\n')
|
|
|
|
|
elif items[0] == "#":
|
|
|
|
|
continue
|
|
|
|
|
else:
|
|
|
|
|
writeToFile.writelines(items)
|
2019-11-07 15:06:34 +05:00
|
|
|
|
2023-05-15 12:19:42 +05:00
|
|
|
writeToFile.close()
|
|
|
|
|
|
|
|
|
|
# MPM Module Configurations
|
|
|
|
|
|
|
|
|
|
writeToFile = open(ApacheController.mpmConfigsPath, 'w')
|
|
|
|
|
writeToFile.write(ApacheController.mpmConfigs)
|
|
|
|
|
writeToFile.close()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
else:
|
2019-11-07 15:06:34 +05:00
|
|
|
|
|
|
|
|
|
2023-05-15 12:19:42 +05:00
|
|
|
sslPath = "/etc/httpd/conf.d/ssl.conf"
|
|
|
|
|
confPath = ApacheVhost.serverRootPath + "/apache2.conf"
|
2019-11-07 15:06:34 +05:00
|
|
|
|
2023-05-15 12:19:42 +05:00
|
|
|
portsPath = '/etc/apache2/ports.conf'
|
2019-11-07 15:06:34 +05:00
|
|
|
|
2023-05-15 12:19:42 +05:00
|
|
|
WriteToFile = open(portsPath, 'w')
|
|
|
|
|
WriteToFile.write('Listen 8081\nListen 8082\n')
|
|
|
|
|
WriteToFile.close()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
command = f"sed -i 's/User ${{APACHE_RUN_USER}}/User nobody/g' {confPath}"
|
|
|
|
|
if ProcessUtilities.executioner(command, None, True) == 0:
|
|
|
|
|
return "Apache run user change failed"
|
|
|
|
|
|
|
|
|
|
command = f"sed -i 's/Group ${{APACHE_RUN_GROUP}}/Group nogroup/g' {confPath}"
|
|
|
|
|
if ProcessUtilities.executioner(command, None, True) == 0:
|
|
|
|
|
return "Apache run group change failed"
|
|
|
|
|
|
|
|
|
|
command = 'apt-get install apache2-suexec-pristine -y'
|
|
|
|
|
if ProcessUtilities.executioner(command, None, True) == 0:
|
|
|
|
|
return "Apache run apache2-suexec-pristine"
|
|
|
|
|
|
2023-05-16 16:20:20 +05:00
|
|
|
command = 'a2enmod suexec proxy ssl proxy_fcgi proxy rewrite'
|
2023-05-15 12:19:42 +05:00
|
|
|
if ProcessUtilities.executioner(command, None, True) == 0:
|
|
|
|
|
return "Apache run suexec proxy ssl"
|
2019-11-07 15:06:34 +05:00
|
|
|
|
2023-05-16 15:24:26 +05:00
|
|
|
|
|
|
|
|
WriteToFile = open(confPath, 'a')
|
|
|
|
|
WriteToFile.writelines('\nSetEnv LSWS_EDITION Openlitespeed\nSetEnv X-LSCACHE on\n')
|
|
|
|
|
WriteToFile.close()
|
|
|
|
|
|
2019-11-07 15:06:34 +05:00
|
|
|
###
|
|
|
|
|
|
2023-05-15 12:19:42 +05:00
|
|
|
if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
|
|
|
|
|
serviceName = 'httpd'
|
|
|
|
|
else:
|
|
|
|
|
serviceName = 'apache2'
|
|
|
|
|
|
|
|
|
|
command = f"systemctl start {serviceName}.service"
|
2019-11-07 15:06:34 +05:00
|
|
|
ApacheController.executioner(command)
|
2023-05-15 12:19:42 +05:00
|
|
|
command = f"systemctl enable {serviceName}.service"
|
2019-11-07 15:06:34 +05:00
|
|
|
ApacheController.executioner(command)
|
|
|
|
|
|
|
|
|
|
return 1
|
|
|
|
|
|
2019-12-10 15:09:10 +05:00
|
|
|
except BaseException as msg:
|
2019-11-07 15:06:34 +05:00
|
|
|
return str(msg)
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def phpVersions():
|
|
|
|
|
# Version 5.4
|
|
|
|
|
|
2023-05-15 12:19:42 +05:00
|
|
|
if ProcessUtilities.decideDistro() == ProcessUtilities.centos or ProcessUtilities.decideDistro() == ProcessUtilities.cent8:
|
|
|
|
|
|
|
|
|
|
command = 'yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm'
|
|
|
|
|
ApacheController.executioner(command)
|
|
|
|
|
|
|
|
|
|
command = 'yum-config-manager --enable remi-php'
|
|
|
|
|
ApacheController.executioner(command)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
command = 'yum install -y php54-php-fpm php54-php-gd php54-php-xml php54-php-twig php54-php-zstd php54-php-tidy' \
|
|
|
|
|
'php54-php-suhosin php54-php-soap php54-php-snmp php54-php-snappy php54-php-smbclient' \
|
|
|
|
|
'php54-php-process php54-php-pimple php54-php-pgsql php54-php-pear.noarch php54-php-pdo' \
|
|
|
|
|
'php54-php-mysqlnd php54-php-mssql php54-php-mcrypt php54-php-mbstring php54-php-maxminddb' \
|
|
|
|
|
'php54-php-common php54-php-imap php54-php-intl php54-php-tarantool php54-php-pspell php54-php-oci8' \
|
|
|
|
|
'php54-php-bcmath php54-php-litespeed php54-php-recode php54-php-odbc'
|
|
|
|
|
if ApacheController.executioner(command) == 0:
|
|
|
|
|
return "Failed to install php54-fpm"
|
|
|
|
|
|
|
|
|
|
# Version 5.5
|
|
|
|
|
command = 'yum install -y php55-php-fpm php55-php-gd php55-php-xml php55-php-twig php55-php-zstd php55-php-tidy' \
|
|
|
|
|
'php55-php-suhosin php55-php-soap php55-php-snmp php55-php-snappy php55-php-smbclient ' \
|
|
|
|
|
'php55-php-process php55-php-pimple php55-php-pgsql php55-php-pear.noarch php55-php-pdo' \
|
|
|
|
|
'php55-php-mysqlnd php55-php-mssql php55-php-mcrypt php55-php-mbstring php55-php-maxminddb' \
|
|
|
|
|
'php55-php-common php55-php-imap php55-php-intl php55-php-tarantool php55-php-pspell php55-php-oci8' \
|
|
|
|
|
'php55-php-litespeed php55-php-bcmath php55-php-odbc php55-php-recode'
|
|
|
|
|
if ApacheController.executioner(command) == 0:
|
|
|
|
|
return "Failed to install php55-fpm"
|
|
|
|
|
|
|
|
|
|
# Version 5.6
|
|
|
|
|
command = 'yum install -y php56-php-fpm php56-php-gd php56-php-xml php56-php-twig php56-php-zstd php56-php-tidy' \
|
|
|
|
|
'php56-php-suhosin php56-php-soap php56-php-snmp php56-php-snappy php56-php-smbclient' \
|
|
|
|
|
'php56-php-process php56-php-pimple php56-php-pgsql php56-php-pear.noarch php56-php-pdo ' \
|
|
|
|
|
'php56-php-mysqlnd php56-php-mssql php56-php-mcrypt php56-php-mbstring php56-php-maxminddb' \
|
|
|
|
|
'php56-php-common php56-php-imap php56-php-intl php56-php-tarantool php56-php-recode' \
|
|
|
|
|
'php56-php-odbc php56-php-oci8 php56-php-litespeed php56-php-bcmath php56-php-pspell'
|
|
|
|
|
if ApacheController.executioner(command) == 0:
|
|
|
|
|
return "Failed to install php56-fpm"
|
|
|
|
|
|
|
|
|
|
# Version 7.0
|
|
|
|
|
command = 'yum install -y php70-php-fpm php70-php-gd php70-php-xml php70-php-twig php70-php-zstd php70-php-tidy' \
|
|
|
|
|
'php70-php-suhosin php70-php-soap php70-php-snmp php70-php-snappy php70-php-smbclient' \
|
|
|
|
|
'php70-php-process php70-php-pimple php70-php-pgsql php70-php-pear.noarch php70-php-pdo ' \
|
|
|
|
|
'php70-php-mysqlnd php70-php-mssql php70-php-mcrypt php70-php-mbstring php70-php-maxminddb' \
|
|
|
|
|
'php70-php-common php70-php-imap php70-php-intl php70-php-tarantool php70-php-recode' \
|
|
|
|
|
'php70-php-odbc php70-php-oci8 php70-php-litespeed php70-php-bcmath php70-php-pspell'
|
|
|
|
|
if ApacheController.executioner(command) == 0:
|
|
|
|
|
return "Failed to install php70-fpm"
|
|
|
|
|
|
|
|
|
|
# Version 7.1
|
|
|
|
|
command = 'yum install -y php71-php-fpm php71-php-gd php71-php-xml php71-php-twig php71-php-zstd php71-php-tidy' \
|
|
|
|
|
'php71-php-suhosin php71-php-soap php71-php-snmp php71-php-snappy php71-php-smbclient' \
|
|
|
|
|
'php71-php-process php71-php-pimple php71-php-pgsql php71-php-pear.noarch php71-php-pdo ' \
|
|
|
|
|
'php71-php-mysqlnd php71-php-mssql php71-php-mcrypt php71-php-mbstring php71-php-maxminddb' \
|
|
|
|
|
'php71-php-common php71-php-imap php71-php-intl php71-php-tarantool php71-php-recode' \
|
|
|
|
|
'php71-php-odbc php71-php-oci8 php71-php-litespeed php71-php-bcmath php71-php-pspell'
|
|
|
|
|
if ApacheController.executioner(command) == 0:
|
|
|
|
|
return "Failed to install php71-fpm"
|
|
|
|
|
|
|
|
|
|
# Version 7.2
|
|
|
|
|
command = 'yum install -y php72-php-fpm php72-php-gd php72-php-xml php72-php-twig php72-php-zstd php72-php-tidy' \
|
|
|
|
|
'php72-php-suhosin php72-php-soap php72-php-snmp php72-php-snappy php72-php-smbclient' \
|
|
|
|
|
'php72-php-process php72-php-pimple php72-php-pgsql php72-php-pear.noarch php72-php-pdo ' \
|
|
|
|
|
'php72-php-mysqlnd php72-php-mssql php72-php-mcrypt php72-php-mbstring php72-php-maxminddb' \
|
|
|
|
|
'php72-php-common php72-php-imap php72-php-intl php72-php-tarantool php72-php-recode' \
|
|
|
|
|
'php72-php-odbc php72-php-oci8 php72-php-litespeed php72-php-bcmath php72-php-pspell'
|
|
|
|
|
if ApacheController.executioner(command) == 0:
|
|
|
|
|
return "Failed to install php72-fpm"
|
|
|
|
|
|
|
|
|
|
# Version 7.3
|
|
|
|
|
command = 'yum install -y php73-php-fpm php73-php-gd php73-php-xml php73-php-twig php73-php-zstd php73-php-tidy' \
|
|
|
|
|
'php73-php-suhosin php73-php-soap php73-php-snmp php73-php-snappy php73-php-smbclient' \
|
|
|
|
|
'php73-php-process php73-php-pimple php73-php-pgsql php73-php-pear.noarch php73-php-pdo ' \
|
|
|
|
|
'php73-php-mysqlnd php73-php-mssql php73-php-mcrypt php73-php-mbstring php73-php-maxminddb' \
|
|
|
|
|
'php73-php-common php73-php-imap php73-php-intl php73-php-tarantool php73-php-recode' \
|
|
|
|
|
'php73-php-odbc php73-php-oci8 php73-php-litespeed php73-php-bcmath php73-php-pspell'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ApacheController.executioner(command) == 0:
|
|
|
|
|
return "Failed to install php73-fpm"
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
|
|
command = 'apt install python-software-properties -y'
|
|
|
|
|
if ProcessUtilities.executioner(command, None, True) == 0:
|
|
|
|
|
return "Failed to install python-software-properties"
|
|
|
|
|
|
|
|
|
|
command = 'add-apt-repository ppa:ondrej/php -y'
|
|
|
|
|
if ProcessUtilities.executioner(command, None, True) == 0:
|
|
|
|
|
return "Failed to ppa:ondrej/php"
|
|
|
|
|
|
2023-05-15 21:16:10 +05:00
|
|
|
command = "DEBIAN_FRONTEND=noninteractive apt-get install -y php-fpm php?.?-fpm php?.?-fpm php?.?-mysql php?.?-curl php?.?-gd php?.?-mbstring php?.?-xml php?.?-zip"
|
2023-05-15 12:19:42 +05:00
|
|
|
|
|
|
|
|
if ProcessUtilities.executioner(command, None, True) == 0:
|
|
|
|
|
return "Failed to install Apache and PHP-FPM."
|
|
|
|
|
|
2019-11-07 15:06:34 +05:00
|
|
|
try:
|
|
|
|
|
wwwConfPath = ApacheVhost.php54Path + "/www.conf"
|
|
|
|
|
|
|
|
|
|
if os.path.exists(wwwConfPath):
|
|
|
|
|
os.remove(wwwConfPath)
|
|
|
|
|
|
|
|
|
|
wwwConfPath = ApacheVhost.php55Path + "/www.conf"
|
|
|
|
|
|
|
|
|
|
if os.path.exists(wwwConfPath):
|
|
|
|
|
os.remove(wwwConfPath)
|
|
|
|
|
|
|
|
|
|
wwwConfPath = ApacheVhost.php56Path + "/www.conf"
|
|
|
|
|
|
|
|
|
|
if os.path.exists(wwwConfPath):
|
|
|
|
|
os.remove(wwwConfPath)
|
|
|
|
|
|
|
|
|
|
wwwConfPath = ApacheVhost.php70Path + "/www.conf"
|
|
|
|
|
|
|
|
|
|
if os.path.exists(wwwConfPath):
|
|
|
|
|
os.remove(wwwConfPath)
|
|
|
|
|
|
|
|
|
|
wwwConfPath = ApacheVhost.php71Path + "/www.conf"
|
|
|
|
|
|
|
|
|
|
if os.path.exists(wwwConfPath):
|
|
|
|
|
os.remove(wwwConfPath)
|
|
|
|
|
|
|
|
|
|
wwwConfPath = ApacheVhost.php72Path + "/www.conf"
|
|
|
|
|
|
|
|
|
|
if os.path.exists(wwwConfPath):
|
|
|
|
|
os.remove(wwwConfPath)
|
|
|
|
|
|
|
|
|
|
wwwConfPath = ApacheVhost.php73Path + "/www.conf"
|
|
|
|
|
|
|
|
|
|
if os.path.exists(wwwConfPath):
|
|
|
|
|
os.remove(wwwConfPath)
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
|
def setupApache(statusFile):
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
|
|
logging.CyberCPLogFileWriter.statusWriter(statusFile, 'Starting Apache installation. It may take some time..,70')
|
|
|
|
|
|
|
|
|
|
result = ApacheController.InstallApache()
|
|
|
|
|
|
|
|
|
|
if result != 1:
|
|
|
|
|
return [0,result]
|
|
|
|
|
|
|
|
|
|
logging.CyberCPLogFileWriter.statusWriter(statusFile,
|
|
|
|
|
'Installing PHP-FPM Versions. It may take some time..,80')
|
|
|
|
|
|
|
|
|
|
result = ApacheController.phpVersions()
|
|
|
|
|
|
|
|
|
|
if result != 1:
|
|
|
|
|
return [0,result]
|
|
|
|
|
|
|
|
|
|
return [1, 'None']
|
2019-12-10 15:09:10 +05:00
|
|
|
except BaseException as msg:
|
2019-11-07 15:06:34 +05:00
|
|
|
return [0, str(msg)]
|