PHP文件上傳利用的常見(jiàn)函數(shù)總結(jié)大全
前言
收集了幾個(gè)在文件上傳利用中常見(jiàn)的函數(shù)。
對(duì)這些函數(shù)的深入理解應(yīng)該有助于文件上傳利用的順利進(jìn)行。
1. deldot
deldot函數(shù)為upload-lab中一個(gè)常見(jiàn)的函數(shù),它實(shí)際為一個(gè)自定義函數(shù),定義于common.php中,函數(shù)定義如下:
function deldot($s){ for($i = strlen($s)-1;$i>0;$i--){ $c = substr($s,$i,1); if($i == strlen($s)-1 and $c != '.'){ return $s; } if($c != '.'){ return substr($s,0,$i+1); } } }
即從字符串的尾部開(kāi)始,從后向前刪除點(diǎn).,直到該字符串的末尾字符不是.為止。
因此對(duì)于如下輸入,
echo deldot("hello world")."\n"; echo deldot("hello world.")."\n"; echo deldot("hello world....")."\n"; echo deldot("hello.world.")."\n";
輸出為
hello world
hello world
hello world
hello.world
2. in_array
in_array(mixed $needle, array $haystack, bool $strict = false): bool
其中第一個(gè)參數(shù)$needle為待搜索的值,$haystack為被搜索的數(shù)組,第三個(gè)參數(shù)決定是否進(jìn)行類型比較。
第三個(gè)類型默認(rèn)為false,即不考慮類型是否相同。
對(duì)于如下輸入:
if(in_array("AAA",$arr,false)) echo 1; if(in_array("aaa",$arr,false)) echo 2; if(in_array("AAA",$arr,true)) echo 3; if(in_array("aaa",$arr,true)) echo 4;
輸出
13
3. intval
intval(mixed $value, int $base = 10): int
intval 函數(shù)用于獲取變量的整數(shù)值。
第一個(gè)參數(shù)$value為要獲取整數(shù)值的變量,可以為字符串、數(shù)值和數(shù)組。
第二個(gè)參數(shù)$base指定了轉(zhuǎn)換所使用的進(jìn)制,當(dāng)且僅當(dāng)要轉(zhuǎn)換的變量為字符串時(shí)有效。
當(dāng)?shù)诙€(gè)參數(shù)為0時(shí),會(huì)檢測(cè)變量的格式來(lái)決定使用的轉(zhuǎn)換進(jìn)制。
- 當(dāng)存在前置的0x或0X時(shí),使用16進(jìn)制。
- 當(dāng)存在前置的0時(shí),使用8進(jìn)制。
- 否則使用10進(jìn)制。
intval函數(shù)返回的數(shù)值為一個(gè)int類型的數(shù)值。當(dāng)轉(zhuǎn)換不成功時(shí),返回0。
特別要注意,使用該函數(shù)返回的值有上限。當(dāng)轉(zhuǎn)換的數(shù)值大于php的整數(shù)范圍時(shí),返回的結(jié)果為整型數(shù)值的取值上限。
echo intval("111"); echo "\n"; echo intval("111a"); echo "\n"; echo intval("0x333"); echo "\n"; echo intval("888",8); echo "\n"; echo intval("122",3); echo "\n"; echo intval("11111111111111111111111111111111111"); echo "\n"; echo intval("2222222222222222222222222222222");
輸出為
111
111
0
0
17
9223372036854775807
9223372036854775807
4. strrchr
strrchr(string $haystack, mixed $needle): string
strrchr函數(shù)在字符串$haystack中查找$needle,并將最后一次查找到的$needle及其后面的字符串返回。如果沒(méi)有在該字符串中查找到$needle,則返回false。
注:
- 如果第二個(gè)參數(shù)不是不是單個(gè)字符,則只使用該字符串的第一個(gè)字符進(jìn)行查找匹配。
- 如果第二個(gè)參數(shù)是一個(gè)數(shù)值,則將該數(shù)值轉(zhuǎn)換為對(duì)應(yīng)的ASCII碼進(jìn)行匹配。
$S = "hhhahahaha2333"; echo strrchr($S,'h')."\n"; echo strrchr($S,'hwweraer')."\n"; echo strrchr($S,104)."\n"; if(strrchr($S,'k') == false) echo "false";
ha2333
ha2333
ha2333
false
5. strtolower
strtolower(string $string): string
將字符串$string中的各個(gè)英文字符轉(zhuǎn)換為小寫(xiě)并返回。
$S = "HaHaHaHa,Hello!!"; echo strtolower($S);
hahahaha,hello!!
6. strrpos
strrpos(string $haystack, string $needle, int $offset = 0): int
返回字符$needle最后一次出現(xiàn)的位置。
在php4中,$needle只能為單個(gè)字符。如果$needle中存在多個(gè)字符,僅使用第一個(gè)字符做匹配。
和strrchr相似,如果$needle是一個(gè)數(shù)值,則使用該數(shù)值對(duì)應(yīng)的ASCII碼字符進(jìn)行匹配。
從php5開(kāi)始,$needle可以為多個(gè)字符。
從php5開(kāi)始,strrpos新增一個(gè)參數(shù)$offset,可以指定從$haystack的哪兒位置開(kāi)始進(jìn)行匹配。
返回匹配的下標(biāo)位置,沒(méi)有匹配到時(shí)返回false。
注意:
- 因?yàn)榉祷刂悼赡転榱?,所以在判斷返回值是否為false的時(shí)候必須使用全等于符號(hào)===。
- 該函數(shù)區(qū)分大小寫(xiě)。與該函數(shù)相似的函數(shù)有:
- stripos:查找首個(gè)出現(xiàn)的位置,不區(qū)分大小寫(xiě)。
- strpos:查找首個(gè)出現(xiàn)的位置,區(qū)分大小寫(xiě)。
- strripos:查找最后一個(gè)出現(xiàn)的位置,不區(qū)分大小寫(xiě)。
- 即出現(xiàn)“i”則為不區(qū)分大小寫(xiě),出現(xiàn)"rr"則為查找最后一個(gè)。
$s = "Phpphphpphpp"; echo strrpos($s,"php"); echo strrpos($s,"h"); echo strrpos($s,"P"); if(strrpos($s,"PHP") === false) echo "No exist";
輸出:
890No exist
注:測(cè)試使用的PHP版本為5.3.3。
在PHP4中結(jié)果可能不一樣。
7. str_ireplace
str_ireplace( mixed $search, mixed $replace, mixed $subject, int &$count = ? ): mixed
str_ireplace函數(shù)用于對(duì)數(shù)組中的元素或字符串中的子串進(jìn)行替換。
第一個(gè)參數(shù)$search為需要替換的內(nèi)容(子串或數(shù)組),第二個(gè)參數(shù)$replace為替換成的內(nèi)容(字符串或數(shù)組),第三個(gè)參數(shù)$subject為被替換的字符串。
- 如果$search和$replace都為字符串,那么將會(huì)把$subject中匹配的子串$search替換為$replace。
- 如果$search和$replace都為數(shù)組時(shí),將會(huì)進(jìn)行映射替換。如果$replace的值的個(gè)數(shù)少于 search 的個(gè)數(shù),多余的替換將使用空字符串來(lái)進(jìn)行。
- 如果$search為數(shù)組而$replace為字符串,則對(duì)于$subject中出現(xiàn)的每一個(gè)search的元素,都會(huì)使用$replace做替換。
$count可以用于限定替換次數(shù)。
注:
- 替換從左到右進(jìn)行。
- 該函數(shù)替換不區(qū)分字母大小寫(xiě)。(另外一個(gè)函數(shù)str_replace區(qū)分大小寫(xiě))
<?php echo str_ireplace("php","","hello.php")."\n"; echo str_ireplace("pHP","","hello.Php")."\n"; echo str_ireplace("php","","hello.phPHpp")."\n"; echo str_ireplace("php","p","hello.phphp")."\n"; echo str_ireplace("php",""."phpphpphpphpphp.php",3)."\n"; echo str_ireplace(array("php","html"),"","hello.php.html")."\n"; echo str_ireplace(array("php","html"),array("1","2"),"hello.php.html")."\n"; echo str_ireplace(array("php","html","css"),array("1","2"),"hello.php.css.html")."\n"; echo str_ireplace(array("php","html","css"),"1","hello.php.css.html")."\n"; foreach (str_ireplace(array("php","html","css"),array("1","2","3"),array("hello.html","hello.css","hello.html")) as $it){ echo "$it "; } ?>
hello.
hello.
hello.Hpp
hello.php
3
hello…
hello.1.2
hello.1…2
hello.1.1.1
hello.2 hello.3 hello.2
8. strstr
strstr(string $haystack, mixed $needle, bool $before_needle = false): string
查找字符串$needle在$haystack中首次出現(xiàn)的位置,并將$needle及其之后的字符串返回。
PHP5起新增第三個(gè)參數(shù)$before_needle,如果$before_needle取值為true,則返回$needle前面的部分。
$s = "123phpphp.php"; echo strstr($s,"php")."\n"; echo strstr($s,"php",true)."\n";
phpphp.php
123
9. substr
substr(string $string, int $offset, ?int $length = null): string
返回字符串$string中的子串。
$offset指定子串首個(gè)字符在$string中的下標(biāo)位置,$length指定截取的子串長(zhǎng)度。
$length的取值:
- $length為默認(rèn)取值時(shí),函數(shù)會(huì)將$offset至$length的字符串截取并返回。
- $length取正數(shù)時(shí),會(huì)從$offset開(kāi)始將最多$length個(gè)字符截取返回出來(lái)。
- $length取0時(shí),返回一個(gè)空字符串。
- $length取負(fù)數(shù)時(shí),會(huì)將$offset至字符串$string倒數(shù)第$length前的字符返回出來(lái)。
$s = "123456789"; echo substr($s,1,3)."\n"; echo substr($s,1,-1)."\n"; echo substr($s,1)."\n"; echo substr($s,1,0)."\n";
234
2345678
23456789
10. trim
trim(string $str, string $character_mask = " \t\n\r\0\x0B"): string
去除字符串$str的首尾的空白字符。
當(dāng)?shù)诙€(gè)參數(shù)保持默認(rèn)時(shí),去除的字符為:
- " " 空格
- “\t” 制表符
- “\n” 換行符
- “\r” 回車符
- “\0” 空字節(jié)符
- “\x0B” 垂直制表符
$s = "\n 1 23456789\t\n123456789\r"; echo trim($s);
1 23456789
123456789
附PHP 文件上傳處理
- $_FILES["file"]["name"] 客戶端提交文件的原名稱
- $_FILES["file"]["type"] 瀏覽器提供的文件的 MIME 類型,如 gif 圖片為 image/gif 。不過(guò)此類型在 PHP 端并不檢查,因此不要想當(dāng)然認(rèn)為有這個(gè)值
- $_FILES["file"]["size"] 已上傳文件的大小,單位為字節(jié)
- $_FILES["file"]["tmp_name"] 文件被上傳后在服務(wù)端儲(chǔ)存的臨時(shí)文件名
- $_FILES["file"]["error"] 和該文件上傳相關(guān)的錯(cuò)誤代碼,為0則表示上傳成功
參考資料
總結(jié)
到此這篇關(guān)于PHP文件上傳利用的常見(jiàn)函數(shù)的文章就介紹到這了,更多相關(guān)PHP文件上傳常見(jiàn)函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
原生JS實(shí)現(xiàn)Ajax通過(guò)GET方式與PHP進(jìn)行交互操作示例
這篇文章主要介紹了原生JS實(shí)現(xiàn)Ajax通過(guò)GET方式與PHP進(jìn)行交互操作,涉及javascript ajax交互及php數(shù)據(jù)接收、處理與數(shù)據(jù)庫(kù)查詢相關(guān)操作技巧,需要的朋友可以參考下2018-05-05PHP+jQuery實(shí)現(xiàn)雙擊修改table表格功能示例
這篇文章主要介紹了PHP+jQuery實(shí)現(xiàn)雙擊修改table表格功能,涉及php數(shù)組讀取、遍歷及jQuery動(dòng)態(tài)響應(yīng)修改頁(yè)面元素屬性相關(guān)操作技巧,需要的朋友可以參考下2019-02-02php數(shù)組對(duì)百萬(wàn)數(shù)據(jù)進(jìn)行排除重復(fù)數(shù)據(jù)的實(shí)現(xiàn)代碼
在平時(shí)的工作中,經(jīng)常接到要對(duì)網(wǎng)站的會(huì)員進(jìn)行站內(nèi)信、手機(jī)短信、email進(jìn)行群發(fā)信息的通知,用戶列表一般由別的同事提供,當(dāng)中難免會(huì)有重復(fù),為了避免重復(fù)發(fā)送,所以我在進(jìn)行發(fā)送信息前要對(duì)他們提供的用戶列表進(jìn)行排重,下面我以u(píng)id列表來(lái)講講我是如何利用php數(shù)組進(jìn)行排重的。2010-06-06php運(yùn)行出現(xiàn)Call to undefined function curl_init()的解決方法
curl_init -- 初始化一個(gè)CURL會(huì)話,如果提示Call to undefined function curl_init那么需要如下操作即可。2010-11-11PHP使用 Imagick 擴(kuò)展實(shí)現(xiàn)圖片合成,圓角處理功能示例
這篇文章主要介紹了PHP使用 Imagick 擴(kuò)展實(shí)現(xiàn)圖片合成,圓角處理功能,結(jié)合具體實(shí)例形式分析了PHP使用 Imagick 擴(kuò)展的圖形處理、生成相關(guān)操作技巧,需要的朋友可以參考下2019-09-09