Test Fix OPCache Litespeed

main
Anthony 2025-06-14 01:17:12 +08:00
parent a6bb2a7e89
commit 83861a3b06
9 changed files with 367 additions and 190 deletions

View File

@ -15,6 +15,18 @@ onInstall:
- mkdir -p /home/litespeed/mbmanager - mkdir -p /home/litespeed/mbmanager
- mkdir -p /home/litespeed/mbmanager/relay - mkdir -p /home/litespeed/mbmanager/relay
- mkdir -p /home/litespeed/mbmanager/ssl-manager - mkdir -p /home/litespeed/mbmanager/ssl-manager
- mkdir -p /home/litespeed/mbmanager/scripts
# Download OPCache scripts with verification
- cd /home/litespeed/mbmanager/scripts
- curl -OL https://deploy-proxy.mightybox.io/tony/mb-admin/raw/branch/main/scripts/check_opcache.php
- if [ ! -f check_opcache.php ]; then echo "Failed to download check_opcache.php"; exit 1; fi
- curl -OL https://deploy-proxy.mightybox.io/tony/mb-admin/raw/branch/main/scripts/toggle_opcache.php
- if [ ! -f toggle_opcache.php ]; then echo "Failed to download toggle_opcache.php"; exit 1; fi
- curl -OL https://deploy-proxy.mightybox.io/tony/mb-admin/raw/branch/main/scripts/clear_opcache.php
- if [ ! -f clear_opcache.php ]; then echo "Failed to download clear_opcache.php"; exit 1; fi
- curl -OL https://deploy-proxy.mightybox.io/tony/mb-admin/raw/branch/main/scripts/update_opcache_settings.sh
- if [ ! -f update_opcache_settings.sh ]; then echo "Failed to download update_opcache_settings.sh"; exit 1; fi
- chmod +x *.php *.sh
# Download WordPress Installer with path verification # Download WordPress Installer with path verification
- cd /home/litespeed/mbmanager - cd /home/litespeed/mbmanager
- curl -OL https://deploy-proxy.mightybox.io/tony/mb-admin/raw/branch/main/scripts/install-wordpress.sh - curl -OL https://deploy-proxy.mightybox.io/tony/mb-admin/raw/branch/main/scripts/install-wordpress.sh
@ -24,8 +36,6 @@ onInstall:
- if [ ! -f litespeed_fetch_settings.sh ]; then echo "Failed to download litespeed_fetch_settings.sh"; exit 1; fi - if [ ! -f litespeed_fetch_settings.sh ]; then echo "Failed to download litespeed_fetch_settings.sh"; exit 1; fi
- curl -OL https://deploy-proxy.mightybox.io/tony/mb-admin/raw/branch/main/scripts/litespeed_update_settings.sh - curl -OL https://deploy-proxy.mightybox.io/tony/mb-admin/raw/branch/main/scripts/litespeed_update_settings.sh
- if [ ! -f litespeed_update_settings.sh ]; then echo "Failed to download litespeed_update_settings.sh"; exit 1; fi - if [ ! -f litespeed_update_settings.sh ]; then echo "Failed to download litespeed_update_settings.sh"; exit 1; fi
- curl -OL https://deploy-proxy.mightybox.io/tony/mb-admin/raw/branch/main/scripts/update_opcache_settings.sh
- if [ ! -f update_opcache_settings.sh ]; then echo "Failed to download update_opcache_settings.sh"; exit 1; fi
- chmod +x *.sh - chmod +x *.sh
# Download relay scripts with verification # Download relay scripts with verification
- cd /home/litespeed/mbmanager/relay - cd /home/litespeed/mbmanager/relay
@ -407,36 +417,34 @@ actions:
- cmd[cp]: - cmd[cp]:
user: root user: root
commands: commands:
- OP_INI='/usr/local/lsws/lsphp/etc/php.d/10-opcache.ini' - php /home/litespeed/mbmanager/scripts/toggle_opcache.php enable
- sed -i 's/opcache.enable=0/opcache.enable=1/' $OP_INI - return:
- restartNodes: type: info
- nodeGroup: "cp" message: "${response.out}"
reboot: true
- return: enableSuccess
disable_opcache: disable_opcache:
- cmd[cp]: - cmd[cp]:
user: root user: root
commands: commands:
- OP_INI='/usr/local/lsws/lsphp/etc/php.d/10-opcache.ini' - php /home/litespeed/mbmanager/scripts/toggle_opcache.php disable
- sed -i 's/opcache.enable=1/opcache.enable=0/' $OP_INI - return:
- restartNodes: type: info
- nodeGroup: "cp" message: "${response.out}"
reboot: true
- return: disableSuccess
clear_opcache: clear_opcache:
- cmd[cp]: - cmd[cp]:
user: root user: root
commands: commands:
- echo "<?php opcache_reset(); ?>" | php - php /home/litespeed/mbmanager/scripts/clear_opcache.php
- return: clearSuccess - return:
type: info
message: "${response.out}"
opcache_status: opcache_status:
- cmd[cp]: - cmd[cp]:
user: root user: root
commands: commands:
- echo "<?php echo json_encode(['opcache_enabled' => opcache_get_status(false)['opcache_enabled']]); ?>" | php - php /home/litespeed/mbmanager/scripts/check_opcache.php
- return: - return:
type: info type: info
message: "${response.out}" message: "${response.out}"
@ -445,7 +453,7 @@ actions:
- cmd[cp]: - cmd[cp]:
user: root user: root
commands: commands:
- echo "<?php \$status = opcache_get_status(false); echo json_encode(['memory_usage' => \$status['memory_usage'], 'opcache_statistics' => \$status['opcache_statistics']]); ?>" | php - php /home/litespeed/mbmanager/scripts/check_opcache.php
- return: - return:
type: info type: info
message: "${response.out}" message: "${response.out}"
@ -454,24 +462,25 @@ actions:
- cmd[cp]: - cmd[cp]:
user: root user: root
commands: commands:
- echo "<?php \$status = opcache_get_status(true); echo json_encode(['scripts' => \$status['scripts'], 'opcache_statistics' => \$status['opcache_statistics'], 'jit' => \$status['jit']]); ?>" | php - php /home/litespeed/mbmanager/scripts/check_opcache.php
- return: - return:
type: info type: info
message: "${response.out}" message: "${response.out}"
opcache_fetch_settings: opcache_fetch_settings:
- cmd[cp]: - cmd[cp]:
user: root user: root
commands: commands:
- echo "<?php \$ini = parse_ini_file('/usr/local/lsws/lsphp/etc/php.d/10-opcache.ini'); echo json_encode(['memory_consumption' => \$ini['opcache.memory_consumption'], 'interned_strings_buffer' => \$ini['opcache.interned_strings_buffer'], 'max_accelerated_files' => \$ini['opcache.max_accelerated_files'], 'revalidate_freq' => \$ini['opcache.revalidate_freq']]); ?>" | php - php /home/litespeed/mbmanager/scripts/check_opcache.php
- return: - return:
type: info type: info
message: "${response.out}" message: "${response.out}"
opcache_update_settings: opcache_update_settings:
- cmd[cp]: - cmd[cp]:
user: root user: root
commands: commands:
- bash /home/litespeed/mbmanager/update_opcache_settings.sh "${settings.memory_consumption}" "${settings.interned_strings_buffer}" "${settings.max_accelerated_files}" "${settings.revalidate_freq}" - bash /home/litespeed/mbmanager/scripts/update_opcache_settings.sh "${settings.memory_consumption}" "${settings.interned_strings_buffer}" "${settings.max_accelerated_files}" "${settings.revalidate_freq}"
- systemctl restart lsws
- restartNodes: - restartNodes:
- nodeGroup: "cp" - nodeGroup: "cp"
reboot: true reboot: true
@ -480,32 +489,36 @@ actions:
message: "OPCache settings updated successfully." message: "OPCache settings updated successfully."
litespeed_status: litespeed_status:
- cmd[cp]: - cmd[cp]:
user: root
commands: commands:
- wp --path=/var/www/webroot/ROOT litespeed-option get cache - php /home/litespeed/mbmanager/scripts/check_litespeed.php
- return: - return:
type: info type: info
message: "${response.out}" message: "${response.out}"
litespeed_enable: litespeed_enable:
- cmd[cp]: - cmd[cp]:
user: root
commands: commands:
- wp --path=/var/www/webroot/ROOT litespeed-option set cache 1 - php /home/litespeed/mbmanager/scripts/manage_litespeed.php enable
- return: - return:
type: info type: info
message: "LiteSpeed Enabled." message: "${response.out}"
litespeed_disable: litespeed_disable:
- cmd[cp]: - cmd[cp]:
user: root
commands: commands:
- wp --path=/var/www/webroot/ROOT litespeed-option set cache 0 - php /home/litespeed/mbmanager/scripts/manage_litespeed.php disable
- return: - return:
type: info type: info
message: "LiteSpeed Disabled." message: "${response.out}"
litespeed_purgeall: litespeed_purgeall:
- cmd[cp]: - cmd[cp]:
user: root
commands: commands:
- wp --path=/var/www/webroot/ROOT litespeed-purge all - php /home/litespeed/mbmanager/scripts/manage_litespeed.php purge
- return: - return:
type: info type: info
message: "LiteSpeed Purged Cache." message: "${response.out}"
litespeed_ver: litespeed_ver:
- cmd[cp]: - cmd[cp]:
commands: commands:
@ -522,29 +535,33 @@ actions:
message: "${response.out}" message: "${response.out}"
litespeed_set_ttlpub: litespeed_set_ttlpub:
- cmd[cp]: - cmd[cp]:
user: root
commands: commands:
- wp --path=/var/www/webroot/ROOT litespeed-option set cache-ttl_pub "${settings.sizettl}" - php /home/litespeed/mbmanager/scripts/manage_litespeed.php set-ttl "${settings.sizettl}"
- return: - return:
type: info type: info
message: "${response.out}" message: "${response.out}"
update_cache_exc: update_cache_exc:
- cmd[cp]: - cmd[cp]:
user: root
commands: commands:
- wp --path=/var/www/webroot/ROOT litespeed-option set cache-exc "${settings.cache_exc_paths}" - php /home/litespeed/mbmanager/scripts/manage_litespeed.php set-exclusions "${settings.cache_exc_paths}"
- return: - return:
type: info type: info
message: "${response.out}" message: "${response.out}"
get_litespeed_ttl_values: get_litespeed_ttl_values:
- cmd[cp]: - cmd[cp]:
user: root
commands: commands:
- bash /home/litespeed/mbmanager/litespeed_fetch_settings.sh - php /home/litespeed/mbmanager/scripts/check_litespeed.php
- return: - return:
type: info type: info
message: "${response.out}" message: "${response.out}"
litespeed_update_settings: litespeed_update_settings:
- cmd[cp]: - cmd[cp]:
user: root
commands: commands:
- bash /home/litespeed/mbmanager/litespeed_update_settings.sh "${settings.TTL_PUB}" "${settings.TTL_PRIV}" "${settings.TTL_FRONTPAGE}" "${settings.TTL_FEED}" - bash /home/litespeed/mbmanager/scripts/litespeed_update_settings.sh "${settings.TTL_PUB}" "${settings.TTL_PRIV}" "${settings.TTL_FRONTPAGE}" "${settings.TTL_FEED}"
- restartNodes: - restartNodes:
- nodeGroup: "cp" - nodeGroup: "cp"
reboot: true reboot: true

