/opt/dedrads
NameSizeModeActions
account_review/-0555rm
check_software_mods/-0555rm
cms_tools/-0555rm
etc/-0555rm
extras/-0555rm
mailparse/-0555rm
mysql/-0555rm
nlp_scripts/-0555rm
oldrads/-0555rm
perl/-0555rm
provision/-0555rm
python/-0555rm
suspended/-0555rm
__pycache__/-0555rm
account-review7990555editdlrm
allfw62590555editdlrm
alp.py165530555editdlrm
autossl_sync62670555editdlrm
check_apache92050555editdlrm
check_bandwidth45460555editdlrm
check_boxtrapper16840555editdlrm
check_cpu122120555editdlrm
check_crons18270555editdlrm
check_dcpumon19730555editdlrm
check_dns18270555editdlrm
check_domlogs610555editdlrm
check_exim37310555editdlrm
check_hacks226040555editdlrm
check_imap52490555editdlrm
check_io66350555editdlrm
check_max_children163410555editdlrm
check_mem16600555editdlrm
check_misc15100555editdlrm
check_pacct52010555editdlrm
check_php43440555editdlrm
check_pop322950555editdlrm
check_prov.py47140555editdlrm
check_server6960555editdlrm
check_size4900555editdlrm
check_software98490555editdlrm
check_spamd24260555editdlrm
check_traffic19330555editdlrm
check_user18870555editdlrm
clean_exim.py63900555editdlrm
clusterfix53430555editdlrm
cmspass.py39700555editdlrm
cms_check.py98250555editdlrm
cms_counter.py367340555editdlrm
cms_creds7130555editdlrm
cms_dumpdb44850555editdlrm
cms_pw14160555editdlrm
cpanel-api70400555editdlrm
cpanel_postgres_manager.py290040555editdlrm
cpmerge46310555editdlrm
cpumon21950555editdlrm
dcpumon.pl12390555editdlrm
dedcheck181270555editdlrm
dns-sync143860555editdlrm
docroot.py44250555editdlrm
du-tree74500555editdlrm
envinfo.py66330555editdlrm
exclude_rbl.py52490555editdlrm
extract-vhost26910555editdlrm
filescan35660555editdlrm
find_warez14600555editdlrm
first_setup.py191200555editdlrm
fixwpcron.py48220555editdlrm
fix_dns_cluster3530555editdlrm
goaccess12177200555editdlrm
hostsfilemods44670555editdlrm
imap_io23230555editdlrm
innodb_converter.py93430555editdlrm
killall9115300555editdlrm
killdns9410555editdlrm
lastcommcache.sh13740555editdlrm
legal_lock_down.sh74500555editdlrm
lil-cpanel520020555editdlrm
listacct45750555editdlrm
mailscan45440555editdlrm
mail_sources.py74070555editdlrm
megaclisas-status386640555editdlrm
migrate2central.sh144180555editdlrm
modify-account406310555editdlrm
modsec_disable.py114610555editdlrm
monarxctl89120555editdlrm
msp.pl277140555editdlrm
mysql_dstat4740555editdlrm
mysql_selector.py731020555editdlrm
nlp45820555editdlrm
procscrape18630555editdlrm
quarantine110830555editdlrm
radsfunctions.sh8630555editdlrm
recent-cp161480555editdlrm
remote_dump183470555editdlrm
reset_cpanel32050555editdlrm
server-load21920555editdlrm
show-conns201050555editdlrm
show-conns-adv.py546670555editdlrm
sparta.py3824980555editdlrm
sqltop271290555editdlrm
telcheck24110555editdlrm
temprootreset1860555editdlrm
unsuspend_user13070555editdlrm
unsusprunner.sh18400555editdlrm
updatednsadmin5260555editdlrm
update_spf149720555editdlrm
upgrade-check92160555editdlrm
vhost_data.py62210555editdlrm
wp-xray.sh858160555editdlrm
Edit: /opt/dedrads/check_php (4344B)
#!/usr/lib/rads/venv/bin/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()