php函數代碼
㈠ 這段php 遞歸函數代碼,大神幫我解釋下
代碼二: 和代碼1 的區別是
代碼1 是 echo $a.'######<br>' 以後 $a+1 了;
結果是
1######
2######
3######
4######
5######
6######
7######
8######
9######
10*****
代碼二 $a+1 以後才 $a.'######<br>'
10*****
9######
8######
7######
6######
5######
4######
3######
2######
1######
其實遞歸不難理解 無非是執行的次序問題 .
代碼1 的執行次序是
1demo(1)--輸出1######
2demo(2)--輸出2######
3demo(3)--輸出3######
4demo(4)--輸出4######
5demo(5)--輸出5######
6demo(6)--輸出6######
7demo(7)--輸出7######
8demo(8)--輸出8######
9demo(9)--輸出9######
10demo(10)--輸出10*****
返回demo(9)
返回demo(8)
返回demo(7)
返回demo(6)
返回demo(5)
返回demo(4)
返回demo(3)
返回demo(2)
返回demo(1)
代碼2的執行次序是
1demo(1)
2demo(2)
3demo(3)
4demo(4)
5demo(5)
6demo(6)
7demo(7)
8demo(8)
9demo(9)
10demo(10)--輸出10*****
11返回demo(9)--輸出9######
12返回demo(8)--輸出8######
13返回demo(7)--輸出7######
14返回demo(6)--輸出6######
15返回demo(5)--輸出5######
16返回demo(4)--輸出4######
17返回demo(3)--輸出3######
18返回demo(2)--輸出2######
19返回demo(1)--輸出1######
㈡ 10 個經典PHP函數
1.
sys_getloadavg()
sys_getloadavt()可以獲得系
統負載情況。該函數返回一個包含三個元素的數組,每個元素分別代表系統再過去的1、5和15分鍾內的平均負載。
與其讓伺服器因負
載過高而宕掉,不如在系統負載很高時主動die掉一個腳本,sys_getloadavg()就是用來幫你實現這個功能的。
不過很遺憾,該函數在windows下無效。
2.
pack()
Pack()
能將md5()返回的32位16進制字元串轉換為16位的二進制字元串,可以節省存儲空間。
3.
cal_days_in_month()
cal_days_in_month()能夠返回指定月份共有多少天。
4.
_()
WordPress開發者經常能見到這個函數,還有
_e()。這兩個函數功能相同,與gettext()函數結合使用,能實現網站的多語言化。具體可參見PHP手冊的相關部分介紹。
5.
get_browser()
在發送頁面前先看看用戶的瀏覽器都能做些什麼是
不是挺好?get_browser()能獲得用戶的瀏覽器類型,以及瀏覽器支持的功能,不過首先你需要一個php_browscap.ini文件,用來給
函數做參考文件。
要注意,該函數對瀏覽器功能的判斷是基於該類瀏覽器的一般特性的。例如,如果用戶關閉了瀏覽器對
javaScript的支持,函數無法得知這一點。但是在判斷瀏覽器類型和OS平台方面,該函數還是很准確的。
6.
debug_print_backtrace()
這是一個調試用的函數,能幫助你發現代碼中的邏輯錯誤。要理
解這個函數,還是直接看個例子吧:
$a
=
0;
function
iterate()
{
global
$a;
if(
$a
<
10
)
recur();
echo
$a
.
「,
「;
}
function
recur()
{
global
$a;
$a++;
//
how
did
I
get
here?
echo
「\n\n\n」;
debug_print_backtrace();
if(
$a
<
10
)
iterate();
}
iterate();
#
OUTPUT:
#0
recur()
called
at
[C:\htdocs\php_stuff\index.php:8]
#1
iterate()
called
at
[C:\htdocs\php_stuff\index.php:25]
#0
recur()
called
at
[C:\htdocs\php_stuff\index.php:8]
#1
iterate()
called
at
[C:\htdocs\php_stuff\index.php:21]
#2
recur()
called
at
[C:\htdocs\php_stuff\index.php:8]
#3
iterate()
called
at
[C:\htdocs\php_stuff\index.php:25]
#0
recur()
called
at
[C:\htdocs\php_stuff\index.php:8]
#1
iterate()
called
at
[C:\htdocs\php_stuff\index.php:21]
#2
recur()
called
at
[C:\htdocs\php_stuff\index.php:8]
#3
iterate()
called
at
[C:\htdocs\php_stuff\index.php:21]
#4
recur()
called
at
[C:\htdocs\php_stuff\index.php:8]
#5
iterate()
called
at
[C:\htdocs\php_stuff\index.php:25]
7.
metaphone()
這個函數返回單詞的metaphone值,相同讀音的單詞具有相同的metaphone值,也就是說這個函數可以幫你判斷兩個單詞的讀音是否
相同。不過對中文就無效了。。。
8.
natsort()
natsort()能將一個數組以自然排序法
進行排列,直接看個例子吧:
$items
=
array(
「100
apples」,
「5
apples」,
「110
apples」,
「55
apples」
);
//
normal
sorting:
sort($items);
print_r($items);
#
Outputs:
#
Array
#
(
#
[0]
=>
100
apples
#
[1]
=>
110
apples
#
[2]
=>
5
apples
#
[3]
=>
55
apples
#
)
natsort($items);
print_r($items);
#
Outputs:
#
Array
#
(
#
[2]
=>
5
apples
#
[3]
=>
55
apples
#
[0]
=>
100
apples
#
[1]
=>
110
apples
#
)
9.
levenshtein()
Levenshtein()
告訴你兩個單詞之間的「距離」。它告訴你如果想把一個單詞變成另一個單詞,需要插入、替換和刪除多少字母。
看個例子吧:
$dictionary
=
array(
「php」,
「javascript」,
「css」
);
$word
=
「japhp」;
$best_match
=
$dictionary[0];
$match_value
=
levenshtein($dictionary[0],
$word);
foreach($dictionary
as
$w)
{
$value
=
levenshtein($word,
$w);
if(
$value
<
$match_value
)
{
$best_match
=
$w;
$match_value
=
$value;
}
}
echo
「Did
you
mean
the
『$best_match'
category?」;
10.
glob()
glob()會讓你覺得用
opendir(),
readdir()和closedir()來尋找文件非常蠢。
foreach
(glob(「*.php」)
as
$file)
echo
「$file\n」;
㈢ Php header()函數語法及使用代碼
語法:
復制代碼
代碼如下:
Void
header(string
$string[,bool
$replace=true
[,
int
$http_response_code)
向客戶端發送原始的HTTP報頭
需注意:
Header函數必須在任何實際的輸出前調用,無論是一般的html標簽、文件中空行,或者來自php。就是在這個函數之前不能有任何形式的輸出。
參數說明:
參數 描述
string 必需。規定要發送的報頭字元串。
replace 可選。指示該報頭是否替換之前的報頭,或添加第二個報頭。
默認是
true(替換)。false(允許相同類型的多個報頭)。
http_response_code 可選。把
HTTP
響應代碼強制為指定的值。(PHP
4
以及更高版本可用)
常見用法實例:
一、發送伺服器狀態碼
復制代碼
代碼如下:
header('HTTP/1.0
404
Not
Found');
常用狀態碼:
狀態碼 說明
100-199 表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程
200-299 成功接收請求,並已完成整個處理過程,常用200
300-399 未完成請求,客戶端需要進一步細化請求,比如,請求的資源已經移動到一個新的地址,常用302,304
400-499 客戶端請求有誤
常用404
500-599 伺服器端出現錯誤,常用500
詳細見:HTTP&FTP相應提示信息
二、頁面跳轉
復制代碼
代碼如下:
//
立即跳轉
header('Location:
http://www.jb51.net/');
//
3秒後跳轉
header('refresh:3;url=http://www.jb51.net');
3.設置瀏覽器緩存
強制瀏覽器不進行緩存!
[code]
//header('Expires:-1');
header('Expires:
Mon,
26
Jul
1997
05:00:00
GMT');
header('Cache-Control:no-cache,must-revalidate');
header('pragma:no-cache');
header('Last-Modified:
'.
date('D,
j
M
Y
H:i:s
T')
);
㈣ 北大青鳥設計培訓:PHP函數代碼基礎知識
我們在學習PHP開發相關基礎知識的時候,對於不同的開發原理以及代碼的使用都是基本的能力要求。
今天,青島電腦培訓http://www.kmbdqn.cn/就一起來了解PHP開發基礎知識中的函數代碼都有哪些。
array()array(value1,value2?..)創建數組array_chunk(array,size,preserve_keys)把一個數分割成新的數組塊[tk]array_combine(keys,values)通過合並兩個數組(鍵名數組,鍵值數組)組成一個新的數組array_count_values(array)用於統計數組中所有值出現的次數array_diff(array1,array2,...)比較數組返回兩個數組的差集(只比較鍵值)array_diff_assoc(array1,array2,..)比較數組返回兩個數組的差集(比較鍵名和鍵值)array_diff_key(array1,array2,...)比較數組返回兩個數組的差集(只比較鍵名)array_fill(index,number,value)用給定的鍵值填充數組array_filter(array,要用的回調函數)用回調函數過濾數組中的元素array_flip(array)反轉/交換數組中的鍵名和對應關聯的鍵值[flp]array_keys(array)返回數組中的所有鍵名array_merge(array1,array2,..)把一個或多個數組合並一個數組[m:rd]array_pad(array,size,value)將指定數量的帶有指定值的元素插入到數組中array_pop(array)刪除後一個元素array_push(array)末尾添加數組array_shift(array())刪除數並返回被刪除的元素值array_unshift(array))組中的一個元素添加一個或多個元素array_rand(array,number)從數組中隨機選出一個或多個數組array_replace(array1,array2...)使用後面數組的值替換一個數組的值array_reverse(array)數組反轉並返回新的數組array_search(value,array,strict(可選true,flase))搜索值返回鍵名。
True搜索鍵名和值都一樣的元素array_slice(array,start,length,preserve)返回數組中的選定部分array_splice(array,start,length,array)把指定的元素去掉並用其他的替換array_unique(array)刪除數組中的重復值美[junik]array_values(array)返回數組中的所有值array_key_exists(key,array)查找數組鍵名是否存在count(array)返回數組中元素的數目美[kant]in_array(『值』,$array,bool)檢查數組中是否存在指定的值設置為TRUE,則in_array函數檢查搜索的數據與數組的值的類型是否相同。
㈤ sql注入與轉義的php函數代碼
sql注入:
正常情況下:
delete.php?id=3;
$sql
=
'delete
from
news
where
id
=
'.$_GET['id'];
惡意情況:
delete.php?id=3
or
1;
$sql
=
'delete
from
news
where
id
=
3
or
1';
-------如此執行後,所有的記錄將都被刪除
應該採取相關措施。。。比如用之前先判斷是否是數字等等。
要使自己相信,從客戶端傳來的信息永遠是不可靠的!!
轉義:
有時候從客戶端傳來的數據,可能惡意包含些特殊的字元,比如單引號、斜杠等,所以需要轉義,轉義成普通的字元,此時就要用到string
addslashes
(
string
$str
),這個函數可以對某個變數進行轉義。但是,如果對數組里的元素進行轉義,就用foreach循環數組,如下:
復制代碼
代碼如下:
foreach($_POST
as
$k=>$v)
{
if(is_string($v))
{
$_POST[$k]
=
addslashes($v);
}
}
但是如果數組中還包含數組,那就要遞歸進行轉義了,此時用到
array_walk_recursive(array
&$input
,
callback
$funcname
[,
mixed
$userdata
])
將用戶自定義函數
funcname
應用到
array
數組中的每個單元。本函數會遞歸到更深層的數組中去。典型情況下
funcname
接受兩個參數。input
參數的值作為第一個,鍵名作為第二個。如果提供了可選參數
userdata,將被作為第三個參數傳遞給
callback
funcname。成功時返回
TRUE,
或者在失敗時返回
FALSE
也就是說:用自定義的函數,至少要能接收兩個參數,而addslashes()只能接收一個參數所以自定義一個函數如下:
復制代碼
代碼如下:
function
a(&$v,$k){
$v=addslashes($v);
}
array_walk_recursive(&$arr,'a');
系統自動轉義:
PHP中,有一個魔術引號的概念,如何打開?答:在PHP.ini中,magic_quotes_gpc=On;重啟apache即可
魔術引號被打開後,系統會自動對$_GET,$_POST,$_COOKIE數據進行轉義,在不知情的情況下,再次進行手動轉義的話,就轉多了,要想合理的進行轉義,就要首先判斷,魔術符號是否已經打開了,用magic_quotes_gpc()進行判斷,不需要傳值,關閉返回0,關閉返回1
復制代碼
代碼如下:
if(!get_magic_quotes_gpc())
{
//
如果魔術引號沒開
function
_addslashes(&$v,$k)
{
$v
=
addslashes($v);
}
array_walk_recursive(&$_GET,'_addslashes');
array_walk_recursive(&$_POST,'_addslashes');
array_walk_recursive(&$_COOKIE,'_addslashes');
}
㈥ 關於函數和遍歷的php代碼
<?php
functionshow_nums($num){
$ji=array(1,3,5,7,9);
$ou=array(0,2,4,6,8);
if(!in_array($num,array_merge($ji,$ou))||$num==''){
die('參數不合法!');
}
$last=array();
if(is_numeric($num)&($num&1)){
foreach($jias$v){
$last[]=$num.$v;
}
}elseif(is_numeric($num)&(!($num&1))){
foreach($ouas$v){
$last[]=$num.$v;
}
}else{
die('未知錯誤');
}
//return$last;返回數組
returnjoin(',',$last);
}
echoshow_nums(2).'<hr/>';
echoshow_nums(7).'<hr/>';
echoshow_nums(10).'<hr/>';
㈦ PHP常用函數有哪些
常用函數比較多
如:字元串處理函數,數組函數,日期函數,MySQL函數,文件系統函數,GD函數庫等
㈧ php中的四捨五入函數代碼(floor函數、ceil函數、round與intval)
floor函數和ceil函數互相搭配起來可以使php
處理的數據更加真實可靠。
一、先來看floor函數:
語法:
float
floor
(
float
value
)
說明:
返回不大於
value
的下一個整數,將
value
的小數部分捨去取整。floor()
返回的類型仍然是
float,因為
float
值的范圍通常比
integer
要大。
floor()
例子
1
<?php
echo
floor(1.6);
//
will
output
"1"
echo
floor(-1.6);
//
will
output
"-2"
?>
floor()
例子
2
<?php
echo(floor(0.60));
echo(floor(0.40));
echo(floor(5));
echo(floor(5.1));
echo(floor(-5.1));
echo(floor(-5.9))
?>
輸出:
0
0
5
5
-6
-6
二、ceil函數:
語法:
float
ceil
(
float
value
)
說明:
返回不小於
value
的下一個整數,value
如果有小數部分則進一位。ceil()
返回的類型仍然是
float,因為
float
值的范圍通常比
integer
要大。
ceil()
例子:
<?php
echo
ceil(4.3);
//
5
echo
ceil(9.999);
//
10
echo
ceil(-3.14);
//
-3
?>
看到這兩個函數的區別了么。。
在分頁時我們會常用到的
//頁碼計算:
$lastpg=ceil($totle/$displaypg);
//最後頁,也是總頁數,用ceil就方便多了。
$lastpg=$lastpg
?
$lastpg
:
1;
//沒有顯示條目,置最後頁為1
$page=min($lastpg,$page);
$prepg=$page-1;
//上一頁
$nextpg=($page==$lastpg
?
0
:
$page+1);
//下一頁
$firstcount=($page-1)*$displaypg;
當然,如果需要制定精度就需要使用round函數了。
三、round函數:
語法:
float
round
(
float
val
[,
int
precision]
)
說明:
返回將
val
根據指定精度
precision(十進制小數點後數字的數目)進行四捨五入的結果。precision
也可以是負數或零(默認值)。
round()
例子
<?php
echo
round(3.4);
//
3
echo
round(3.5);
//
4
echo
round(3.6);
//
4
echo
round(3.6,
0);
//
4
echo
round(1.95583,
2);
//
1.96
echo
round(1241757,
-3);
//
1242000
echo
round(5.045,
2);
//
5.05
echo
round(5.055,
2);
//
5.06
?>
四、intval—對變數轉成整數型態
變數轉成整數類型。
語法:
int
intval(mixed
var,
int
[base]);
返回值:
整數
函數種類:
PHP
系統功能
內容說明
本函數可將變數轉成整數類型。可省略的參數
base
是轉換的基底,默認值為
10。轉換的變數
var
可以為數組或類之外的任何類型變數。
例子intval()
<?php
echo
intval(4.3);
//4
echo
intval(4.6);
//
4
?>
註:intval如果是字元型的會自動轉換為0
如
intval('abc');
輸出結果
0
如果是
intval('5fd');
輸出結果是
5
㈨ PHP中的文件系統函數(一)
從這篇文章開始,我們將學習一系列的 PHP 文件系統相關函數。其實這些函數中,有很多都是我們經常用到的,大家並不需要刻意地去記住它們,只要知道有這么個東西,在使用的時候記得來查文檔就可以了。
文件路徑相關的函數往往在一些框架中會比較常見,而且多會配合 __FILE__ 、 __DIR__ 之類的魔術常量使用。
basename() 函數是獲得路徑中的文件名,它有兩個參數,第一個是文件的路徑,第二個是過濾掉的內容,比如第一條測試語句我們過濾掉文件的後綴名。
dirname() 返回的是路徑中的路徑部分,也就是不包含文件名的那部分內容,和 basename() 正好是相反的功能。
pathinfo() 函數用於以數組的形式返迴路徑中的信息,從結果來看,我們可以看到文件的 dirname 部分,basename 部分,以及文件的擴展名 extension 和不包含擴展名的 filename 內容。
realpath() 返回的是規范化的絕對路徑名,它擴展所有的符號連接並且處理輸入的路徑中的 ./ 、 ../ 以及多餘的 / ,返回的內容是標准規范的絕對路徑。
接下來,我們學習一些修改文件相關屬性的函數,主要就是在 Linux 系統環境中的文件許可權信息的操作。
當然,首先我們得創建一個文件。和 Linux 中的命令是非常類似的。
touch() 函數除了給出要創建的文件名之外,還有兩個可選參數可以指定文件的創建時間及訪問時間,不給參數的話默認就是當前時間。這個文件名可以是相對或絕對路徑中有許可權的目錄,並在該目錄下創建一個空的文件。
通過 fileowner() 函數,我們可以獲得某個文件所屬的用戶,默認情況下我們的用戶是當前運行 PHP 腳本的用戶,也就是系統目前的登錄用戶。在這里,我們使用 chown() 函數,將用戶改為 www 用戶。clearstatcache() 是用於清理文件系統的緩存信息,如果不清理一下的話,fileowner() 返回的依然還是之前的用戶信息。
同理,使用 filegroup() 函數獲得文件的屬組信息,chgrp() 用於修改文件的屬組。fileperms() 用於返迴文件的許可權信息,它返回的是數字模式的文件訪問許可權,這里我們使用 sprintf() 格式化結果後獲得我們常用的 Linux 系統許可權格式。chmod() 函數用於修改文件的許可權,它的許可權參數是三個 8 進制數據組成的數字,也就是代表 Linux 系統中的 1 、2 、4 和它們的組合,所以我們需要在前面再加上一個 0 用於確保操作能夠正常執行。關於系統文件許可權的知識大家需要認真學習 Linux 系統中相關的內容。
注意,上述函數如果在命令行中運行失敗,大部分原因是沒有許可權,可以使用 sudo 進行測試。在 fastcgi 中運行時,就更加需要注意許可權問題,僅在我們伺服器可以操作的目錄中進行安全的文件許可權修改。
stat() 函數可以獲取到指定文件的所有屬性信息,在這里我們可以看到文件的 uid 、 gid 、 ctime 、 mtime 等信息。
在 Linux 系統中,有軟連接和硬連接的相關知識。其實軟連接就像是 Windows 中的快捷方式,而硬連接相關於復制了一份數據。在 PHP 中,也為我們提供了創建軟硬連接以及相關的一些操作。
使用 link() 函數創建的就是一個指定文件的硬連接文件,而使用 symlink() 創建的則是一個軟連接文件。相對來說,我們使用軟連接的場景會更多一些。lstat() 就和 stat() 函數的功能一樣,查看文件的各種屬性信息,不過 lstat() 函數針對的是軟硬連接文件。
同樣地,我們也可以修改軟硬連接的用戶和用戶組信息,不過它們的信息不能通過 fileowner() 或 filegroup() 查看。因為它們是連接文件,本身還是和原始文件綁定在一起的,使用 fileowner() 這類的函數查看到的依然是原始文件的信息。我們可以在系統環境中使用 ls -l 查看連接文件的用戶和用戶組信息是否修改成功。
今天的內容比較簡單,而且修改許可權的操作也並不常用。不過對於系統安全來,它們還是非常有用的,比如對於上傳來說,我們要預防上傳可執行文件的話,就可以通過修改文件的許可權來讓文件無法直接運行,從而起到安全保護的作用。另外,目錄路徑相關的操作也是一些框架的基礎,幾乎所有框架的入口或者說是 Composer 的入口,都會見到 dirname() 以及 basename() 之類函數的身影。
測試代碼:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/6.PHP中的文件系統函數(一).php
參考文檔:
https://www.php.net/manual/zh/ref.filesystem.php