View File

@ -0,0 +1,54 @@
<?php
$wp_path = '/var/www/webroot/ROOT';
// Check if WP-CLI is available
if (!file_exists('/home/litespeed/bin/wp')) {
echo json_encode(['status' => 'error', 'message' => 'WP-CLI not found']);
exit(1);
}
// Function to run WP-CLI commands
function run_wp_command($command) {
$output = [];
$return_var = 0;
exec("/home/litespeed/bin/wp --path=/var/www/webroot/ROOT $command", $output, $return_var);
return ['output' => $output, 'return_var' => $return_var];
}
// Get cache status
$cache_status = run_wp_command('litespeed-option get cache');
$cache_enabled = ($cache_status['output'][0] ?? '0') === '1';
// Get version
$version = run_wp_command('litespeed-option get _version');
// Get TTL values
$ttl_pub = run_wp_command('litespeed-option get cache-ttl_pub');
$ttl_priv = run_wp_command('litespeed-option get cache-ttl_priv');
$ttl_frontpage = run_wp_command('litespeed-option get cache-ttl_frontpage');
$ttl_feed = run_wp_command('litespeed-option get cache-ttl_feed');
// Get cache exclusion paths
$cache_exc = run_wp_command('litespeed-option get cache-exc');
// Check if LiteSpeed server is running
$lsws_status = [];
exec('systemctl is-active lsws', $lsws_status, $lsws_return);
echo json_encode([
'status' => 'success',
'cache' => [
'enabled' => $cache_enabled,
'version' => $version['output'][0] ?? 'unknown',
'ttl' => [
'public' => $ttl_pub['output'][0] ?? '0',
'private' => $ttl_priv['output'][0] ?? '0',
'frontpage' => $ttl_frontpage['output'][0] ?? '0',
'feed' => $ttl_feed['output'][0] ?? '0'
],
'exclusions' => $cache_exc['output'][0] ?? ''
],
'server' => [
'status' => $lsws_status[0] ?? 'unknown'
]
]);

