diff --git a/lib/php-analyzer.sh b/lib/php-analyzer.sh index 0602047..321a257 100644 --- a/lib/php-analyzer.sh +++ b/lib/php-analyzer.sh @@ -465,10 +465,11 @@ detect_php_config_issues() { # ISSUE 5: Check for memory exhausted errors local memory_errors memory_errors=$(analyze_memory_exhausted_errors "$username" 7) - error_count=$(echo "$memory_errors" | grep "TOTAL" | cut -d'|' -f1) + local memory_error_count + memory_error_count=$(echo "$memory_errors" | grep "TOTAL" | cut -d'|' -f1) - if [ "$error_count" -gt 0 ]; then - issues+="MEMORY|HIGH|Memory exhausted errors occurred $error_count times in last 7 days|Increase memory_limit or optimize code"$'\n' + if [ "$memory_error_count" -gt 0 ]; then + issues+="MEMORY|HIGH|Memory exhausted errors occurred $memory_error_count times in last 7 days|Increase memory_limit or optimize code"$'\n' fi # ISSUE 6: OPcache disabled or ineffective @@ -540,7 +541,7 @@ analyze_domain_php() { # 1. PHP Version echo "PHP VERSION:" local php_version - php_version=$(detect_php_version_for_domain "$domain") + php_version=$(detect_php_version_for_domain "$username" "$domain") echo " Version: $php_version" echo "" @@ -596,7 +597,7 @@ analyze_domain_php() { local avg_kb process_count total_mb avg_kb=$(echo "$memory_stats" | cut -d'|' -f1) process_count=$(echo "$memory_stats" | cut -d'|' -f2) - total_mb=$(echo "$memory_stats" | cut -d'|' -f2) + total_mb=$(echo "$memory_stats" | cut -d'|' -f3) echo " Current Processes: $process_count" echo " Avg Memory/Process: $((avg_kb / 1024))MB" @@ -778,20 +779,16 @@ calculate_server_memory_capacity() { max_children=5 # Safe default if not set fi - # Get average memory per process from pool name - local pool_name - pool_name=$(grep "^\[" "$pool_config" | tr -d '[]' | head -1) - - # Get memory usage for this specific pool + # Get average memory per process for this username local avg_kb=0 - if [ -n "$pool_name" ]; then - avg_kb=$(get_fpm_memory_usage "$pool_name") - fi + local memory_stats + memory_stats=$(calculate_memory_per_process "$username") + avg_kb=$(echo "$memory_stats" | cut -d'|' -f1) if [ -z "$avg_kb" ] || [ "$avg_kb" -eq 0 ]; then - # No active processes, estimate 50MB per process (conservative) - avg_kb=$((50 * 1024)) - fi + # No active processes, estimate 50MB per process (conservative) + avg_kb=$((50 * 1024)) + fi local avg_mb=$((avg_kb / 1024)) @@ -821,11 +818,11 @@ calculate_server_memory_capacity() { status="HEALTHY" fi - # Return formatted result + # Return formatted result - first line is summary echo "$total_required_mb|$total_ram_mb|$percentage|$status|$pool_count pools|$total_max_children total max_children" - # Return details for further processing (to stderr so it doesn't mix with main output) - echo "$details" >&2 + # Return details as additional lines (not to stderr) + echo "$details" } # Calculate optimal memory allocation per user diff --git a/lib/php-config-manager.sh b/lib/php-config-manager.sh index f3d8dd5..25bef61 100644 --- a/lib/php-config-manager.sh +++ b/lib/php-config-manager.sh @@ -3,6 +3,10 @@ # Handles backup, restore, and modification of PHP configurations # Part of Server Toolkit - Configuration Management +# Source required dependencies +_LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "$_LIB_DIR/php-detector.sh" 2>/dev/null || { echo "ERROR: php-detector.sh not found"; return 1; } + # Backup directory BACKUP_DIR="/root/server-toolkit/backups/php" BACKUP_TIMESTAMP=$(date +%Y%m%d_%H%M%S) diff --git a/lib/php-detector.sh b/lib/php-detector.sh index d296c3b..d20f4fa 100644 --- a/lib/php-detector.sh +++ b/lib/php-detector.sh @@ -60,8 +60,8 @@ detect_installed_php_versions() { # Get PHP version for a specific domain/user detect_php_version_for_domain() { - local domain="$1" - local username="$2" + local username="$1" + local domain="$2" case "$SYS_CONTROL_PANEL" in cpanel) @@ -208,27 +208,28 @@ find_fpm_pool_config() { local pool_config="" - # cPanel EA-PHP pools - try domain first, then username + # cPanel EA-PHP pools - search username FIRST (this is how cPanel works!) if [ -n "$php_version" ]; then - # Try domain-based config first + # Try username-based config (most common) + pool_config="/opt/cpanel/$php_version/root/etc/php-fpm.d/$username.conf" + [ -f "$pool_config" ] && echo "$pool_config" && return 0 + + # Try domain-based config (rare, but possible) if [ -n "$domain" ]; then pool_config="/opt/cpanel/$php_version/root/etc/php-fpm.d/$domain.conf" [ -f "$pool_config" ] && echo "$pool_config" && return 0 fi - # Try username-based config - pool_config="/opt/cpanel/$php_version/root/etc/php-fpm.d/$username.conf" - [ -f "$pool_config" ] && echo "$pool_config" && return 0 fi - # Search all EA-PHP versions - try domain first, then username + # Search all EA-PHP versions - try username FIRST, then domain + pool_config=$(find /opt/cpanel/ea-php*/root/etc/php-fpm.d/ -name "$username.conf" 2>/dev/null | head -1) + [ -n "$pool_config" ] && echo "$pool_config" && return 0 + if [ -n "$domain" ]; then pool_config=$(find /opt/cpanel/ea-php*/root/etc/php-fpm.d/ -name "$domain.conf" 2>/dev/null | head -1) [ -n "$pool_config" ] && echo "$pool_config" && return 0 fi - pool_config=$(find /opt/cpanel/ea-php*/root/etc/php-fpm.d/ -name "$username.conf" 2>/dev/null | head -1) - [ -n "$pool_config" ] && echo "$pool_config" && return 0 - # Plesk pools if [ -n "$domain" ]; then pool_config="/etc/php-fpm.d/plesk-php*-fpm/$domain.conf" diff --git a/modules/performance/php-optimizer.sh b/modules/performance/php-optimizer.sh index d870a02..a79f28b 100755 --- a/modules/performance/php-optimizer.sh +++ b/modules/performance/php-optimizer.sh @@ -111,7 +111,7 @@ select_domain() { for domain in "${domains[@]}"; do local username="${domain_to_user[$domain]}" local php_version - php_version=$(detect_php_version_for_domain "$domain" 2>/dev/null || echo "unknown") + php_version=$(detect_php_version_for_domain "$username" "$domain" 2>/dev/null || echo "unknown") printf " ${GREEN}%-3d${NC}) %-40s ${CYAN}[${username}]${NC} ${YELLOW}(${php_version})${NC}\n" "$index" "$domain" index=$((index + 1)) @@ -533,7 +533,7 @@ optimize_domain() { if [[ "$restart_choice" =~ ^[Yy]$ ]]; then # Detect PHP version local php_version - php_version=$(detect_php_version_for_domain "$domain") + php_version=$(detect_php_version_for_domain "$username" "$domain") cecho "${CYAN}Restarting PHP-FPM ($php_version)...${NC}"