HEX
Server: Apache/2.4.68 (Debian)
System: Linux as-cs-widget-demo-us-central1 6.1.0-44-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.164-1 (2026-03-09) x86_64
User: root (0)
PHP: 8.2.32
Disabled: NONE
Upload Files
File: /var/www/kevin-demo/wp-content/plugins/ajax-search-pro/src/server/Utils/Server.php
<?php
namespace WPDRMS\ASP\Utils;

defined('ABSPATH') or die("You can't access this file directly.");

/**
 * Utility class for environment checks and other helper methods.
 */
class Server {
	/**
	 * Determines if the current environment is a local development environment.
	 *
	 * This method checks multiple indicators to ascertain if the environment
	 * is local. It checks:
	 * 1. If WP_DEBUG is defined and true.
	 * 2. If the site URL contains common local development domains.
	 * 3. If the server name is localhost or a loopback address.
	 * 4. If an environment variable (e.g., WP_ENV) is set to 'development'.
	 *
	 * @param bool|null                  $wp_debug Optional. WP_DEBUG value. Default null.
	 * @param string|null                $site_url Optional. Site URL. Default null.
	 * @param array<string, string>|null $server   Optional. Server variables. Default null.
	 * @param string|null                $wp_env   Optional. WP_ENV value. Default null.
	 *
	 * @return bool True if it's a local development environment, false otherwise.
	 * @noinspection HttpUrlsUsage
	 */
	public static function isLocalEnvironment(
		?bool $wp_debug = null,
		?string $site_url = null,
		?array $server = null,
		?string $wp_env = null
	): bool {
		// 1. Check WP_DEBUG
		if ( $wp_debug === null ) {
			$wp_debug = defined('WP_DEBUG') && WP_DEBUG;
		}
		if ( $wp_debug ) {
			return true;
		}

		// 2. Check site_url
		if ( $site_url === null && function_exists('site_url') ) {
			$site_url = site_url();
		}
		if ( $site_url !== null ) {
			$local_domains = array(
				'dev',
				'develop',
				'development',
				'test',
				'testing',
				'qa',
				'staging',
				'stage',
				'sandbox',
				'preprod',
				'uat',
				'beta',
				'ci',
				'cd',
				'integration',
				'preview',
				'next',
				'feature',
				'canary',
				'rc',
				'experimental',
				'edge',
				'perf',
				'loadtest',
				'regression',
				'support',
				'internal',
				'fix',
				'patch',
				'mock',
				'acceptance',
				'release',
				'interim',
				'alpha',
				'emulation',
				'new',
				'v1',
				'v2',
				'maintenance',
				'bugfix',
				'prelaunch',
				'quality',
				'verification',
				'pilot',
			);
			/**
			 * Matches only if they start with https://{domain}...
			 */
			foreach ( $local_domains as $domain ) {
				$variations = array(
					$domain . '.',
					$domain . '-',
					$domain . '0',
					$domain . '1',
					$domain . '2',
					$domain . '3',
					$domain . '4',
					$domain . '5',
				);
				foreach ( $variations as $variation ) {
					if ( strpos($site_url, '://' . $variation) !== false ) {
						return true;
					}
				}
			}

			/**
			 * Matches if contains it anywhere
			 */
			$known_test_domains = array(
				'http://',
				'localhost',
				'127.0.0.1',
				'::1',
				'wpengine.com',
				'.wpenginepowered.com',
				'.kinsta.cloud',
				'.local/',
				'.test/',
			);
			foreach ( $known_test_domains as $domain ) {
				if ( strpos($site_url, $domain) !== false ) {
					return true;
				}
			}

			/**
			 * Matches if ends with
			 */
			$domain_endings = array(
				'.test',
				'.local',
			);
			foreach ( $domain_endings as $domain ) {
				if ( str_ends_with($site_url, $domain) ) {
					return true;
				}
			}
		}

		// 3. Check server name
		if ( $server === null ) {
			$server = $_SERVER;
		}
		$server_name        = isset($server['SERVER_NAME']) ? strtolower($server['SERVER_NAME']) : '';
		$local_server_names = array( 'localhost', '127.0.0.1', '::1' );

		if ( in_array($server_name, $local_server_names, true) ) {
			return true;
		}

		// 4. Check WP_ENV
		if ( $wp_env === null ) {
			$wp_env = getenv('WP_ENV');
		}
		if ( $wp_env && strtolower($wp_env) === 'development' ) {
			return true;
		}

		// Not a local environment
		return false;
	}
}