View File

@ -0,0 +1,31 @@
<?php
if (!extension_loaded('Zend OPcache')) {
echo json_encode(['status' => 'not_installed']);
exit(1);
}
if (!ini_get('opcache.enable')) {
echo json_encode(['status' => 'disabled']);
exit(1);
}
$status = opcache_get_status(false);
if ($status === false) {
echo json_encode(['status' => 'error', 'message' => 'Cannot retrieve OPCache status']);
exit(1);
}
echo json_encode([
'status' => 'enabled',
'enabled' => $status['opcache_enabled'],
'memory_usage' => [
'used' => round($status['memory_usage']['used_memory'] / 1024 / 1024, 2),
'free' => round($status['memory_usage']['free_memory'] / 1024 / 1024, 2),
'wasted' => round($status['memory_usage']['wasted_memory'] / 1024 / 1024, 2)
],
'statistics' => [
'hits' => $status['opcache_statistics']['hits'],
'misses' => $status['opcache_statistics']['misses'],
'hit_rate' => round($status['opcache_statistics']['opcache_hit_rate'], 2)
]
]);

View File

@ -0,0 +1,18 @@
<?php
if (!extension_loaded('Zend OPcache')) {
echo json_encode(['status' => 'error', 'message' => 'OPCache is not installed']);
exit(1);
}
if (!ini_get('opcache.enable')) {
echo json_encode(['status' => 'error', 'message' => 'OPCache is disabled']);
exit(1);
}
$result = opcache_reset();
if ($result === false) {
echo json_encode(['status' => 'error', 'message' => 'Failed to reset OPCache']);
exit(1);
}
echo json_encode(['status' => 'success', 'message' => 'OPCache cleared successfully']);

