PHP
downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

getlastmod> <get_required_files
Last updated: Sun, 25 Nov 2007

view this page in

getenv

(PHP 4, PHP 5)

getenv — Gets the value of an environment variable

说明

string getenv ( string $varname )

Gets the value of an environment variable.

You can see a list of all the environmental variables by using phpinfo(). You can find out what many of them mean by taking a look at the » CGI specification, specifically the » page on environmental variables.

参数

varname

The variable name.

返回值

Returns the value of the environment variable varname , or FALSE on an error.

范例

Example#1 getenv() Example

<?php
// Example use of getenv()
$ip getenv('REMOTE_ADDR');

// Or simply use a Superglobal ($_SERVER or $_ENV)
$ip $_SERVER['REMOTE_ADDR'];
?>



getlastmod> <get_required_files
Last updated: Sun, 25 Nov 2007
 
add a note add a note User Contributed Notes
getenv
estarapapax at gmail dot com
19-Feb-2009 05:19
This is a sample function for checking if your visitor comes from this certain country. This is especially useful for amateur webmasters who don't want to use sql databases.

Sample use of function:
<?php
if(check_coutry('http://www.domain.com/files/philippines.csv') === true)
      echo
'You are from the Philippines';
?>

Basically, you'll need CSV (or TXT) which lists the IP ranges of a certain country. Example (excerpt of the philippines.csv only):

58.69.0.0, 58.69.255.255
58.71.0.0, 58.71.127.255
61.9.0.0, 61.9.127.255
61.14.28.0, 61.14.28.63
61.14.41.136, 61.14.41.143
and so on until the end

You may obtain these CSV files in a number of websites out there. Be sure to update these CSV files regularly as these IP ranges change from time to time.

Here is the function:
<?php
function check_country($url_csv){
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url_csv);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
$str_fromfile = curl_exec($curl_handle);
curl_close($curl_handle);
$range = explode("\n", $str_fromfile);

$ip_addr = getenv(REMOTE_ADDR); //gets the IP of the visitor
$ip_byte = explode('.', $ip_addr);
$ip_number = (16777216 * (int) $ip_byte[0]) + (65536 * (int) $ip_byte[1]) + (256 * (int) $ip_byte[2]) + ((int) $ip_byte[3]);

for(
$i = 0; $range[$i] != NULL && $is_positive == NULL; $i++){ // the condition $line[$i] != NULL means that you should not put blank lines before the end of your CSV. The values should start at line 1.
   
$range[$i] = rtrim(ltrim($range[$i])); //you may remove this if you are sure the CSV doesnt contain whitespaces
   
$ends_addr = explode(',', $range[$i]); //for CSV (comma-separated values), comma is the separator. You may change this if your TXT uses different separator.
   
$ends_addr[0] = rtrim($ends_addr[0]); //again, you may remove this if your CSV is free from whitespaces
   
$ends_addr[1] = ltrim($ends_addr[1]); //yet, again
   
$start_ip_byte = explode('.', $ends_addr[0]);
   
$end_ip_byte = explode('.', $ends_addr[1]);
   
$start_ip_number = (16777216 * (int) $start_ip_byte[0]) + (65536 * (int) $start_ip_byte[1]) + (256 * (int) $start_ip_byte[2]) + ((int) $start_ip_byte[3]);
   
$end_ip_number = (16777216 * (int) $end_ip_byte[0]) + (65536 * (int) $end_ip_byte[1]) + (256 * (int) $end_ip_byte[2]) + ((int) $end_ip_byte[3]);
      
    if(
$ip_number >= $start_ip_number && $ip_number <= $end_ip_number)
           
$is_positive = 1;
}
  
    if(
$is_positive == 1)
        return
true;
    else
        return
false;
}
?>
sam at sambarrow dot com
13-Mar-2008 01:32
SERVER_NAME is the name defined in the apache configuration.
HTTP_HOST is the host header sent by the client when using the more recent versions of the http protocol.
renko at <remove>virtual-life dot net
08-Nov-2004 02:40
The function 'getenv' does not work if your Server API is ASAPI (IIS).

So, try to don't use getenv('REMOTE_ADDR'), but $_SERVER["REMOTE_ADDR"].
kyong
04-Feb-2004 09:06
As you know, getenv('DOCUMENT_ROOT') is useful.
However, under CLI environment(I tend to do quick check
if it works or not), it doesn't work without modified php.ini
file. So I add "export DOCUMENT_ROOT=~" in my .bash_profile.
daman at SPAM_BlockERmralaska dot com
08-Sep-2002 01:37
Be careful using HTTP_X_FORWARDED_FOR in conditional statements collecting the IP address. Sometimes the user's LAN address will get forwarded, which of course is pretty worthless by itself.
alex at acid-edge dot net
23-Jul-2002 05:32
Note that some caches seem to send the client-ip header *backwards*. be careful :)
john-php at pc dot xs4all dot nl
16-Aug-2000 01:56
Note that the X-Forwarded for header might contain multiple addresses, comma separated, if the request was forwarded through multiple proxies.

Finally, note that any user can add an X-Forwarded-For header themselves. The header is only good for traceback information, never for authentication. If you use it for traceback, just log the entire X-Forwarded-For header, along with the REMOTE_ADDR.

getlastmod> <get_required_files
Last updated: Sun, 25 Nov 2007
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites