PHP文件上傳利用的常見函數總結大全
前言
收集瞭幾個在文件上傳利用中常見的函數。
對這些函數的深入理解應該有助於文件上傳利用的順利進行。
1. deldot
deldot函數為upload-lab中一個常見的函數,它實際為一個自定義函數,定義於common.php中,函數定義如下:
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); } } }
即從字符串的尾部開始,從後向前刪除點.,直到該字符串的末尾字符不是.為止。
因此對於如下輸入,
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
其中第一個參數$needle為待搜索的值,$haystack為被搜索的數組,第三個參數決定是否進行類型比較。
第三個類型默認為false,即不考慮類型是否相同。
對於如下輸入:
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 函數用於獲取變量的整數值。
第一個參數$value為要獲取整數值的變量,可以為字符串、數值和數組。
第二個參數$base指定瞭轉換所使用的進制,當且僅當要轉換的變量為字符串時有效。
當第二個參數為0時,會檢測變量的格式來決定使用的轉換進制。
- 當存在前置的0x或0X時,使用16進制。
- 當存在前置的0時,使用8進制。
- 否則使用10進制。
intval函數返回的數值為一個int類型的數值。當轉換不成功時,返回0。
特別要註意,使用該函數返回的值有上限。當轉換的數值大於php的整數范圍時,返回的結果為整型數值的取值上限。
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函數在字符串$haystack中查找$needle,並將最後一次查找到的$needle及其後面的字符串返回。如果沒有在該字符串中查找到$needle,則返回false。
註:
- 如果第二個參數不是不是單個字符,則隻使用該字符串的第一個字符進行查找匹配。
- 如果第二個參數是一個數值,則將該數值轉換為對應的ASCII碼進行匹配。
$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中的各個英文字符轉換為小寫並返回。
$S = "HaHaHaHa,Hello!!"; echo strtolower($S);
hahahaha,hello!!
6. strrpos
strrpos(string $haystack, string $needle, int $offset = 0): int
返回字符$needle最後一次出現的位置。
在php4中,$needle隻能為單個字符。如果$needle中存在多個字符,僅使用第一個字符做匹配。
和strrchr相似,如果$needle是一個數值,則使用該數值對應的ASCII碼字符進行匹配。
從php5開始,$needle可以為多個字符。
從php5開始,strrpos新增一個參數$offset,可以指定從$haystack的哪兒位置開始進行匹配。
返回匹配的下標位置,沒有匹配到時返回false。
註意:
- 因為返回值可能為零,所以在判斷返回值是否為false的時候必須使用全等於符號===。
- 該函數區分大小寫。與該函數相似的函數有:
- stripos:查找首個出現的位置,不區分大小寫。
- strpos:查找首個出現的位置,區分大小寫。
- strripos:查找最後一個出現的位置,不區分大小寫。
- 即出現“i”則為不區分大小寫,出現"rr"則為查找最後一個。
$s = "Phpphphpphpp"; echo strrpos($s,"php"); echo strrpos($s,"h"); echo strrpos($s,"P"); if(strrpos($s,"PHP") === false) echo "No exist";
輸出:
890No exist
註:測試使用的PHP版本為5.3.3。
在PHP4中結果可能不一樣。
7. str_ireplace
str_ireplace( mixed $search, mixed $replace, mixed $subject, int &$count = ? ): mixed
str_ireplace函數用於對數組中的元素或字符串中的子串進行替換。
第一個參數$search為需要替換的內容(子串或數組),第二個參數$replace為替換成的內容(字符串或數組),第三個參數$subject為被替換的字符串。
- 如果$search和$replace都為字符串,那麼將會把$subject中匹配的子串$search替換為$replace。
- 如果$search和$replace都為數組時,將會進行映射替換。如果$replace的值的個數少於 search 的個數,多餘的替換將使用空字符串來進行。
- 如果$search為數組而$replace為字符串,則對於$subject中出現的每一個search的元素,都會使用$replace做替換。
$count可以用於限定替換次數。
註:
- 替換從左到右進行。
- 該函數替換不區分字母大小寫。(另外一個函數str_replace區分大小寫)
<?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中首次出現的位置,並將$needle及其之後的字符串返回。
PHP5起新增第三個參數$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指定子串首個字符在$string中的下標位置,$length指定截取的子串長度。
$length的取值:
- $length為默認取值時,函數會將$offset至$length的字符串截取並返回。
- $length取正數時,會從$offset開始將最多$length個字符截取返回出來。
- $length取0時,返回一個空字符串。
- $length取負數時,會將$offset至字符串$string倒數第$length前的字符返回出來。
$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的首尾的空白字符。
當第二個參數保持默認時,去除的字符為:
- " " 空格
- “\t” 制表符
- “\n” 換行符
- “\r” 回車符
- “\0” 空字節符
- “\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 。不過此類型在 PHP 端並不檢查,因此不要想當然認為有這個值
- $_FILES["file"]["size"] 已上傳文件的大小,單位為字節
- $_FILES["file"]["tmp_name"] 文件被上傳後在服務端儲存的臨時文件名
- $_FILES["file"]["error"] 和該文件上傳相關的錯誤代碼,為0則表示上傳成功
參考資料
PHP官方
總結
到此這篇關於PHP文件上傳利用的常見函數的文章就介紹到這瞭,更多相關PHP文件上傳常見函數內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- C++實現LeetCode(28.實現strStr()函數)
- php中str_replace替換實例講解
- mysql中的find_in_set字符串查找函數解析
- Shell編程之變量的高級用法詳解
- php中echo、print和print_r的區別點及用法總結