View File

@ -709,61 +709,8 @@ fi
# --- Let's Encrypt SSL Certificate Setup --- # --- Let's Encrypt SSL Certificate Setup ---
info "Setting up Let's Encrypt SSL certificate..." info "Setting up Let's Encrypt SSL certificate..."
# First, validate that the domain is publicly accessible # Install certbot if not present
info "Validating domain accessibility for SSL certificate..." if ! command_exists certbot; then
# Check if domain resolves to this server
DOMAIN_VALIDATION_FAILED=false
# Get server's public IP
SERVER_IP=$(curl -s ifconfig.me 2>/dev/null || curl -s ipinfo.io/ip 2>/dev/null || curl -s icanhazip.com 2>/dev/null)
if [[ -z "$SERVER_IP" ]]; then
warning "Could not determine server's public IP address."
DOMAIN_VALIDATION_FAILED=true
else
info "Server public IP: $SERVER_IP"
fi
# Check if domain resolves
if [[ "$DOMAIN_VALIDATION_FAILED" == "false" ]]; then
DOMAIN_IP=$(dig +short "$DOMAIN" 2>/dev/null | tail -n1)
if [[ -z "$DOMAIN_IP" ]]; then
warning "Domain '$DOMAIN' does not resolve to any IP address."
warning "Domain needs to be publicly accessible and point to this server for SSL to work."
DOMAIN_VALIDATION_FAILED=true
elif [[ "$DOMAIN_IP" != "$SERVER_IP" ]]; then
warning "Domain '$DOMAIN' resolves to $DOMAIN_IP, but server IP is $SERVER_IP."
warning "Domain must point to this server for Let's Encrypt validation to work."
DOMAIN_VALIDATION_FAILED=true
else
success "Domain validation passed: $DOMAIN resolves to $SERVER_IP"
fi
fi
# Check if domain is accessible via HTTP
if [[ "$DOMAIN_VALIDATION_FAILED" == "false" ]]; then
info "Testing HTTP accessibility for domain validation..."
HTTP_TEST=$(curl -s -o /dev/null -w "%{http_code}" "http://$DOMAIN" --connect-timeout 10 --max-time 30 2>/dev/null)
if [[ "$HTTP_TEST" != "200" && "$HTTP_TEST" != "301" && "$HTTP_TEST" != "302" ]]; then
warning "Domain '$DOMAIN' is not accessible via HTTP (got status: ${HTTP_TEST:-'timeout/error'})."
warning "Let's Encrypt needs HTTP access for domain validation."
DOMAIN_VALIDATION_FAILED=true
else
success "Domain is accessible via HTTP (status: $HTTP_TEST)"
fi
fi
# Proceed with SSL only if domain validation passed
if [[ "$DOMAIN_VALIDATION_FAILED" == "true" ]]; then
warning "Domain validation failed. Skipping SSL certificate generation."
info "To get SSL later:"
info "1. Ensure your domain '$DOMAIN' points to this server ($SERVER_IP)"
info "2. Make sure port 80 is open and accessible from the internet"
info "3. Run: sudo certbot --webroot -w '$WP_ROOT' -d '$DOMAIN' --email '$WP_ADMIN_EMAIL' --agree-tos"
info "WordPress will work without SSL, but HTTPS is recommended for production sites."
else
# Install certbot if not present
if ! command_exists certbot; then
info "Installing certbot for Let's Encrypt certificate management..." info "Installing certbot for Let's Encrypt certificate management..."
if command_exists apt-get; then if command_exists apt-get; then
# Debian/Ubuntu # Debian/Ubuntu
@ -780,12 +727,12 @@ else
warning "Package manager not detected. Please install certbot manually." warning "Package manager not detected. Please install certbot manually."
info "You can install certbot using: wget https://dl.eff.org/certbot-auto && chmod a+x certbot-auto" info "You can install certbot using: wget https://dl.eff.org/certbot-auto && chmod a+x certbot-auto"
fi fi
else else
success "Certbot is already installed." success "Certbot is already installed."
fi fi
# Generate SSL certificate # Generate SSL certificate
if command_exists certbot; then if command_exists certbot; then
info "Generating Let's Encrypt SSL certificate for domain: $DOMAIN" info "Generating Let's Encrypt SSL certificate for domain: $DOMAIN"
# Create a simple verification file for webroot authentication # Create a simple verification file for webroot authentication
@ -840,10 +787,9 @@ else
warning "sudo certbot --webroot -w '$WP_ROOT' -d '$DOMAIN' --email '$WP_ADMIN_EMAIL' --agree-tos" warning "sudo certbot --webroot -w '$WP_ROOT' -d '$DOMAIN' --email '$WP_ADMIN_EMAIL' --agree-tos"
info "Or configure SSL manually in your web server control panel." info "Or configure SSL manually in your web server control panel."
fi fi
else else
warning "Certbot not available. SSL certificate not generated." warning "Certbot not available. SSL certificate not generated."
info "Please install certbot manually and run: sudo certbot --webroot -w '$WP_ROOT' -d '$DOMAIN'" info "Please install certbot manually and run: sudo certbot --webroot -w '$WP_ROOT' -d '$DOMAIN'"
fi
fi fi
# --- Final Summary --- # --- Final Summary ---

