getenvphp
㈠ php頁面中能否得到自定義的環境變數
看看能不能放到apache env里,用 apache_getenv 取得。或者定一個單獨的php 文件,在每個項目中都include近來。
㈡ php使用getenv('REMOTE_ADDR')得到的ip是0.0.0.0
奇怪啊,getenv('REMOTE_ADDR')和$_SERVER['REMOTE_ADDR']的確都是正確的.
㈢ php getenv 怎麼設置
在你的用戶表上增加一個欄位,最後登錄時間(last_login),建議再增加一個欄位,記錄最後登錄IP(last_login_ip)。
㈣ PHP獲取用戶所在城市
functiongetip(){
if(getenv("HTTP_CLIENT_IP")&&strcasecmp(getenv("HTTP_CLIENT_IP"),"unknown"))
$ip=getenv("HTTP_CLIENT_IP");
elseif(getenv("HTTP_X_FORWARDED_FOR")&&strcasecmp(getenv("HTTP_X_FORWARDED_FOR"),"unknown"))
$ip=getenv("HTTP_X_FORWARDED_FOR");
elseif(getenv("REMOTE_ADDR")&&strcasecmp(getenv("REMOTE_ADDR"),"unknown"))
$ip=getenv("REMOTE_ADDR");
elseif(isset($_SERVER['REMOTE_ADDR'])&&$_SERVER['REMOTE_ADDR']&&strcasecmp($_SERVER['REMOTE_ADDR'],"unknown"))
$ip=$_SERVER['REMOTE_ADDR'];
else
$ip="unknown";
return($ip);
}
functiongetIPLoc_sina($queryIP){
$url='http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip='.$queryIP;
$ch=curl_init($url);//初始化url地址
curl_setopt($ch,CURLOPT_ENCODING,'utf8');//設置一個cURL傳輸選項
curl_setopt($ch,CURLOPT_TIMEOUT,10);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);//獲取數據返回
$location=curl_exec($ch);//執行一個cURL會話
$location=json_decode($location);//對JSON格式的字元串進行編碼
curl_close($ch);//關閉一個cURL會話
$loc="";
if($location===FALSE)return"地址不正確";
if(empty($location->desc)){
$loc=$location->city;
}else{$loc=$location->desc;}
return$loc;
}
$SA_IP=getip();
$city=getIPLoc_sina($SA_IP);
㈤ php怎麼獲取訪問者的IP 我找的代碼是獲取服務端的還是客戶端的啊
這個代碼是獲取客戶端的
㈥ 如何讓PHP能夠讀取系統環境變數
一、fpm模式
1、通過伺服器傳遞
如在的配置里設置:
fastcgi_param ENV_XXX 123456;
每次頁面請求nginx都會將此變數傳遞給php,php可以通過getenv函數或$_SERVER全局變數獲得。
2、通過fpm配置傳遞
fpm在每次啟動時都會讀取php-fpm.conf文件中的環境變數設置,如:
env[ENV_XXX]="test test"
或者讓fpm讀取系統環境變數,如:
env[ENV_XXX]=$ENV_XXX
注意此種方式要確保系統環境變數存在,且不被sudo禁用。
如果fpm是用sudo方式啟動,默認sudo會禁用一些環境變數,可以通過以下方式放開限制:
vim /etc/sudoers
Defaults env_reset
Defaults env_keep = "ENV_XXX"
或者乾脆放開所有限制:
Defaults !env_reset
最後,如果修改了php-fpm.conf中的設置需要重啟fpm才能生效,同樣php可以通過getenv函數或$_SERVER全局變數獲得環境變數。
二、命令行模式
命令行模式限制較少,可以通過getenv函數或$_SERVER全局變數獲取對當前執行用戶有效的系統環境變數,同樣要注意sudo的限制。
㈦ getenv $_SERVER 區別
我查這也查了半天 什麼都沒找出來~~
$spager=$_SERVER["SERVER_NAME"];
或者
$spager=getenv('SERVER_NAME');
都可以得到同樣結果
...
SERVER是伺服器超級全局變數數組
也就是可以在任何頁面調用.
這數組裡面保存了 很多東西
例如伺服器IP 客戶IP
瀏覽器型號..等等
我們可以使用這些信息 對用戶做一些判斷..
例如你看到的圖片 可以顯示你的IP地址
就是通過這個數組 加上IMAGE 函數實現的
下面我列出$_SERVER內容
-------------------------------------
「GATEWAY_INTERFACE」
伺服器使用的 CGI 規范的版本。例如,「CGI/1.1」。
「SERVER_NAME」
當前運行腳本所在伺服器主機的名稱。如果該腳本運行在一個虛擬主機上,該名稱是由那個虛擬主機所設置的值決定。
「SERVER_SOFTWARE」
伺服器標識的字串,在響應請求時的頭信息中給出。
「SERVER_PROTOCOL」
請求頁面時通信協議的名稱和版本。例如,「HTTP/1.0」。
「REQUEST_METHOD」
訪問頁面時的請求方法。例如:「GET」、「HEAD」,「POST」,「PUT」。
注: 如果請求的方式是 HEAD,PHP 腳本將在送出頭信息後中止(這意味著在產生任何輸出後,不再有輸出緩沖)。
「REQUEST_TIME」
請求開始時的時間戳。從 PHP 5.1.0 起有效。
「QUERY_STRING」
查詢(query)的字元串(URL 中第一個問號 ? 之後的內容)。
「DOCUMENT_ROOT」
當前運行腳本所在的文檔根目錄。在伺服器配置文件中定義。
「HTTP_ACCEPT」
當前請求的 Accept: 頭信息的內容。
「HTTP_ACCEPT_CHARSET」
當前請求的 Accept-Charset: 頭信息的內容。例如:「iso-8859-1,*,utf-8」。
「HTTP_ACCEPT_ENCODING」
當前請求的 Accept-Encoding: 頭信息的內容。例如:「gzip」。
「HTTP_ACCEPT_LANGUAGE」
當前請求的 Accept-Language: 頭信息的內容。例如:「en」。
「HTTP_CONNECTION」
當前請求的 Connection: 頭信息的內容。例如:「Keep-Alive」。
「HTTP_HOST」
當前請求的 Host: 頭信息的內容。
「HTTP_REFERER」
鏈接到當前頁面的前一頁面的 URL 地址。不是所有的用戶代理(瀏覽器)都會設置這個變數,而且有的還可以手工修改 HTTP_REFERER。因此,這個變數不總是真實正確的。
「HTTP_USER_AGENT」
當前請求的 User-Agent: 頭信息的內容。該字元串表明了訪問該頁面的用戶代理的信息。一個典型的例子是:Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)。也可以使用 get_browser() 得到此信息。
「HTTPS」
如果腳本是通過 HTTPS 協議被訪問,則被設為一個非空的值。
「REMOTE_ADDR」
正在瀏覽當前頁面用戶的 IP 地址。
「REMOTE_HOST」
正在瀏覽當前頁面用戶的主機名。反向域名解析基於該用戶的 REMOTE_ADDR。
注: 必須配置 Web 伺服器來建立此變數。例如 Apache 需要在 httpd.conf 中有 HostnameLookups On。參見 gethostbyaddr()。
「REMOTE_PORT」
用戶連接到伺服器時所使用的埠。
「SCRIPT_FILENAME」
當前執行腳本的絕對路徑名。
注: 如果腳本在 CLI 中被執行,作為相對路徑,例如 file.php 或 ../file.php,$_SERVER['SCRIPT_FILENAME'] 將包含用戶指定的相對路徑。
「SERVER_ADMIN」
該值指明了 Apache 伺服器配置文件中的 SERVER_ADMIN 參數。如果腳本運行在一個虛擬主機上,則該值是那個虛擬主機的值。
「SERVER_PORT」
伺服器所使用的埠。默認為「80」。如果使用 SSL 安全連接,則這個值為用戶設置的 HTTP 埠。
「SERVER_SIGNATURE」
包含伺服器版本和虛擬主機名的字元串。
「PATH_TRANSLATED」
當前腳本所在文件系統(不是文檔根目錄)的基本路徑。這是在伺服器進行虛擬到真實路徑的映像後的結果。
㈧ PHP如何添加預定義常量或變數
常量使用define語句定義即可
全局變數可以定義到全局變數數組$GLOBALS中
參考手冊 : http://php.net/manual/zh/rese...
看題主的問法,感覺"環境變數"可能符合題主要求
nginx配置PHP server的時候可以增加以下指令
fastcgi_param CUSTOM_ENV_VAR "my_env_value";
之後只要是通過nginx訪問的PHP請求,在任何代碼中中使用 $_SERVER['CUSTOM_ENV_VAR'] 就能取到你需要的值
又或者在fastcgi的配置文件中增加一行:
env[CUSTOM_ENV_VAR]="my_env_value"
之後只要是php-fastcgi處理的PHP文件,都可以通過 getenv('CUSTOM_ENV_VAR'); 來獲取設置的值
如果題主確實打算不親自define而要得到類似E_ALL那樣的常量的話,就需要寫點C了
題主可以新建一個自己的擴展(或者直接隨便找個你會編譯的擴展也行),在PHP_MINIT_FUNCTION中使用以下宏來定義自己的常量
REGISTER_STRINGL_CONSTANT("MY_SITE_VERSION", "1.0", 3, CONST_PERSISTENT);
之後重新編譯PHP即可.
㈨ php中如何讀取環境變數
看看能不能放到apache env里,
用 apache_getenv 取得。或者定一個
單獨的php 文件,在每個
項目中都include近來。
㈩ 如何讓PHP能夠讀取系統環境變數
一、fpm模式
1、通過伺服器傳遞
如在nginx的配置里設置:
fastcgi_param ENV_XXX 123456;
每次頁面請求nginx都會將此變數傳遞給php,php可以通過getenv函數或$_SERVER全局變數獲得。
2、通過fpm配置傳遞
fpm在每次啟動時都會讀取php-fpm.conf文件中的環境變數設置,如:
env[ENV_XXX]="test test"
或者讓fpm讀取系統環境變數,如:
env[ENV_XXX]=$ENV_XXX
注意此種方式要確保系統環境變數存在,且不被sudo禁用。
如果fpm是用sudo方式啟動,默認sudo會禁用一些環境變數,可以通過以下方式放開限制:
vim /etc/sudoers
Defaults env_reset
Defaults env_keep = "ENV_XXX"
或者乾脆放開所有限制:
Defaults !env_reset
最後,如果修改了php-fpm.conf中的設置需要重啟fpm才能生效,同樣php可以通過getenv函數或$_SERVER全局變數獲得環境變數。
二、命令行模式
命令行模式限制較少,可以通過getenv函數或$_SERVER全局變數獲取對當前執行用戶有效的系統環境變數,同樣要注意sudo的限制。