drkskwlkr icon

Add redis config data to wp-config.php

drkskwlkr | PRO | 05/06/23 12:51:01 PM UTC (Edited) | 1 ⭐ | 1289 👁️ | Never ⏰ | []
Bash |

2.14 KB

|

Source Code

|

1 👍

/

0 👎

#!/bin/bash
 
# Look for wp-config.php in the current directory and if it exists, read db-name value
if [ -f "wp-config.php" ]; then
  # Read db-name value from wp-config.php
  db_name=$(grep -oP "(?<=DB_NAME',\s').*(?=')" wp-config.php)
 
  # Abort execution with an error message if DB_NAME is empty
  if [ -z "$db_name" ]; then
    echo "Error: WordPress instance seems misconfigured. DB_NAME is not defined in wp-config.php."
    exit 1
  fi
 
  # Check if /etc/redis/redis.conf exists and abort execution with an error message if it does not
  if [ ! -f "/etc/redis/redis.conf" ]; then
    echo "Error: redis.conf could not be located."
    exit 1
  fi
 
  # Read bind IP, port number and password from /etc/redis/redis.conf
  bind_ip=$(grep -oP '^bind\s+\K\S+' /etc/redis/redis.conf)
  port=$(grep -oP '^port\s+\K\S+' /etc/redis/redis.conf)
  password=$(grep -oP '^requirepass\s+\K\S+' /etc/redis/redis.conf)
 
  # Create a random 16-character string derived from the db-name value
  salt=$(echo -n "$db_name" | md5sum | cut -c -16)
 
  # Determine the Redis host name or IP based on the bind IP
  if [ "$bind_ip" == "127.0.0.1" ] || [ "$bind_ip" == "::1" ]; then
    redis_host="localhost"
  else
    redis_host=$bind_ip
  fi
 
  # Check if any Redis constants are already defined in wp-config.php, and exit with a warning if they are
  if grep -qE "define\(['\"]?(WP_REDIS_HOST|WP_REDIS_PORT|WP_REDIS_PASSWORD|WP_CACHE_KEY_SALT)['\"]?\s*,\s*['\"]" wp-config.php; then
    echo "Warning: Some or all Redis constants may already be defined in wp-config.php. Exiting without writing anything."
    exit
  fi
 
  # Write the new Redis constants inside wp-config.php before the "That's all, stop editing! Happy publishing." line
  sed -i "s#/\* That's all, stop editing! Happy publishing\. \*/#define( 'WP_REDIS_HOST', '$redis_host' );\\
define( 'WP_REDIS_PORT', '$port' );\\
define( 'WP_REDIS_PASSWORD', '$password' );\\
define( 'WP_CACHE_KEY_SALT', '$salt' );\\
\\
/\* That's all, stop editing! Happy publishing. \*/#" wp-config.php
 
  echo "New Redis constants added to wp-config.php"
else
  echo "Error: wp-config.php not found"
  exit 1
fi

Comments