Sindbad~EG File Manager
| Current Path : /opt/dedrads/ |
|
|
| Current File : //opt/dedrads/check_php |
#!/usr/bin/imh-python3
"""Written by MuhammadK"""
import argparse
import json
import subprocess
import re
from prettytable import PrettyTable
# Using IMH's in-house color library
from rads.color import red, green, blue, yellow
def color_php_version(phpver):
"""Color PHP version red if < 7.2, green otherwise."""
m = re.search(r'php(\d)(\d)', phpver)
if m:
version = float(f"{m.group(1)}.{m.group(2)}")
if version < 7.2:
return red(phpver)
return green(phpver)
def color_domain(domain):
return blue(domain)
def color_username(user):
return yellow(user)
def visible_len(s):
"""Length without ANSI color codes."""
return len(re.sub(r'\x1B[@-_][0-?]*[ -/]*[@-~]', '', s))
def get_php_fpm_info():
try:
output = subprocess.check_output(
['whmapi1', 'php_get_vhost_versions', '--output=json'], text=True
)
data = json.loads(output)
return data.get('data', {}).get('versions', [])
except Exception as e:
print(f"Error getting PHP-FPM info: {e}")
return []
def print_installed_php_versions():
"""Use WHM API to get installed PHP versions."""
try:
output = subprocess.check_output(
['whmapi1', 'php_get_installed_versions', '--output=json'],
text=True,
)
data = json.loads(output)
versions = data.get('data', {}).get('versions', [])
print(green("Installed PHP Versions:"))
print("\n".join(versions))
print()
except Exception as e:
print(f"Error getting installed PHP versions: {e}")
def print_php_sorted_table(pairs):
if not pairs:
print("No PHP-FPM pool data found.")
return
headers = [
"PHP Version",
"Domain",
"User",
"Docroot",
"MaxChildren",
"MaxRequests",
"IdleTimeout",
]
table = PrettyTable()
# table.set_style(TableStyle.DOUBLE_BORDER)
table.horizontal_char = "═"
table.vertical_char = "║"
table.junction_char = "╬"
table.field_names = headers
table.align = "l"
for item in pairs:
phpver = item.get('version', 'unknown')
domain = item.get('vhost', 'unknown')
user = item.get('user', 'unknown')
docroot = item.get('docroot', 'unknown')
pool = item.get('php_fpm_pool_parms', {})
mc = str(pool.get('pm_max_children', ''))
mr = str(pool.get('pm_max_requests', ''))
pit = str(pool.get('pm_process_idle_timeout', ''))
row = [
color_php_version(phpver),
color_domain(domain),
color_username(user),
docroot,
mc,
mr,
pit,
]
table.add_row(row)
print(table)
def main():
parser = argparse.ArgumentParser(
description="List domains with PHP version and PHP-FPM info"
)
parser.add_argument(
"-v", "--phpver", help="Filter by PHP version (e.g. php7.4, php8.1)"
)
parser.add_argument(
"-d", "--domain", nargs="+", help="Filter by specific domain(s)"
)
parser.add_argument("-u", "--user", help="Filter by cPanel username")
args = parser.parse_args()
if not args.phpver and not args.domain and not args.user:
print_installed_php_versions()
versions = get_php_fpm_info()
filtered = []
for item in versions:
phpver = item.get('version', '')
domain = item.get('vhost', '')
user = item.get('account', 'unknown')
docroot = item.get('documentroot', 'unknown')
if args.phpver:
filt = args.phpver.lower().replace('.', '').replace('php', '')
curr = phpver.lower().replace('ea-php', '')
if filt != curr:
continue
if args.domain and domain not in args.domain:
continue
if args.user and user != args.user:
continue
item['user'] = user
item['docroot'] = docroot
filtered.append(item)
def php_sort_key(item):
match = re.search(r'php(\d)(\d)', item.get('version', ''))
return float(f"{match.group(1)}.{match.group(2)}") if match else 0.0
filtered.sort(key=php_sort_key)
print_php_sorted_table(filtered)
if __name__ == "__main__":
main()
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists