03 php基礎下
1. PHP函式
1.1 函式介紹
函式的英文叫做 : function , 而function的解釋項中有另外一個含義”功能 ”, 函式就是功能 , 呼叫一個函式就是
在呼叫一個功能。
你可以理解成一個函式就是對一快程式碼的封裝,然後呼叫函式,就會把這塊程式碼執行
1.1.1 基本語法
函式的構成元素 :
- function關鍵字
- 函式名
- 引數
- 函式體
- return
語法 :
function 函式名(引數名1=值1, 引數名2=值2, 引數名n=值n)
{
函式中的功能體
return 返回值
}
例項 :
<?php function func(){ echo '我是func函式'; } func(); ?>
1.1.2 函式引數
引數就在函式名稱後面的一個括號內指定
位置傳參 :
function f($x){
echo "$x"."\n"; // 列印1
}
f(1) // 內部會把1賦值給$x
預設值引數 :
function f($x=2){
echo "$x"."\n"; // 列印2
}
f() // 可以不傳值,因為$x在定義的時候就已經賦值2了
指定傳參 :
function f($x,$y=2){ // $y的值會被傳入的值替換 echo "$x"."\n"; // 列印1 echo "$y"."\n"; // 列印3 } f($x=1,$y=3)
1.1.3 返回值
return 後面緊跟的就是返回值,函式的返回值會傳給函式的呼叫者,即函式名()
<?php
function add($x,$y)
{
$total=$x+$y;
return $total;
}
echo add(1,16); // 列印17
?>
1.2 函式備註說明
-
函式名只能是
字母,數字,下劃線
的組合 , 並且之間不能包含空格 , 數字不能放在函式名首位 -
函式名與變數命名規則一樣 , 但是不同的是 ,
函式名不區分大小寫
-
函式體的引數若是定義了 , 未傳參 , 程式碼會報錯.
-
函式後的引數如果有預設值 , 引數可以不填 ,程式碼也不會報錯
-
函式後的引數可以寫多個
-
函式後如果有預設值和無預設值的引數 , 通常把無預設值的引數寫在最前面
-
函式體的變數與函式體外的變數沒有關係
-
函式體中若有return ,
return後的程式碼不執行.
-
函式執行完後,可把函式體內的值,帶到函式體外
-
函式的執行沒有順序關係,
可以在定義外之前的位置呼叫
1.3 函式匯入
在實際開發中,常常需要把程式中的共用程式碼放到一個檔案中,使用這些程式碼的檔案只需要包含這個檔案即可
這種方法有助於提高程式碼的重用性,給程式碼的編寫與維護帶來很大的便利
在PHP中,有以下四種方法包含一個檔案:
序號 | 函式資訊 | 說明 | 包含失敗 |
---|---|---|---|
1 | include | 檔案繼續向下執行 , 通常用於動態包含 | 返回一條警告 |
2 | require | 程式碼就不會繼續向下執行 , 通常包含極為重要的檔案,這個程式碼別想執行 | 返回一個致命錯誤 |
3 | Include_once | 除了原有include的功能外,它還會做once檢測,如果檔案曾經被包含過,不在包含 | 返回一條警告 |
4 | require_once | 除了原功能以外,會做一次once檢測,防止檔案反覆被包含 | 返回一個致命錯誤 |
// func.php
<?php
function func()
{
echo "執行了func函式"
}
>
// demo.php
<?php
// 在func.php檔案的同級目錄新建一個php檔案,寫入以下程式碼
include "func.php";
//可以直接呼叫
func();
>
1.4 常用內建函式
1.4.1 數字常用函式總結
序號 | 函式資訊 | 說明 | 例項 |
---|---|---|---|
1 | abs() | 求絕對值 輸入數字 輸出絕對值數字 | $abs=abs(-42); //42 |
2 | ceil() | 進一法取整輸入浮點數 輸出進一取整 | echo ceil(9.999) //10 |
3 | floor() | 捨去法取整輸入浮點數 輸出直接捨去小數部分 | echo ceil(9.999) //9 |
4 | fmod() | 浮點數取餘輸入兩個浮點數 輸出浮點數餘數 | $x=5.7;$y=1.3;$r=fmod($x,$y)//$r 0.5 |
5 | pow() | 返回數的n此房輸入基礎的n此房 輸出乘方值 | echo pow(-1,20)//1 |
6 | round | 浮點數四捨五入輸入一個數值 輸出保留小數點後多少位預設為0舍入後的結果 | echo round(195583.2)//196 |
7 | sqit | 求平方根輸入被開方的數 輸出平方根 | echo sqit(9)//3 |
8 | max() | 求最大值輸入多個數字或陣列 輸出返回其中的最大值 | echo max(1.3.5.6.7) //7echo max(array(2,4,5)) //5 |
9 | min() | 求最大值輸入多個數字或陣列 輸出返回其中的最大值 | echo min(1.3.5.6.7) //7echo min(array(2,4,5)) //5 |
10 | mt_rand() | 更好的隨機數輸入最小和最大 輸出返回其中的最大值 | echo min(array(2,4,5)) //5 |
11 | rand() | 隨機數輸入最小或最大 輸出返回其中的最大值隨機分配 | echo rand() |
12 | pi() | 獲取圓周率值輸入無 輸出獲取圓周率 | echo pi(); // 3.1415926535898 |
1.4.2 字串常用函式總結
序號 | 函式資訊 | 說明 | 例項 |
---|---|---|---|
1 | trim() | 刪除字串兩端的空格或其他預定義字元 | "$str = "\r\nHello World!\r\n"; echo trim($str); |
2 | rtrim() | 刪除字串右邊的空格或其他預定義字元 | "$str = "Hello World!\n\n"; echo rtrim($str);" |
3 | chop() | rtrim()的別名 | 同上 |
4 | ltrim() | 刪除字串左邊的空格或其他預定義字元 | "$str = "\r\nHello World!"; echo ltrim($str);" |
5 | dirname() | 迴路徑中的目錄部分(把它歸在了字串函式裡了) | echo dirname("c:/testweb/home.php"); |
6 | str_pad() | 把字串填充為指定的長度 | $str = "Hello World"; echo str_pad($str,20,"."); |
7 | str_repeat() | 重複使用指定字串 | echo str_repeat(".",13); |
8 | str_split() | 把字串分割到陣列中 | print_r(str_split("Hello")); |
9 | strrev() | 反轉字串 | echo strrev("Hello World!"); |
10 | wordwrap() | 按照指定長度對字串進行折行處理 | "$str = ""An example on a long word is: Supercalifragulistic""; echo wordwrap($str,15);" |
11 | str_shuffle() | 隨機地打亂字串中所有字元 | echo str_shuffle("Hello World"); |
12 | parse_str() | 將字串解析成變數 | "parse_str("id=23&name=John%20Adams",$myArray); print_r($myArray);" |
13 | number_format() | 通過千位分組來格式化數字 | "echo number_format("1000000"); echo number_format("1000000",2); echo number_format("1000000",2,"","",""."");" |
14 | strtolower() | 字串轉為小寫 | echo strtolower("Hello WORLD!"); |
15 | strtoupper() | 字串轉為大寫 | echo strtoupper("Hello WORLD!"); |
16 | ucfirst() | 字串首字母大寫 | echo ucfirst("hello world"); |
17 | ucwords() | 字串每個單詞首字元轉為大寫 | echo ucwords("hello world"); |
18 | htmlentities() | 把字元轉為HTML實體 | $str = ""John & 'Adams'""; echo htmlentities($str, ENT_COMPAT); |
19 | htmlspecialchars() | 預定義字元轉html編碼 | |
20 | nl2br() | \n轉義為 | |
21 | strip_tags() | 剝去 HTML、XML 以及 PHP 的標籤 | echo strip_tags("Hello world!"); |
22 | addcslashes() | 在指定的字元前新增反斜線轉義字串中字元 | $str = ""Hello, my name is John Adams." echo $str; echo addcslashes($str,'m');" |
23 | stripcslashes() | 刪除由addcslashes()新增的反斜線 | echo stripcslashes("Hello, \my na\me is Kai Ji\m."); |
24 | addslashes() | 指定預定義字元前新增反斜線 | $str = "Who's John Adams?";echo addslashes($str); |
25 | stripslashes() | 刪除由addslashes()新增的轉義字元 | echo stripslashes("Who's John Adams?"); |
26 | quotemeta() | 在字串中某些預定義的字元前新增反斜線 | $str = "Hello world. (can you hear me?)"; echo quotemeta($str); |
27 | chr() | 從指定的 ASCII 值返回字元 | echo chr(052); |
28 | ord() | 返回字串第一個字元的 ASCII值 | echo ord("hello"); |
29 | strcasecmp() | 不區分大小寫比較兩字串 | echo strcasecmp("Hello world!","HELLO WORLD!"); |
30 | strcmp() | 區分大小寫比較兩字串 | |
31 | strncmp() | 比較字串前n個字元,區分大小寫 | |
32 | strncasecmp() | 比較字串前n個字元,不區分大小寫 | int strncasecmp ( string $str1 , string $str2 , int $len ) |
33 | strnatcmp() | 自然順序法比較字串長度,區分大小寫 | int strnatcmp ( string $str1 , string $str2 ) |
34 | strnatcasecmp() | 自然順序法比較字串長度,不區分大小寫 | int strnatcasecmp ( string $str1 , string $str2 ) |
35 | chunk_split() | 將字串分成小塊 | str chunk_split(str $body[,int $len[,str $end]]) |
36 | strtok() | 切開字串 | str strtok(str $str,str $token) |
37 | explode() | 使用一個字串為標誌分割另一個字串 | array explode(str $sep,str $str[,int $limit]) |
38 | implode() | 同join,將陣列值用預訂字元連線成字串 | string implode ( string $glue , array $pieces ) |
39 | substr() | 擷取字串 | string substr ( string $string , int $start [, int $length ] ) |
40 | str_replace() | 字串替換操作,區分大小寫 | mix str_replace(mix $search,,mix $replace,mix $subject[,int &$num]) |
41 | str_ireplace() | 字串替換操作,不區分大小寫 | mix str_ireplace ( mix $search , mix $replace , mix $subject [, int &$count ] ) |
42 | substr_count() | 統計一個字串,在另一個字串中出現次數 | int substr_count ( string $haystack , string $needle [, int $offset = 0 [, int $length ]] ) |
43 | substr_replace() | 替換字串中某串為另一個字串 | mixed substr_replace ( mixed $string , string $replacement , int $start [, int $length ] ) |
44 | str_ireplace() | 字串替換操作,不區分大小寫 | mix str_ireplace ( mix $search , mix $replace , mix $subject [, int &$count ] ) |
45 | substr_count() | 統計一個字串,在另一個字串中出現次數 | int substr_count ( string $haystack , string $needle [, int $offset = 0 [, int $length ]] ) |
46 | substr_replace() | 替換字串中某串為另一個字串 | mixed substr_replace ( mixed $string , string $replacement , int $start [, int $length ] ) |
47 | similar_text() | 返回兩字串相同字元的數量 | int similar_text(str $str1,str $str2) |
48 | strchr() | 返回一個字串在另一個字串中開始位置到結束的字串 | string strstr ( string $str, string $needle , bool $before_needle ) |
49 | strrchr() | 返回一個字串在另一個字串中最後一次出現位置開始到末尾的字串 | string strrchr ( string $haystack , mixed $needle ) |
50 | stristr() | 返回一個字串在另一個字串中開始位置到結束的字串,不區分大小寫 | string stristr ( string $haystack , mixed $needle [, bool $before_needle = false ] ) |
51 | strtr() | 轉換字串中的某些字元 | string strtr ( string $str , string $from , string $to ) |
52 | strpos() | 尋找字串中某字元最先出現的位置 | int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) |
53 | stripos() | 尋找字串中某字元最先出現的位置,不區分大小寫 | int stripos ( string $haystack , string $needle [, int $offset ] ) |
54 | strrpos() | 尋找某字串中某字元最後出現的位置 | int strrpos ( string $haystack , string $needle [, int $offset = 0 ] ) |
55 | strripos() | 尋找某字串中某字元最後出現的位置,不區分大小寫 | int strripos ( string $haystack , string $needle [, int $offset ] ) |
56 | strspn() | 返回字串中首次符合mask的子字串長度 | int strspn ( string $str1 , string $str2 [, int $start [, int $length ]] ) |
57 | strcspn() | 返回字串中不符合mask的字串的長度 | int strcspn ( string $str1 , string $str2 [, int $start [, int $length ]] ) |
58 | str_word_count() | 統計字串含有的單詞數 | mix str_word_count(str $str,[]) |
59 | strlen() | 統計字串長度 | int strlen(str $str) |
60 | count_chars() | 統計字串中所有字母出現次數(0..255) | mixed count_chars ( string $string [, int $mode ] ) |
61 | md5()iconv | 字串md5編碼 | $str = "Hello"; echo md5($str) |
62 | mb_substr | 獲取字串的部分 | string mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] ) |
63 | mb_http_output | 設定/獲取 HTTP 輸出字元編碼 | mixed mb_http_output ([ string $encoding = mb_http_output() ] ) |
64 | mb_strlen | 獲取字串的長度 | mixed mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] ) |
65 | iconv | 字串按要求的字元編碼來轉換 | string iconv ( string $in_charset , string $out_charset , string $str ) |
66 | iconv_substr | 擷取字串的部分 | |
67 | iconv_get_encoding | 獲取 iconv 擴充套件的內部配置變數 | |
68 | mb_substr_count | 統計字串出現的次數 | |
69 | mb_check_encoding | 檢查字串在指定的編碼裡是否有效 | |
70 | mb_strrpos | 查詢字串在一個字串中最後出現的位置 | |
71 | mb_split | 使用正則表示式分割多位元組字串 | |
72 | parse_url | 解釋URL成為一個數組 | |
註釋:mb_* 和iconv_* 他們可以處理多位元組字元,例如:中文。中文主要用的是GBK和utf-8兩種編碼格式。GBK和utf-8是兩個不同的編碼委員會對於漢字進行的編碼的標準。他們規定GBK是雙位元組,也就是一個漢字佔用2Bytes。utf-8是三位元組,一個漢字佔用三個位元組長度的儲存空間。 |
1.4.3 時間函式總結
getdate()
函式是一個內建函式 , 會返回一個數組 , 他們的索引就是 year mon mday等
<?php
$mytime = getdate();
echo "年 :".$mytime['year']."\n";
echo "月 :".$mytime['mon']."\n";
echo "日 :".$mytime['mday']."\n";
echo "時 :".$mytime['hours']."\n";
echo "分 :".$mytime['minutes']."\n";
echo "秒 :".$mytime['seconds']."\n";
echo "時間戳 :".$mytime[0]."\n";
echo "一個小時中的第幾鍾 :".$mytime['minutes']."\n";
echo "這是一分鐘的第幾秒 :".$mytime['seconds']."\n";
echo "星期名稱 :".$mytime['weekday']."\n";
echo "月份名稱 :".$mytime['month']."\n";
?>
2. 陣列資料結構
2.1 什麼是陣列
陣列的英文是array , 可以存入多個不同型別的資料,是一個複合資料型別。
2.2 定義陣列
$a1 = array(1 , 1.5 , true ,'天王蓋地虎,小雞燉蘑菇')
在上例中,我們發現我們存入了:整型、浮點、布林、字串,可以通過var_dump()
函式打印出來顯示
<?php
$a1 = array(1 , 1.5 , true ,'天王蓋地虎,小雞燉蘑菇');
var_dump($shu);
?>
//array(4) {
// [0]=>
// int(1)
// [1]=>
// float(1.5)
// [2]=>
// bool(true)
// [3]=>
// string(33) "天王蓋地虎,小雞燉蘑菇"
//}
2.3 指定索引
陣列的預設索引是從0開始,依次加1直到最後一個元素,當然你也可以自定義索引,如果你從開頭自定義
則後面的元素的索引就從自定義的那個數字依次加1
<?php
$a1 = array(2=>1 , 1.5 , true ,'天王蓋地虎,小雞燉蘑菇');
var_dump($shu);
?>
//array(4) {
// [2]=>
// int(1)
// [3]=>
// float(1.5)
// [4]=>
// bool(true)
// [5]=>
// string(33) "天王蓋地虎,小雞燉蘑菇"
//}
當然你也可以把索引設定成字母
<?php
$a1 = array("name"=>"ymn" ,"age"=>21);
var_dump($a1);
?>
//array(2) {
// ["name"]=>
// string(3) "ymn"
// ["age"]=>
// int(21)
//}
2.4 常用運算元組函式
序號 | 函式資訊 | 說明 |
---|---|---|
1 | array_shift() | 彈出陣列中的第一個元素 |
2 | array_unshift() | 在陣列的開始處壓入元素 |
3 | array_push() | 向陣列的末尾處壓入元素 |
4 | array_pop() | 彈出陣列末尾的最後一個元素 |
5 | current() | 讀出指標當前位置的值 |
6 | key() | 讀出指標當前位置的鍵 |
7 | next() | 指標向下移 |
8 | prev() | 向上移 |
9 | reset() | 指標到開始處 |
10 | end() | 指標到結束處 |
這些函式,也是面試中基礎面試中最愛問到的問題。
序號 | 函式資訊 | 說明 |
---|---|---|
1 | array_combine() | 生成一個數組,用一個數組的值作為鍵名,另一個數組值作為值 |
2 | range() | 建立並返回一個包含指定範圍的元素的陣列。 |
3 | compact() | 建立一個由引數所帶變數組成的陣列 |
4 | array_fill() | 用給定的值生成陣列 |
5 | array_chunk() | 把一個數組分割為新的陣列塊 |
6 | array_merge() | 把兩個或多個數組合併為一個數組 |
7 | array_slice() | 在陣列中根據條件取出一段值,並返回 |
8 | array_diff() | 返回兩個陣列的差集陣列 |
9 | array_search() | 在陣列中搜索給定的值,如果成功則返回相應的鍵名 |
10 | array_splice() | 把陣列中的一部分去掉並用其它值取代 |
11 | array_sum() | 計算陣列中所有值的和 |
12 | in_array() | 檢查陣列中是否存在某個值 |
13 | array_key_exists() | 檢查給定的鍵名或索引是否存在於陣列中 |
14 | shuffle() | 將陣列打亂,保留鍵值 |
15 | count() | 計算陣列中的單元數目或物件中的屬性個數 |
16 | array_flip() | 返回一個鍵值反轉後的陣列 |
17 | array_keys() | 返回陣列所有的鍵,組成一個數組 |
18 | array_values() | 返回陣列中所有值,組成一個數組 |
19 | array_reverse() | 返回一個元素順序相反的陣列 |
20 | array_count_values() | 統計陣列中所有的值出現的次數 |
21 | array_rand() | 從陣列中隨機抽取一個或多個元素,注意是鍵名 |
22 | array_unique() | 刪除重複值,返回剩餘陣列 |
23 | sort() | 按升序對給定陣列的值排序,不保留鍵名 |
24 | rsort() | 對陣列逆向排序,不保留鍵名 |
25 | asort() | 對陣列排序,保持索引關係 |
26 | arsort() | 對陣列逆向排序,保持索引關係 |
27 | ksort() | 按鍵名對陣列排序 |
28 | krsort() | 將陣列按照鍵逆向排序 |
29 | natsort() | 用自然順序演算法對陣列中的元素排序 |
30 | natcasesort() | 自然排序,不區分大小寫 |
31 | array_filter() | 去掉陣列中的空元素或者預定元素 |
32 | extract() | 將鍵變為變數名,將值變為變數值 |
3. PHP中的正則表示式
正則表示式就是匹配字元的規則
正則表達是會在開發中經常看到,它主要用在以下一些地方:匹配郵箱、手機號碼、驗證碼、替換敏感的關鍵詞。
例如:涉及政治和罵人的話
PHP的正則表達示定界符的規定如下:定界符,不能用a-zA-Z0-9\
其他的都可以用。必須成對出現,有開始就
有結束。
3.1 定義方法
例子 說明
/中間寫正則/ 正確 (常用這個)
$中間寫正則$ 正確
%中間寫正則% 正確
^中間寫正則^ 正確
@中間寫正則@ 正確
(中間寫正則) 錯誤 /\//
A中間寫正則A 錯誤
3.2 轉義字元
在php中\(反斜槓)
是具有轉義的意思的,如果在\
後面緊跟一個n
那麼n
就會被轉義成換行
如果你想取消轉義只需要在前面再加一個\
即可
/\// // 把/取消轉義,/原本是正則的結束,加上\就是普通的/(斜槓)了
3.3 preg_match函式
<?php
$zz = '/wq/';
$string = 'ssssswqaaaaaa';
if(preg_match($zz, $string, $matches)){ // 匹配的結果會賦值給$matches(陣列)
echo '匹配到了,結果為:'.$matches[0]."\n";
var_dump($matches);
}else{
echo '沒有匹配到';
}
?>
3.4 常用的正則函式
序號 | 函式資訊 | 說明 |
---|---|---|
1 | preg_filter() | 執行一個正則表示式搜尋和替換 |
2 | preg_grep() | 返回匹配模式的陣列條目 |
3 | preg_match() | 執行一個正則表示式匹配 |
4 | preg_match_all() | 執行一個全域性正則表示式匹配 |
5 | preg_replace_callback_array() | 傳入陣列,執行一個正則表示式搜尋和替換使用回撥 |
6 | preg_replace_callback() | 執行一個正則表示式搜尋並且使用一個回撥進行替換 |
7 | preg_replace() | 執行一個正則表示式的搜尋和替換 |
8 | preg_split() | 通過一個正則表示式分隔字串 |
$zz = '/wq/';
$string = 'asdwqfggwqaaaawqaa';
$res = preg_split($zz, $string); // 匹配的結果會賦值給$res(陣列)
var_dump($res);
//array(4) {
// [0]=>
// string(3) "asd"
// [1]=>
// string(3) "fgg"
// [2]=>
// string(4) "aaaa"
// [3]=>
// string(2) "aa"
//}
4. php檔案管理
4.1 檔案介紹
我們會點滑鼠右鍵刪除檔案、會control+c(或右鍵)複製、貼上檔案,會新建一些檔案,檢測這個檔案是不是隻
讀檔案。在電腦裡面進行的這些操作,在程式碼裡面如果能操作就好了。因為,如果有了這些操作。我們能做很多事
情了:可不可以寫入修改配置檔案、是不是可以做PHP安裝的時候檢測檔案的許可權、是不是可以做生成Html檔案
等等很多不同的操作,總之其他太多太多的地方用到了檔案操作。
4.2 簡單的讀取檔案
4.2.1 readfile函式
readfile( "檔案路徑" )
會直接將檔案內容列印在控制檯
<?php
readfile('test.txt')
?>
4.2.2 file_get_content函式
<?php
$filename = 'test.txt';
$filestring = file_get_contents($filename); //開啟檔案把內容讀出來,賦值$filestring
echo $filest
ring;
?>
4.3 檔案操作三步驟
4.3.1 fopen開啟檔案
當你用fopen開啟一個檔案之前,應該先指定好模式
常見模式 :
- r模式 只讀
- w模式 只寫
- a模式 追加模式
fopen的8種模式
模式 | 描述 |
---|---|
r | 只讀。在檔案的開頭開始。 |
r+ | 讀/寫。在檔案的開頭開始。 |
w | 只寫。開啟並清空檔案的內容;如果檔案不存在,則建立新檔案。 |
w+ | 讀/寫。開啟並清空檔案的內容;如果檔案不存在,則建立新檔案。 |
a | 追加。開啟並向檔案末尾進行寫操作,如果檔案不存在,則建立新檔案。 |
a+ | 讀/追加。通過向檔案末尾寫內容,來保持檔案內容。 |
x | 只寫。建立新檔案。如果檔案已存在,則返回 FALSE 和一個錯誤。 |
x+ | 讀/寫。建立新檔案。如果檔案已存在,則返回 FALSE 和一個錯誤。 |
如果 fopen() 函式無法開啟指定檔案,則返回 0 (false)。
<?php
$fp = fopen('test.txt','r');
echo var_dump($fp);
// resource(5) of type (stream)
$fp = fopen('test1.txt','r');
echo var_dump($fp);
// bool(false)
?>
4.3.2 讀操作
逐行讀取檔案
gets() 函式用於從檔案中逐行讀取檔案。
註釋:在呼叫該函式之後,檔案指標會移動到下一行。
<?php
$file = fopen("welcome.txt", "r") or exit("無法開啟檔案!");
// 讀取檔案每一行,直到檔案結尾
while(!feof($file))
// feof($file)判斷檔案指標是否在檔案末尾
{
echo fgets($file); // 讀取檔案內容,自動換行
}
fclose($file);
?>
逐字元讀取檔案
fgetc() 函式用於從檔案中逐字元地讀取檔案。
註釋:在呼叫該函式之後,檔案指標會移動到下一個字元。
<?php
$file=fopen("text.txt","r");
while (!feof($file))
{
echo fgetc($file);
}
fclose($file);
?>
4.3.3 寫操作
注意 : 想要向檔案中寫入內容,必須先指定模式為w
<?php
$filename = 'test.txt';
$fp= fopen($filename, "w");
$len = fwrite($fp, '我是一隻來自南方的狼,卻在北方凍成了狗');
fclose($fp);
print $len .'位元組被寫入了\n';
?>
// 程式碼說明:
// 不論有沒有新建都會開啟檔案重新寫入
// 原有的檔案內容會被覆蓋掉
// 檔案不存在會建立
4.3.4 關閉檔案
因為計算機不會像人類那麼聰明,你不告訴他關閉檔案,它是不會自己關閉檔案的,所以當你開啟檔案,然後操作
完成後 ,一定要注意要關閉檔案。
<?php
$fp = fopen('test.txt','w');
fwrite($fp,'晚上吃什麼?');
fclose($fp);
?>
4.4 php 建立臨時檔案
我們之前建立的檔案都是永久檔案,而建立臨時檔案在我們平時的專案開發中也非常有用,建立臨時檔案的好處:
檔案操作完成後即刪除,不需要去維護這個檔案的刪除狀態。
<?php
//建立了一個臨時檔案
$handle = tmpfile();
//向裡面寫入了資料
$numbytes = fwrite($handle, '寫入臨時檔案');
//關閉臨時檔案,檔案即被刪除
fclose($handle);
echo '向臨時檔案中寫入了'.$numbytes . '個位元組';
?>
4.5 其他檔案操作
4.5.1 重新命名檔案
rename($舊名,$新名)
功能:這個函式返回一個bool值,將舊的名字改為新的名字。
<?php
//舊檔名
$filename = 'test.txt';
//新檔名
$filename2 = 'new_test.txt';
//重名名檔案
rename($filename, $filename2);
?>
4.5.2 複製檔案
複製檔案,就相當於是克隆技術,將一個原來的東西再克隆成一個新的東西,兩個長得一模一樣。
copy(原始檔,目標檔案)
功能:將指定路徑的原始檔,複製一份到目標檔案的位置。
<?php
//舊檔案
$filename = 'demo.txt';
//新檔案
$filename2 = 'demo_copy.txt';
//複製檔案
copy($filename, $filename2);
?>
說明:會通過上面的例子,發現多出來了一個檔案。
4.5.3 刪除檔案
刪除檔案就是將指定路徑的一個檔案刪除,不過這個刪除是直接刪除。使用的是windows電腦,你在回收站看不
到這個檔案,你只會發現這個檔案被刪除了。
unlink(指定路徑的檔案)
返回一個bool值
<?php
$filename = 'test.txt';
if (unlink($filename)) {
echo "刪除檔案成功 $filename!\n";
} else {
echo "刪除 $filename 失敗!\n";
}
?>
4.5.4 檢測檔案屬性函式
常用檔案屬性函式:
序號 | 函式資訊 | 說明 |
---|---|---|
1 | file_exists( $指定檔名或者檔案路徑) | 檔案是否存在。 |
2 | is_readable ( $指定檔名或者檔案路徑) | 檔案是否可讀 |
3 | is_writeable ( $指定檔名或者檔案路徑) | 檔案是否可寫 |
4 | is_executable ( $指定檔名或者檔案路徑) | 檔案是否可執行 |
5 | is_file ( $指定檔名或者檔案路徑) | 是否是檔案 |
6 | is_dir ( $指定檔名或者檔案路徑) | 是否是目錄 |
7 | void clearstatcache ( void ) | 清楚檔案的狀態快取 |
<?php
$filename = 'test.txt';
echo var_dump(file_exists($filename)) // 返回bool值
?>
4.6 目錄處理函式
php 目錄處理函式處理資料夾的基本思想如下:
-
讀取某個路徑的時候判斷是否是資料夾
-
是資料夾的話,開啟指定資料夾,返回檔案目錄的資源變數
-
使用readdir讀取一次目錄中的檔案,目錄指標向後偏移一次
-
使用readdir讀取到最後,沒有可讀的檔案返回false
-
關閉檔案目錄
我們來學習一下常用函式
序號 | 函式資訊 | 說明 |
---|---|---|
1 | opendir | 開啟資料夾,返回操作資源 |
2 | readdir | 讀取資料夾資源 |
3 | is_dir | 判斷是否是資料夾 |
4 | closedir | 關閉資料夾操作資源 |
5 | filetype | 顯示是資料夾還是檔案,檔案顯示file,資料夾顯示dir |
<?php
//設定開啟的目錄是D盤
$dir = "d:/";
//判斷是否是資料夾,是資料夾
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
//讀取到最後返回false,停止迴圈
while (($file = readdir($dh)) !== false) {
echo "檔名為: $file : 檔案的型別是: " . filetype($dir . $file) . "<br />";
}
closedir($dh);
}
}
?>
序號 | 函式 | 說明 |
---|---|---|
1 | pathinfo | 返回檔案的各個組成部分 |
2 | basename | 返回檔名 |
3 | dirname | 檔案目錄部份 |
<?php
$path_parts = pathinfo('d:/www/index.php');
echo '檔案目錄名:'.$path_parts['dirname']."<br />";
echo '檔案全名:'.$path_parts['basename']."<br />";
echo '副檔名:'.$path_parts['extension']."<br />";
echo '不包含擴充套件的檔名:'.$path_parts['filename']."<br />";
?>
4.7 php實現檔案留言本
index.php
<?php
//設定時區
date_default_timezone_set('PRC');
//讀了內容
@$string = file_get_contents('message.txt');
//如果$string 不為空的時候執行,也就是message.txt中有留言資料
if (!empty($string)) {
//每一段留言有一個分格符,但是最後多出了一個&^。因此,我們要將&^刪掉
$string = rtrim($string, '&^');
//以&^切成陣列
$arr = explode('&^', $string);
//將留言內容讀取
foreach ($arr as $value) {
//將使用者名稱和內容分開
list($username, $content, $time) = explode('$#', $value);
echo '使用者名稱為<font color="gree">' . $username . '</font>內容為<font color="red">' . $content . '</font>時間為' . date('Y-m-d H:i:s', $time);
echo '<hr />';
}
}
?>
<h1>基於檔案的留言本演示</h1>
<form action="write.php" method="post">
使用者名稱:<input type="text" name="username" /><br />
留言內容:<textarea name="content"></textarea><br />
<input type="submit" value="提交" />
</form>
write.php
<?php
//追加方式開啟檔案
$fp=fopen('message.txt','a');
//設定時間
$time=time();
//得到使用者名稱
$username=trim($_POST['username']);
//得到內容
$content=trim($_POST['content']);
//組合寫入的字串:內容和使用者之間分開,使用$#
//行與行之間分開,使用&^
$string=$username.'$#'.$content.'$#'.$time.'&^';
//寫入檔案
fwrite($fp,$string);
//關閉檔案
fclose($fp);
header('location:index.php');
?>