View File

@ -1,5 +1,16 @@
#!/bin/bash #!/bin/bash
# Check if WP-CLI is available
if [ ! -f "/home/litespeed/bin/wp" ]; then
echo "WP-CLI not found"
exit 1
fi
# Function to run WP-CLI commands
run_wp_command() {
/home/litespeed/bin/wp --path=/var/www/webroot/ROOT "$@"
}
# Check for correct number of arguments # Check for correct number of arguments
if [ "$#" -ne 4 ]; then if [ "$#" -ne 4 ]; then
echo "Usage: $0 TTL_PUB TTL_PRIV TTL_FRONTPAGE TTL_FEED" echo "Usage: $0 TTL_PUB TTL_PRIV TTL_FRONTPAGE TTL_FEED"
@ -12,14 +23,14 @@ TTL_PRIV=$2
TTL_FRONTPAGE=$3 TTL_FRONTPAGE=$3
TTL_FEED=$4 TTL_FEED=$4
# CD into WordPress directory # Update TTL values
cd /var/www/webroot/ROOT run_wp_command litespeed-option set cache-ttl_pub "$TTL_PUB"
run_wp_command litespeed-option set cache-ttl_priv "$TTL_PRIV"
run_wp_command litespeed-option set cache-ttl_frontpage "$TTL_FRONTPAGE"
run_wp_command litespeed-option set cache-ttl_feed "$TTL_FEED"
# Run wp-cli # Purge cache
wp litespeed-option set cache-ttl_pub "$TTL_PUB" run_wp_command litespeed-purge all
wp litespeed-option set cache-ttl_priv "$TTL_PRIV"
wp litespeed-option set cache-ttl_frontpage "$TTL_FRONTPAGE"
wp litespeed-option set cache-ttl_feed "$TTL_FEED"
echo "Cache settings updated successfully." echo "LiteSpeed cache settings updated successfully"

