getenv ("HTTP_XXX) hiçbir şey dönmek

3 Cevap

Neden bu kod dönüş "":

$ip = "";
if(getenv("HTTP_CLIENT_IP")) 
{
 $ip = getenv("HTTP_CLIENT_IP");
} elseif(getenv("HTTP_X_FORWARDED_FOR")) {
 $ip = getenv("HTTP_X_FORWARDED_FOR");
} else {
 $ip = getenv("REMOTE_ADDR");
}

Environment: W2003EE, IIS 6.0, PHP 5.2.9 (ISAPI)

$_SERVER is a built-in PHP variable. getenv() looks at the current environment.

Benim durumumda ben $ _SERVER kullanmanız gerekir. Hepinize teşekkür ederim!

3 Cevap

$ _SERVER ['REMOTE_ADDR'] veya $ _SERVER ['HTTP_X_FORWARDED_FOR'] deneyin

Eğer ayarlanırsa merak Eğer bir yerde $ _SERVER dökümü olabilir.

Ortam değişkeni REMOTE_ADDR değeri ayarlamak boş veya olmamalıdır. Linux üzerinde çalışan echo $ REMOTE_ADDR tarafından terminalde değerini kontrol edin. Null dönerse, $ ip atamadan önce onun değerini ayarlar.

Sorun IIS biraz farklı çalışma ile ilgili bir şey olabilir. Ben CakePHP projenin bu iki fonksiyonu ile başarı elde ettik.

/**
 * Gets remote client IP
 *
 * @return string Client IP address
 * @access public
 */
function getClientIP($safe = true) {
	if (!$safe && env('HTTP_X_FORWARDED_FOR') != null) {
		$ipaddr = preg_replace('/(?:,.*)/', '', env('HTTP_X_FORWARDED_FOR'));
	} else {
		if (env('HTTP_CLIENT_IP') != null) {
			$ipaddr = env('HTTP_CLIENT_IP');
		} else {
			$ipaddr = env('REMOTE_ADDR');
		}
	}

	if (env('HTTP_CLIENTADDRESS') != null) {
		$tmpipaddr = env('HTTP_CLIENTADDRESS');

		if (!empty($tmpipaddr)) {
			$ipaddr = preg_replace('/(?:,.*)/', '', $tmpipaddr);
		}
	}
	return trim($ipaddr);
}

/**
 * Gets an environment variable from available sources, and provides emulation
 * for unsupported or inconsistent environment variables (i.e. DOCUMENT_ROOT on
 * IIS, or SCRIPT_NAME in CGI mode).  Also exposes some additional custom
 * environment information.
 *
 * @param  string $key Environment variable name.
 * @return string Environment variable setting.
 * @link http://book.cakephp.org/view/701/env
 */
    function env($key) {
    	if ($key == 'HTTPS') {
    		if (isset($_SERVER['HTTPS'])) {
    			return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');
    		}
    		return (strpos(env('SCRIPT_URI'), 'https://') === 0);
    	}

    	if ($key == 'SCRIPT_NAME') {
    		if (env('CGI_MODE') && isset($_ENV['SCRIPT_URL'])) {
    			$key = 'SCRIPT_URL';
    		}
    	}

    	$val = null;
    	if (isset($_SERVER[$key])) {
    		$val = $_SERVER[$key];
    	} elseif (isset($_ENV[$key])) {
    		$val = $_ENV[$key];
    	} elseif (getenv($key) !== false) {
    		$val = getenv($key);
    	}

    	if ($key === 'REMOTE_ADDR' && $val === env('SERVER_ADDR')) {
    		$addr = env('HTTP_PC_REMOTE_ADDR');
    		if ($addr !== null) {
    			$val = $addr;
    		}
    	}

    	if ($val !== null) {
    		return $val;
    	}

    	switch ($key) {
    		case 'SCRIPT_FILENAME':
    			if (defined('SERVER_IIS') && SERVER_IIS === true) {
    				return str_replace('\\\\', '\\', env('PATH_TRANSLATED'));
    			}
    		break;
    		case 'DOCUMENT_ROOT':
    			$name = env('SCRIPT_NAME');
    			$filename = env('SCRIPT_FILENAME');
    			$offset = 0;
    			if (!strpos($name, '.php')) {
    				$offset = 4;
    			}
    			return substr($filename, 0, strlen($filename) - (strlen($name) + $offset));
    		break;
    		case 'PHP_SELF':
    			return str_replace(env('DOCUMENT_ROOT'), '', env('SCRIPT_FILENAME'));
    		break;
    		case 'CGI_MODE':
    			return (PHP_SAPI === 'cgi');
    		break;
    		case 'HTTP_BASE':
    			$host = env('HTTP_HOST');
    			if (substr_count($host, '.') !== 1) {
    				return preg_replace('/^([^.])*/i', null, env('HTTP_HOST'));
    			}
    		return '.' . $host;
    		break;
    	}
    	return null;
    }