導航:首頁 > 編程語言 > strrevphp

strrevphp

發布時間:2023-03-16 19:36:14

① 如何在php中不使用系統函數來實現分割字元串

1查找字元位置函數: strpos($str,search,[int]):查找search在$str中的第一次位置從int開始; stripos($str,search,[int]):函數返回字元串在另一個字元串中第一次出現的位置。該函數對大小寫不敏感 strrpos($str,search,[int]):查找search在$str中的最後一次出現的位置從int 2、提取子字元函數(雙位元組) submit($str,int start[,int length]):從$str中strat位置開始提取[length長度的字元串]。 strstr($str1,$str2):從$str1(第一個的位置)搜索$str2並從它開始截取到結束字元串;若沒有則返回FALSE。 stristr() 功能同strstr,只是不區分大小寫。 strrchr() 從最後一次搜索到的字元處返回;用處:取路徑中文件名 3、替換字元串 str_replace(search,replace,$str):從$str中查找search用replace來替換 str_irreplace(search,replace,$str): strtr($str,search,replace):這個函數中replace不能為""; substr_replace($Str,$rep,$start[,length])$str原始字元串,$rep替換後的新 字元串,$start起始位置,$length替換的長度,該項可選 4、字元長度 int strlen($str) 5、比較字元函數 int strcmp($str1,$str2):$str1>=<$str2分別為正1,0,-1(字元串比較) strcasecmp() 同上(不分大小寫) strnatcmp("4","14") 按自然排序比較字元串 strnatcasecmp() 同上,(區分大小寫) 6、分割成數組函數 str_split($str,len):把$str按len長度進行分割返回數組 split(search,$str[,int]):把$str按search字元進行分割返回數組int是分割幾次,後面的將不分割 expload(search,$str[,int]) 7、去除空格:ltrim、rtrim、trim 8、加空格函數 chunk_split($str,2);向$str字元裡面按2個字元就加入一個空格; 9、chr、ord--返回指定的字元或ascii 10、HTML代碼有關函數 nl2br():使\n轉換為<br>。 strip_tags($str[,'<p>']):去除HTML和PHP標記 在$str中所有HTML和PHP代碼將被去除,可選參數為html和PHP代碼作用是將保留 可選參數所寫的代碼。 如:echo strip_tags($text, '<br><p>'); htmlspecialchars($str[,參數]):頁面正常輸出HTML代碼參數是轉換方式 11、字元大小寫轉換函數 strtolower($str) 字元串轉換為小寫 strtoupper($str) 字元串轉換為大寫 ucfirst($str) 將函數的第一個字元轉換為大寫 ucwords($str) 將每個單詞的首字母轉換為大寫 12、資料庫相關函數 addslashes($str):使str內單引號(')、雙引號(")、反斜線(\)與 NUL 字元串轉換為\',\",\\。 magic_quotes_gpc = On 自動對 get post cookie的內容進行轉義 get_magic_quotes_gpc()檢測是否打開magic_quotes_gpc stripslashes() 去除字元串中的反斜杠 13、連接函數 implode(str,$arr) 將字元串數組按指定字元連接成一個字元串;implode()函數有個別名函數join addcslashes —— 為字元串裡面的部分字元添加反斜線轉義字元 addslashes —— 用指定的方式對字元串裡面的字元進行轉義 bin2hex —— 將二進制數據轉換成十六進製表示 chr —— 返回一個字元的ASCII碼 chunk_split —— 按一定的字元長度將字元串分割成小塊 convert_cyr_string —— 將斯拉夫語字元轉換為別的字元 convert_uudecode —— 解密一個字元串 convert_uuencode —— 加密一個字元串 count_chars —— 返回一個字元串裡面的字元使用信息 crc32 —— 計算一個字元串的crc32多項式 crypt —— 單向散列加密函數 explode —— 將一個字元串用分割符轉變為一數組形式 fprintf —— 按照要求對數據進行返回,並直接寫入文檔流 get_html_translation_table —— 返回可以轉換的HTML實體 html_entity_decode —— htmlentities ()函數的反函數,將HTML實體轉換為字元 htmlentities —— 將字元串中一些字元轉換為HTML實體 htmlspecialchars_decode —— htmlspecialchars()函數的反函數,將HTML實體轉換為字元 htmlspecialchars —— 將字元串中一些字元轉換為HTML實體 implode —— 將數組用特定的分割符轉變為字元串 join —— 將數組轉變為字元串,implode()函數的別名 levenshtein —— 計算兩個詞的差別大小 localeconv —— 獲取數字相關的格式定義 ltrim —— 去除字元串左側的空白或者指定的字元 md5_file —— 將一個文件進行MD5演算法加密 md5 —— 將一個字元串進行MD5演算法加密 metaphone —— 判斷一個字元串的發音規則 money_format —— 按照參數對數字進行格式化的輸出 nl_langinfo —— 查詢語言和本地信息 nl2br —— 將字元串中的換行符「\n」替換成「<br />」 number_format —— 按照參數對數字進行格式化的輸出 ord —— 將一個ASCII碼轉換為一個字元 parse_str —— 把一定格式的字元串轉變為變數和值 print —— 用以輸出一個單獨的值 printf —— 按照要求對數據進行顯示 quoted_printable_decode —— 將一個字元串加密為一個8位的二進制字元串 quotemeta —— 對若干個特定字元進行轉義 rtrim —— 去除字元串右側的空白或者指定的字元 setlocale —— 設置關於數字,日期等等的本地格式 sha1_file —— 將一個文件進行SHA1演算法加密 sha1 —— 將一個字元串進行SHA1演算法加密 similar_text —— 比較兩個字元串,返回系統認為的相似字元個數 soundex —— 判斷一個字元串的發音規則 sprintf —— 按照要求對數據進行返回,但是不輸出 sscanf —— 可以對字元串進行格式化 str_ireplace —— 像str_replace()函數一樣匹配和替換字元串,但是不區分大小寫 str_pad —— 對字元串進行兩側的補白 str_repeat —— 對字元串進行重復組合 str_replace —— 匹配和替換字元串 str_rot13 —— 將字元串進行ROT13加密處理 str_shuffle —— 對一個字元串裡面的字元進行隨機排序 str_split —— 將一個字元串按照字元間距分割為一個數組 str_word_count —— 獲取字元串裡面的英文單詞信息 strcasecmp —— 對字元串進行大小比較,不區分大小寫 strchr —— 通過比較返回一個字元串的部分strstr()函數的別名 strcmp —— 對字元串進行大小比較 strcoll – 根據本地設置對字元串進行大小比較 strcspn —— 返回字元連續非匹配長度的值 strip_tags —— 去除一個字元串裡面的HTML和PHP代碼 stripcslashes —— 反轉義addcslashes()函數轉義處理過的字元串 stripos —— 查找並返回首個匹配項的位置,匹配不區分大小寫 stripslashes —— 反轉義addslashes()函數轉義處理過的字元串 stristr —— 通過比較返回一個字元串的部分,比較時不區分大小寫 strlen —— 獲取一個字元串的編碼長度 strnatcasecmp —— 使用自然排序法對字元串進行大小比較,不區分大小寫 strnatcmp —— 使用自然排序法對字元串進行大小比較 strncasecmp —— 對字元串的前N個字元進行大小比較,不區分大小寫 strncmp —— 對字元串的前N個字元進行大小比較 strpbrk —— 通過比較返回一個字元串的部分 strpos —— 查找並返回首個匹配項的位置 strrchr —— 通過從後往前比較返回一個字元串的部分 strrev —— 將字元串裡面的所有字母反向排列 strripos —— 從後往前查找並返回首個匹配項的位置,匹配不區分大小寫 strrpos —— 從後往前查找並返回首個匹配項的位置 strspn —— 匹配並返回字元連續出現長度的值 strstr —— 通過比較返回一個字元串的部分 strtok —— 用指定的若干個字元來分割字元串 strtolower —— 將字元串轉變為小寫 strtoupper —— 將字元串轉變為大寫 strtr —— 對字元串比較替換 substr_compare —— 對字元串進行截取後的比較 substr_count —— 計算字元串中某字元段的出現次數 substr_replace —— 對字元串中的部分字元進行替換 substr —— 對字元串進行截取 trim —— 去除字元串兩邊的空白或者指定的字元 ucfirst —— 將所給字元串的第一個字母轉換為大寫 ucwords —— 將所給字元串的每一個英文單詞的第一個字母變成大寫 vfprintf —— 按照要求對數據進行返回,並直接寫入文檔流 vprintf —— 按照要求對數據進行顯示 vsprintf —— 按照要求對數據進行返回,但是不輸出 wordwrap —— 按照一定的字元長度分割字元串 1,快速創建數組的函數range() 比如range()函數可以快速創建從1到9的數字數組: <?php $numbers=range(1,9); //用range直接創建1~9共9個數字組成的數組,以「1」開始「9」結束。 echo $numbers[1]; //輸出創建的第二個數組值:2; echo $numbers[0];則輸入第一個值:0。 ?> 當然,使用range(9,1)則創建了9到1的數字數組。同時,range()還可以創建從a到z 的字元數組: <?php $numbers=range(a,z); foreach ($numbers as $mychrs) //遍歷$numbers數組,每次循環當前單元值被賦給$mychrs echo $mychrs." "; //output a b c d e f g h i j k l m n o p q r s t u v w x y z ?> //foreach是一種遍歷數組的簡便方法,foreach 僅能用於數組,當試圖將其用於其它數據類型或者一個未初始化的變數時會產生錯誤,它有兩種格式: foreach (array_expression as $value) statementforeach (array_expression as $key => $value) statement 第一種格式遍歷給定的 array_expression 數組。每次循環中,當前單元的值被賦給 $value 並且數組內部的指針向前移一步(因此下一次循環中將會得到下一個單元)。第二種格式做同樣的事,只除了當前單元的鍵名也會在每次循環中被賦給變數 $key 使用字元數組時注意大小寫,比如range(A,z)和range(a,Z)是不一樣的。 range()函數還具有第三個參數,該參數的作用是設定步長,比如range(1,9,3)創建的數組元素是:1、4、7 2,PHP中常規數組的排序 一般數組中的各元素均以字元或數字表現的,所以可對數組元素進行升序排列,該功能函數為sort()。比如: <?php $people=array('name','sex','nation','birth'); foreach ($people as $mychrs) echo $mychrs." "; sort($people); echo "<br />---排序後---<br />"; foreach ($people as $mychrs) echo $mychrs." "; ?> 升序排序後的數組元素顯示為 birth name nation sex,當然,sort()函數是區分字母大小寫的(字母從大到小的順序是:A…Z…a…z) Sort()函數還具有第二參數,用來說明升序的規則是用來比較數字還是字元串的。比如: <?php echo "---按數字升序排序---<br />"; $num2=array('26','3',); sort($num2,SORT_NUMERIC); foreach ($num2 as $mychrs) echo $mychrs." "; echo "<br />---按字元升序排序---<br />"; $num3=array('26','3'); sort($num3,SORT_STRING); foreach ($num3 as $mychrs) echo $mychrs." "; ?> SORT_NUMERIC和SORT_STRING用來聲明按數字或字元的升序排列。如果按照數字升序排列是:3,26;但如果按照字元升序排列則是:26,3了。 PHP中除了升序函數以外,還有降序或稱反向排列的函數,就是rsort()函數,比如: $num1=range(1,9); rsort($num1); //這里其實就相當於range(9,1) 3,PHP中關聯數組的排序 PHP除了支持數字索引數組以外,還支持相關數組。比如如下數組就是一個相關(關聯)數組: $peoples=array('xm'=>'name','xb'=>'sex','mz'=>'nation','cs'=>'birth'); 使用sort($peoples)默認即是按照元素定義值的升序排序,在關聯數組中可使用asort()函數表示按元素值升序排序,關聯數組中最主要的則是可按照關鍵字(如xm、xb、mz等)的升序排序,該方法是用函數ksort()函數。 <?php $peoples=array('xm'=>'name','xb'=>'sex','mz'=>'nation','cs'=>'birth'); foreach ($peoples as $mychrs) echo $mychrs." "; echo "<br />--按元素值升序排列--<br />"; asort($peoples); foreach ($peoples as $mychrs) echo $mychrs." "; echo "<br />--按關鍵字升序排列--<br />"; ksort($peoples); foreach ($peoples as $mychrs) echo $mychrs." "; ?> 和常規數組擁有sort()升序函數的反向排序rsort()降序函數相對應的,關聯數組也有對應的降序函數:asort()函數和arsort()函數、ksort()函數和krsort()函數。 記憶:原型函數是sort(),其中a、k表示關聯數組相關必須前置,反向排序使用r修飾。 4,PHP數組元素隨機排序 PHP中使用shuffle()函數將數組元素進行隨機的重新排序,每次都會顯示不同的排序組合,比如: <?php $fer=array('cnbruce','cnrose','cnjames','cnanne'); shuffle($fer); //隨即排序,每刷新一次頁面則進行一次隨機排序。 foreach ($fer as $mychrs) echo $mychrs." "; ?> 5,PHP數組按原順序反向排序 PHP中可使用array_reverse()函數將數組元素按原順序反向排序。比如: <?php $fer=array('cnbruce','cnrose','cnjames','cnanne'); foreach ($fer as $mychrs) echo $mychrs." "; $fer=array_reverse($fer); //將數組內元素按原順序反向排序 echo "<br />--按原順序反向--<br />"; foreach ($fer as $mychrs) echo $mychrs." "; ?> output: cnbruce cnrose cnjames cnanne --按原順序反向-- cnanne cnjames cnrose cnbruce 注意這里的 $fer=array_reverse($fer); 在此之前的任何排序函數均只是聲明引用,並沒有對原有數組進行重新定義,但當我調試該函數時則需要重新定義。這是因為array_reverse()是返 回原數組修改後的副本,如果不需要原有數組,可對原數組重新定義達到覆蓋的目的,否則就另外定義數組保存副本,比 如:$fer_bak=array_reverse($fer_bak);

② php基礎知識點

php基礎知識點

PHP是一種非常流行的開源伺服器端腳本語言,下面我整理了php基礎知識點,希望對大家有幫助!

定義和用法

strrev() 函數反轉字元串。

語法

strrev(string)

參數 描述

string 必需。規定要反轉的字元串。

echo和print都可以做輸出,不同的是,echo不是函數,沒有返回值,而print是一個函數有返回值,所以相對而言如果只是輸出 echo 會更快,而print_r通常用於列印變數的相關信息,通常在調試中使用。

print 是列印字元串

print_r 則是列印復合類型 如數組 對象

$arr = array('a','b','c');

foreach($arr as &$v){ }

print_r($arr);

結果:

Array ( [0] => a [1] => b [2] => c )

foreach($arr as $v){ }

print_r($arr);

結果:

Array ( [0] => a [1] => b [2] => b )

HTTP請求

請求方法(所有方法全為大寫)有多種,各個方法的解釋如下:

GET 請求獲取Request-URI所標識的資源

POST 在Request-URI所標識的資源後附加新的數據

HEAD 請求獲取由Request-URI所標識的資源的響應消息報頭

PUT 請求伺服器存儲一個資源,並用Request-URI作為其標識

DELETE 請求伺服器刪除Request-URI所標識的資源

TRACE 請求伺服器回送收到的請求信息,主要用於測試或診斷

CONNECT 保留將來使用

OPTIONS 請求查詢伺服器的性能,或者查詢與資源相關的選項和需求

HTTP響應也是由三個部分組成,分別是:狀態行、消息報頭、響應正文

1、狀態行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示伺服器HTTP協議的版本;Status-Code表示伺服器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的`文本描述。

狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:

1xx:指示信息--表示請求已接收,繼續處理

2xx:成功--表示請求已被成功接收、理解、接受

3xx:重定向--要完成請求必須進行更進一步的操作

4xx:客戶端錯誤--請求有語法錯誤或請求無法實現

5xx:伺服器端錯誤--伺服器未能實現合法的請求

常見狀態代碼、狀態描述、說明:

200 OK //客戶端請求成功

400 Bad Request //客戶端請求有語法錯誤,不能被伺服器所理解

401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用

403 Forbidden //伺服器收到請求,但是拒絕提供服務

404 Not Found //請求資源不存在,eg:輸入了錯誤的URL

500 Internal Server Error //伺服器發生不可預期的錯誤

503 Server Unavailable //伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常

eg:HTTP/1.1 200 OK (CRLF)

2、響應報頭後述

3、響應正文就是伺服器返回的資源的內容


;

③ PHP符串處理函數

PHP5字元串處理函數

addcslashes — 為字元串裡面的部分字元添加反斜線轉義字元

addslashes — 用指定的方式對字元串裡面的字元進行轉義

bin2hex — 將二進制數據轉換成十六進製表示

chop — rtrim() 的別名函數

chr — 返回一個字元的ASCII碼

chunk_split — 按一定的字元長度將字元串分割成小塊

convert_cyr_string — 將斯拉夫語字元轉換為別的字元

convert_uudecode — 解密一個字元串

convert_uuencode — 加密一個字元串

count_chars — 返回一個字元串裡面的字元使用信息

crc32 — 計算一個字元串的crc32多項式

crypt — 單向散列加密函數

echo — 用以顯示一些內容

explode — 將一個字元串用分割符轉變為一數組形式

fprintf — 按照要求對數據進行返回,並直接寫入文檔流

get_html_translation_table — 返回可以轉換的HTML實體

hebrev — 將Hebrew編碼的字元串轉換為可視的文本

hebrevc — 將Hebrew編碼的字元串轉換為可視的文本

html_entity_decode — htmlentities ()函數的反函數,將HTML實體轉換為字元

htmlentities — 將字元串中一些字元轉換為HTML實體

htmlspecialchars_decode — htmlspecialchars()函數的反函數,將HTML實體轉換為字元

htmlspecialchars — 將字元串中一些字元轉換為HTML實體

implode — 將數組用特定的分割符轉變為字元串

join — 將數組轉變為字元串,implode()函數的別名

levenshtein — 計算兩個詞的差別大小

localeconv — 獲取數字相關的格式定義

ltrim — 去除字元串左側的空白或者指定的字元

md5_file — 將一個文件進行MD5演算法加密

md5 — 將一個字元串進行MD5演算法加密

metaphone — 判斷一個字元串的發音規則

money_format — 按照參數對數字進行格式化的輸出

nl_langinfo — 查詢語言和本地信息

nl2br — 將字元串中的換行符「n」替換成「



number_format — 按照參數對數字進行格式化的輸出

ord — 將一個ASCII碼轉換為一個字元

parse_str — 把一定格式的字元串轉變為變數和值

print — 用以輸出一個單獨的值

printf — 按照要求對數據進行顯示

quoted_printable_decode — 將一個字元串加密為一個8位的二進制字元串

quotemeta — 對若干個特定字元進行轉義

rtrim — 去除字元串右側的空白或者指定的字元

setlocale — 設置關於數字,日期等等的本地格式

sha1_file — 將一個文件進行SHA1演算法加密

sha1 — 將一個字元串進行SHA1演算法加密

similar_text — 比較兩個字元串,返回系統認為的相似字元個數

soundex — 判斷一個字元串的發音規則

sprintf — 按照要求對數據進行返回,但是不輸出

sscanf — 可以對字元串進行格式化

str_ireplace — 像str_replace()函數一樣匹配和替換字元串,但是不區分大小寫

str_pad — 對字元串進行兩側的補白

str_repeat — 對字元串進行重復組合

str_replace — 匹配和替換字元串

str_rot13 — 將字元串進行ROT13加密處理

str_shuffle — 對一個字元串裡面的字元進行隨機排序

str_split — 將一個字元串按照字元間距分割為一個數組

str_word_count — 獲取字元串裡面的英文單詞信息

strcasecmp — 對字元串進行大小比較,不區分大小寫

strchr — 通過比較返回一個字元串的部分strstr()函數的別名

strcmp — 對字元串進行大小比較

strcoll – 根據本地設置對字元串進行大小比較

strcspn — 返回字元連續非匹配長度的值

strip_tags — 去除一個字元串裡面的HTML和PHP代碼

stripcslashes — 反轉義addcslashes()函數轉義處理過的字元串

stripos — 查找並返回首個匹配項的位置,匹配不區分大小寫

stripslashes — 反轉義addslashes()函數轉義處理過的字元串

stristr — 通過比較返回一個字元串的部分,比較時不區分大小寫

strlen — 獲取一個字元串的編碼長度

strnatcasecmp — 使用自然排序法對字元串進行大小比較,不區分大小寫

strnatcmp — 使用自然排序法對字元串進行大小比較

strncasecmp — 對字元串的前N個字元進行大小比較,不區分大小寫

strncmp — 對字元串的前N個字元進行大小比較

strpbrk — 通過比較返回一個字元串的部分

strpos — 查找並返回首個匹配項的位置

strrchr — 通過從後往前比較返回一個字元串的.部分

strrev — 將字元串裡面的所有字母反向排列

strripos — 從後往前查找並返回首個匹配項的位置,匹配不區分大小寫

strrpos – 從後往前查找並返回首個匹配項的位置

strspn — 匹配並返回字元連續出現長度的值

strstr — 通過比較返回一個字元串的部分

strtok — 用指定的若干個字元來分割字元串

strtolower — 將字元串轉變為小寫

strtoupper –將字元串轉變為大寫

strtr — 對字元串比較替換

substr_compare — 對字元串進行截取後的比較

substr_count — 計算字元串中某字元段的出現次數

substr_replace — 對字元串中的部分字元進行替換

substr — 對字元串進行截取

trim — 去除字元串兩邊的空白或者指定的字元

ucfirst — 將所給字元串的第一個字母轉換為大寫

ucwords — 將所給字元串的每一個英文單詞的第一個字母變成大寫

vfprintf — 按照要求對數據進行返回,並直接寫入文檔流

vprintf — 按照要求對數據進行顯示

vsprintf — 按照要求對數據進行返回,但是不輸出

wordwrap — 按照一定的字元長度分割字元串

strtolower()函數把所有字元變成小寫,strtoupper()函數把所有字元變成大寫,ucfirst()函數將所給字元串的第一個字母轉換為大寫,ucwords()函數將所給字元串的每一個英文單詞的第一個字母變成大寫。ucfirst()只處理字元串的首個字元,ucwords()只處理每個單詞的首字母(以空格來界定是否是單詞,「today!Hi」、「today.Hi」 會被認為是一個單詞),對於其餘字母的大小寫狀態並不改變。 ;

④ PHP如何讓數據倒序顯示

有兩種方法:

1、如果直接是字元串或者是數組,分別用strrev 或者array_reverse反轉可以


2、自己寫一個演算法,讓字元串反轉過來。$str = "abcdef";for ($i=1; $i<=strlen($str); $i++){
echo substr($str , -$i , 1)}。

⑤ php中反轉字元串方法

strrev
(PHP 4, PHP 5, PHP 7)
strrev — 反轉字元串
說明
strrev ( string $string ) : string
返回 string 反轉後的字元串。
參數
string
待運李反轉的原始辯賀字元串。
返回值
返回反轉後的字元串。
範例旁灶遲
Example #1 使用 strrev() 反轉字元串
add a note add a note
User Contributed Notes 4 notes
6 info at ensostudio dot ru ¶3 months ago
It's faster and flexible than tianyiw function (comment #122953)

⑥ php獲取了ip地址,用php怎麼獲取ip的地理位置請大蝦賜教!

通過純真QQip地址庫文件查詢IP地理位置
2009-02-26 14:11
一、下載純真IP地址庫文件QQWry.Dat (網上有很多,並且可以定期升級)

二、創建類文件 IPLocation.php ,將下面代碼直接拷貝到php文件中

<?php
/**
* IP 地理位置查詢類
*
* @author 馬秉堯
* @version 1.5
* @right 2005 CoolCode.CN
*/
class IpLocation
{
/**
* QQWry.Dat文件指針(使用以前珊瑚蟲QQ的IP)
*
* @var resource
*/
var $fp;

/**
* 第一條IP記錄的偏移地址
*
* @var int
*/
var $firstip;

/**
* 最後一條IP記錄的偏移地址
*
* @var int
*/
var $lastip;

/**
* IP記錄的總條數(不包含版本信息記錄)
*
* @var int
*/
var $totalip;

/**
* 返回讀取的長整型數
*
* @access private
* @return int
*/
function getlong()
{
//將讀取的little-endian編碼的4個位元組轉化為長整型數
$result = unpack('Vlong', fread($this->fp, 4));
return $result['long'];
}

/**
* 返回讀取的3個位元組的長整型數
*
* @access private
* @return int
*/
function getlong3()
{
//將讀取的little-endian編碼的3個位元組轉化為長整型數
$result = unpack('Vlong', fread($this->fp, 3).chr(0));
return $result['long'];
}

/**
* 返回壓縮後可進行比較的IP地址
*
* @access private
* @param string $ip
* @return string
*/
function packip($ip)
{
// 將IP地址轉化為長整型數,如果在PHP5中,IP地址錯誤,則返回False,
// 這時intval將Flase轉化為整數-1,之後壓縮成big-endian編碼的字元串
return pack('N', intval(ip2long($ip)));//intaval 獲取變數的整數值
}

/**
* 返回讀取的字元串
*
* @access private
* @param string $data
* @return string
*/
function getstring($data = "")
{
$char = fread($this->fp, 1);
while (ord($char) > 0)
{ // 字元串按照C格式保存,以\0結束 ord()得到字元的ASCII碼
$data .= $char; // 將讀取的字元連接到給定字元串之後
$char = fread($this->fp, 1);
}
return $data;
}

/**
* 返回地區信息
*
* @access private
* @return string
*/
function getarea()
{
$byte = fread($this->fp, 1); // 標志位元組
switch (ord($byte)) {
case 0: // 沒有區域信息
$area = "";
break;
case 1:
case 2: // 標志位元組為1或2,表示區域信息被重定向
fseek($this->fp, $this->getlong3());
$area = $this->getstring();
break;
default: // 否則,表示區域信息沒有被重定向
$area = $this->getstring($byte);
break;
}
return $area;
}

/**
* 根據所給 IP 地址或域名返回所在地區信息
*
* @access public
* @param string $ip
* @return array
*/
function getlocation($ip)
{
if (!$this->fp) return null; // 如果數據文件沒有被正確打開,則直接返回空
$location['ip'] = gethostbyname($ip); // 將輸入的域名轉化為IP地址
$ip = $this->packip($location['ip']); // 將輸入的IP地址轉化為可比較的IP地址
// 不合法的IP地址會被轉化為255.255.255.255
// 對分搜索
$l = 0; // 搜索的下邊界
$u = $this->totalip; // 搜索的上邊界
$findip = $this->lastip; // 如果沒有找到就返回最後一條IP記錄(QQWry.Dat的版本信息)
while ($l <= $u)
{ // 當上邊界小於下邊界時,查找失敗
$i = floor(($l + $u) / 2); // 計算近似中間記錄
fseek($this->fp, $this->firstip + $i * 7);
$beginip = strrev(fread($this->fp, 4)); // 獲取中間記錄的開始IP地址
// strrev函數在這里的作用是將little-endian的壓縮IP地址轉化為big-endian的格式
// 以便用於比較,後面相同。
if ($ip < $beginip)
{ // 用戶的IP小於中間記錄的開始IP地址時
$u = $i - 1; // 將搜索的上邊界修改為中間記錄減一
}
else
{
fseek($this->fp, $this->getlong3());
$endip = strrev(fread($this->fp, 4)); // 獲取中間記錄的結束IP地址
if ($ip > $endip)
{ // 用戶的IP大於中間記錄的結束IP地址時
$l = $i + 1; // 將搜索的下邊界修改為中間記錄加一
}
else
{ // 用戶的IP在中間記錄的IP范圍內時
$findip = $this->firstip + $i * 7;
break; // 則表示找到結果,退出循環
}
}
}

//獲取查找到的IP地理位置信息
fseek($this->fp, $findip);
$location['beginip'] = long2ip($this->getlong()); // 用戶IP所在范圍的開始地址
$offset = $this->getlong3();
fseek($this->fp, $offset);
$location['endip'] = long2ip($this->getlong()); // 用戶IP所在范圍的結束地址
$byte = fread($this->fp, 1); // 標志位元組
switch (ord($byte))
{
case 1: // 標志位元組為1,表示國家和區域信息都被同時重定向
$countryOffset = $this->getlong3(); // 重定向地址
fseek($this->fp, $countryOffset);
$byte = fread($this->fp, 1); // 標志位元組
switch (ord($byte))
{
case 2: // 標志位元組為2,表示國家信息又被重定向
fseek($this->fp, $this->getlong3());
$location['country'] = $this->getstring();
fseek($this->fp, $countryOffset + 4);
$location['area'] = $this->getarea();
break;
default: // 否則,表示國家信息沒有被重定向
$location['country'] = $this->getstring($byte);
$location['area'] = $this->getarea();
break;
}
break;
case 2: // 標志位元組為2,表示國家信息被重定向
fseek($this->fp, $this->getlong3());
$location['country'] = $this->getstring();
fseek($this->fp, $offset + 8);
$location['area'] = $this->getarea();
break;
default: // 否則,表示國家信息沒有被重定向
$location['country'] = $this->getstring($byte);
$location['area'] = $this->getarea();
break;
}
if ($location['country'] == " CZ88.NET")
{ // CZ88.NET表示沒有有效信息
$location['country'] = "未知";
}
if ($location['area'] == " CZ88.NET")
{
$location['area'] = "";
}
return $location;
}

/**
* 構造函數,打開 QQWry.Dat 文件並初始化類中的信息
*
* @param string $filename
* @return IpLocation
*/
function IpLocation($filename = "QQWry.Dat")
{
if (($this->fp = @fopen($filename, 'rb')) !== false)
{
$this->firstip = $this->getlong();
$this->lastip = $this->getlong();
$this->totalip = ($this->lastip - $this->firstip) / 7;
//注冊析構函數,使其在程序執行結束時執行
register_shutdown_function(array(&$this, '_IpLocation'));
}
}

/**
* 析構函數,用於在頁面執行結束後自動關閉打開的文件。
*
*/
function _IpLocation()
{
fclose($this->fp);
}
}
?>

三、程序部分

require_once("includes/IPLocation.php") ; //這里引用剛創建的類文件
$ipLocation = new IpLocation("includes/QQWry.Dat") ; //這里引用ip地址庫

$ips = $ipLocation->getlocation($userIP) ; //$ips 就是所得到的物理地址,$userIP是傳入的IP ,例如(202.106.12.23)

來源:http://hi..com/yang_bd/blog/item/7b44f830b8764e1eebc4afd1.html

下面是一個實例,獲取IP並且檢索出該IP地理位置

<?
//獲取IP
error_reporting (E_ERROR | E_WARNING | E_PARSE);
if($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])
{
$ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];

}
elseif($HTTP_SERVER_VARS["HTTP_CLIENT_IP"])
{
$ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];

}
elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"])
{
$ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];

}
elseif (getenv("HTTP_X_FORWARDED_FOR"))
{
$ip = getenv("HTTP_X_FORWARDED_FOR");

}
elseif (getenv("HTTP_CLIENT_IP"))
{
$ip = getenv("HTTP_CLIENT_IP");

}

elseif (getenv("REMOTE_ADDR"))
{
$ip = getenv("REMOTE_ADDR");

}

else
{
$ip = "Unknown";

}

require_once("includes/IPLocation.php") ; //這里引用剛創建的類文件
$ipLocation = new IpLocation("includes/QQWry.Dat") ; //這里引用ip地址庫

$ips = $ipLocation->getlocation($ip) ; //$ips 就是所得到的物理地址

var_mp($ips);
?>

效果如下(我使用本地測試):
array(5) { ["ip"]=> string(9) "127.0.0.1" ["beginip"]=> string(9) "127.0.0.1" ["endip"]=> string(9) "127.0.0.1" ["country"]=> string(8) "本機地址" ["area"]=> string(0) "" }

閱讀全文

與strrevphp相關的資料

熱點內容
我的世界伺服器如何tp玩家 瀏覽:24
app下載統計怎麼找 瀏覽:262
荔枝app怎麼看適合自己的發型 瀏覽:369
魔獸世界client文件夾 瀏覽:539
解壓音樂輕松入睡 瀏覽:270
c盤文件夾卡頓怎麼辦 瀏覽:448
增量調制編解碼實驗數據 瀏覽:761
電流采樣信號進單片機 瀏覽:189
編程教育課程收費 瀏覽:415
伺服器的氣怎麼寫 瀏覽:395
怎麼刪除授時伺服器地址 瀏覽:143
android基礎組件 瀏覽:666
建興app怎麼變成黑色了 瀏覽:51
文件壓縮包如何加密文件 瀏覽:183
2010提出的演算法 瀏覽:674
冰櫃壓縮機的壽命 瀏覽:105
辦公室采訪程序員 瀏覽:569
美橙雲伺服器購買 瀏覽:754
漢語詞典pdf下載 瀏覽:353
android公網ip 瀏覽:613