View File

@ -0,0 +1,60 @@
<?php
$action = $argv[1] ?? 'status';
$value = $argv[2] ?? '';
// Check if WP-CLI is available
if (!file_exists('/home/litespeed/bin/wp')) {
echo json_encode(['status' => 'error', 'message' => 'WP-CLI not found']);
exit(1);
}
// Function to run WP-CLI commands
function run_wp_command($command) {
$output = [];
$return_var = 0;
exec("/home/litespeed/bin/wp --path=/var/www/webroot/ROOT $command", $output, $return_var);
return ['output' => $output, 'return_var' => $return_var];
}
switch ($action) {
case 'enable':
run_wp_command('litespeed-option set cache 1');
run_wp_command('litespeed-purge all');
echo json_encode(['status' => 'success', 'message' => 'LiteSpeed cache enabled and purged']);
break;
case 'disable':
run_wp_command('litespeed-option set cache 0');
run_wp_command('litespeed-purge all');
echo json_encode(['status' => 'success', 'message' => 'LiteSpeed cache disabled and purged']);
break;
case 'purge':
run_wp_command('litespeed-purge all');
echo json_encode(['status' => 'success', 'message' => 'LiteSpeed cache purged']);
break;
case 'set-ttl':
if (empty($value)) {
echo json_encode(['status' => 'error', 'message' => 'TTL value required']);
exit(1);
}
run_wp_command("litespeed-option set cache-ttl_pub $value");
run_wp_command('litespeed-purge all');
echo json_encode(['status' => 'success', 'message' => "TTL set to $value and cache purged"]);
break;
case 'set-exclusions':
if (empty($value)) {
echo json_encode(['status' => 'error', 'message' => 'Exclusion paths required']);
exit(1);
}
run_wp_command("litespeed-option set cache-exc \"$value\"");
run_wp_command('litespeed-purge all');
echo json_encode(['status' => 'success', 'message' => 'Cache exclusions updated and cache purged']);
break;
default:
echo json_encode(['status' => 'error', 'message' => 'Invalid action']);
exit(1);
}

View File

@ -164,7 +164,7 @@ update_httpd_config() {
local domain="$1" local domain="$1"
local ip="$2" local ip="$2"
local listener_name="HTTPS-$domain" local listener_name="HTTPS-$domain"
local vhost_name="Jelastic" local vhost_name="Default"
log "Checking if listener exists for '$listener_name'..." log "Checking if listener exists for '$listener_name'..."
local existing local existing

View File

@ -0,0 +1,40 @@
<?php
$action = $argv[1] ?? 'status';
$ini_file = '/usr/local/lsws/lsphp/etc/php.d/10-opcache.ini';
if (!file_exists($ini_file)) {
echo json_encode(['status' => 'error', 'message' => 'OPCache configuration file not found']);
exit(1);
}
$ini_content = file_get_contents($ini_file);
if ($ini_content === false) {
echo json_encode(['status' => 'error', 'message' => 'Cannot read OPCache configuration file']);
exit(1);
}
switch ($action) {
case 'enable':
$new_content = preg_replace('/opcache\.enable\s*=\s*0/', 'opcache.enable = 1', $ini_content);
break;
case 'disable':
$new_content = preg_replace('/opcache\.enable\s*=\s*1/', 'opcache.enable = 0', $ini_content);
break;
default:
echo json_encode(['status' => 'error', 'message' => 'Invalid action']);
exit(1);
}
if (file_put_contents($ini_file, $new_content) === false) {
echo json_encode(['status' => 'error', 'message' => 'Cannot write to OPCache configuration file']);
exit(1);
}
// Restart LiteSpeed to apply changes
exec('service lsws restart', $output, $return_var);
if ($return_var !== 0) {
echo json_encode(['status' => 'warning', 'message' => 'OPCache ' . $action . 'd but LiteSpeed restart failed']);
exit(1);
}
echo json_encode(['status' => 'success', 'message' => 'OPCache ' . $action . 'd successfully']);