【php学习笔记】文件系统---制作备忘录和修改配置文件
注:最后有面試挑戰,看看自己掌握了嗎
文章目錄
- 文件系統
- 讀取文件
- file_get_contents($filename);
- fopen、fread、fclose操作讀取文件
- 創建和修改文件內容
- 創建臨時文件
- 移動、拷貝和刪除文件
- 重命名文件
- 復制文件
- 刪除文件
- 檢測文件屬性函數
- 文件鎖
- 檢測文件或目錄是否有寫入或者讀取權限
- 文件的時間函數
- 文件常用函數和常量
- 文件指針操作函數
- 文件鎖機制
- 文件鎖的用途:
- 目錄處理函數
- 文件權限設置
- 文件路徑函數
- dirname
- parse_url
- http_build_query
- http_build_url()
- php實現文件留言本
- php實現 修改配置文件的實例
🍃博主昵稱:一拳必勝客
🌸博主寄語:歡迎點贊收藏關注哦,一起成為朋友一起成長;
特別鳴謝:木芯工作室 、Ivan from Russia
文件系統
我們會點鼠標右鍵刪除文件、會control+c(或右鍵)復制、粘貼文件,會新建一些文件,檢測這個文件是不是只讀文件。
在電腦里面進行的這些操作,在代碼里面如果能操作就好了。
因為,如果有了這些操作。我們能做很多事情了:
可不可以寫入修改配置文件?
是不是可以做PHP安裝的時候檢測文件的權限
是不是可以做生成Html文件等等很多不同的操作
… 其他太多太多的地方用到了文件操作。
學習文件處理本質上面就是學習文件處理的函數。再結合之前寫的代碼,完善自己的業務處理能力。
讀取文件
<?php//linux類的讀了方式readfile("/home/paul/test.txt");//windows類的讀取方式readfile("c:\\boot.ini"); ?>注意:上面的代碼中windows的斜線是\斜線,可能會轉義掉一些字符。因此,我們寫的時候寫上兩個斜線。
file_get_contents($filename);
<?php$filename = 'NoAlike.txt';$filestring = file_get_contents($filename);echo $filestring; ?>fopen、fread、fclose操作讀取文件
上面file_get_contents打開文件的方式簡單、粗暴。下面的
resource fopen ( string $文件名, string 模式)string fread ( resource $操作資源, int 讀取長度)bool fclose ( resource $操作資源 )通過上面的函數我們來講解資源類型的通常操作方式:
1.打開資源
2.使用相關函數進行操作
3.關閉資源
fopen函數 fopen函數的功能是打開文件,參數主要有兩個:
1.文件打開的路徑
2.打開文件的模式
返回類型是一個資源類型,我們第一次遇到了之前基礎類型的時候講到的資源類型。
資源類型需要其他的函數來操作這個資源。所有的資源有打開就要有關閉。
fread函數 函數的功能的功能是讀取打開的文件資源。讀取指定長度的文件資源,讀取一部份向后移動一部份。至到文件結尾。
fclose函數 fclose函數的功能是關閉資源。資源有打開就有關閉。
了解完函數,后兩個函數比較簡單。而fopen函數的模式到底是什么,fopen的模式有下面幾個,我們來講一下fopen的模式:
模式 說明 r 只讀方式打開,將文件指針指向文件頭。 r+ 讀寫方式打開,將文件指針指向文件頭。 w 寫入方式打開,將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創建 w+ 讀寫方式打開,將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創建 a 寫入方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建 a+ 讀寫方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建之 x 創建并以寫入方式打開,將文件指針指向文件頭。如果文件已存在,則 fopen() 調用失敗并返回 FALSE,并生成一條 E_WARNING 級別的錯誤信息。如果文件不存在則嘗試創建 x+ 創建并以讀寫方式打開,將文件指針指向文件頭。如果文件已存在,則 fopen() 調用失敗并返回 FALSE,并生成一條 E_WARNING 級別的錯誤信息。如果文件不存在則嘗試創建接下來,我們只來學習r模式,下結課我們在將寫入的時候再來講講其他幾個模式。
我們先會讀取文件了,才能很好的掌握寫入文件。
1.打開文件
<?php//你可以創建一個NoAlike.txt,以只讀模式打開$fp = fopen('NoAlike.txt', "r");//var_dump()操作一下$fp看看效果,輸出的是不是只有類型提示的是resourcevar_dump($fp); ?>2.讀取文件
<?php$fp = fopen('NoAlike.txt', "r");//打開一個文件類型后,讀取長度$contents = fread($fp, 1024); ?>3.關閉文件
<?php$fp = fopen($filename, 'r');$contents = fread($fp, 1024);fclose($fp);echo $contents; ?>其他注意事項:
模式 說明
t windows下將\n轉為\r\n b 二進制打開模式說明:
實驗無法讓肉眼看到這個實驗效果。大家記住有這個特點即可。
Windows 下提供了一個文本轉換標記(‘t’)可以透明地將 \n 轉換為 \r\n。
與此對應還可以使用 ‘b’ 來強制使用二進制模式,這樣就不會轉換數據。要使用這些標記,要么用 ‘b’ 或者用 ‘t’ 作為 mode 參數的最后一個字符。
創建和修改文件內容
上一節當中我們學習了讀取文件特別好掌握。這一節當中我們來講解的是寫入文件。
file_put_contents寫入文件
我們先來學習第一種寫入文件的方式:
int file_put_contents ( string $文件路徑, string $寫入數據])功能:向指定的文件當中寫入一個字符串,如果文件不存在則創建文件。返回的是寫入的字節長度
創建和修改文件內容 上一節當中我們學習了讀取文件特別好掌握。這一節當中我們來講解的是寫入文件。file_put_contents寫入文件我們先來學習第一種寫入文件的方式:int file_put_contents ( string $文件路徑, string $寫入數據])功能:向指定的文件當中寫入一個字符串,如果文件不存在則創建文件。返回的是寫入的字節長度<?php$data = "在PHP中文網學好PHP,妹子票子不再話下!";$numbytes = file_put_contents('binggege.txt', $data);if($numbytes){echo '寫入成功,我們讀取看看結果試試:';echo file_get_contents('binggege.txt');}else{echo '寫入失敗或者沒有權限,注意檢查';} ?> 我們發現寫入文件也挺簡單的。按照這個函數的格式,指定文件,寫入字符串數據就可以了。fwrite配合fopen進行寫入操作int fwrite ( resource $文件資源變量, string $寫入的字符串 [, int 長度])注:fwrite的別名函數是fputs我們上節課試了r模式,只道是讀取的時候使用,接下來我們用fwrite加上fopen中的w,寫入模式來進行文件寫入。我們來看一下特點:寫入方式打開,將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創建。注意:在下面的實驗中,你可以試試新建個test.txt文件向里面寫入內容。然后,可以試試把test.txt刪除。看看有什么提示。<?php$filename = 'test.txt';$fp= fopen($filename, "w");$len = fwrite($fp, '我是一只來自北方的狼,卻在南方凍成了狗');fclose($fp);print $len .'字節被寫入了\n'; ?> 總結: 1.不論有沒有新建都會打開文件重新寫入 2.原有的文件內容會被覆蓋掉 3.文件不存在會創建那我們來對比一下以下幾個模式的不同:模式 說明 r 只能讀不能使用fwrite寫 r+ 可操作讀、寫 w 只可以寫功能 w+ 即可讀又可以寫 我們來通過實驗證明一下:<?php$filename = 'test.txt';$fp= fopen($filename, "r+");$len = fwrite($fp, '我是一只來自南方的狼,一直在尋找心中的花姑娘');fclose($fp);print $len .'字節被寫入了\n'; ?> 實驗時可以把r后面的+號去掉。我們通過實驗,確實發現使用r模式,在文件存的時候可以進行寫入數據,只用r的話,寫入是不成功的。a模式和w模式的不同同樣是下面的這段代碼,我們改為a模式。<?php$filename = 'test.txt';$fp= fopen($filename, "a");$len = fwrite($fp,'讀大學迷茫了,PHP中文網學PHP給你希望');echo $len .'字節被寫入了\n'; ?> 打開網頁執行這段代碼,你會發現:每刷新一次,文件中就會多一段 :讀大學迷茫了,PHP中文網學PHP給你希望。總結:模式 總結 x 每次寫入會干掉原有文件的內容,文件不存在都會創建 a 每次寫入都會向文件的尾端追加內容 注:a+ 是增強的追加功能。可以讀取時也可以使用。x模式和w模式的不同這段代碼我們再實驗一次,改為x模式:<?php$filename = 'test.txt';$fp= fopen($filename, "x");$len = fwrite($fp,'讀大學迷茫了,PHP中文網學PHP給你希望');echo $len .'字節被寫入了\n'; ?> 我們會發現:1.文件存在的時候會報錯2.如果把$filename 改成其他的文件名,就可以了。但是,再次刷新的時候又報錯了3.x+ 是增強的x模式。讀取時也可以使用。 ?>我們發現寫入文件也挺簡單的。按照這個函數的格式,指定文件,寫入字符串數據就可以了。
fwrite配合fopen進行寫入操作
int fwrite ( resource $文件資源變量, string $寫入的字符串 [, int 長度]) 注:fwrite的別名函數是fputs我們上節課試了r模式,只道是讀取的時候使用,接下來我們用fwrite加上fopen中的w,寫入模式來進行文件寫入。
我們來看一下特點:
寫入方式打開,將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創建。
注意:在下面的實驗中,你可以試試新建個test.txt文件向里面寫入內容。然后,可以試試把test.txt刪除。看看有什么提示。
<?php$filename = 'test.txt';$fp= fopen($filename, "w");$len = fwrite($fp, '我是一只來自北方的狼,卻在南方凍成了狗');fclose($fp);print $len .'字節被寫入了\n'; ?>總結:
1.不論有沒有新建都會打開文件重新寫入
2.原有的文件內容會被覆蓋掉
3.文件不存在會創建
那我們來對比一下以下幾個模式的不同:
模式 說明 r 只能讀不能使用fwrite寫 r+ 可操作讀、寫 w 只可以寫功能 w+ 即可讀又可以寫 我們來通過實驗證明一下: <?php$filename = 'test.txt';$fp= fopen($filename, "r+");$len = fwrite($fp, '我是一只來自南方的狼,一直在尋找心中的花姑娘');fclose($fp);print $len .'字節被寫入了\n'; ?>實驗時可以把r后面的+號去掉。
我們通過實驗,確實發現使用r模式,在文件存的時候可以進行寫入數據,只用r的話,寫入是不成功的。
a模式和w模式的不同
同樣是下面的這段代碼,我們改為a模式。
<?php$filename = 'test.txt';$fp= fopen($filename, "a");$len = fwrite($fp,'讀大學迷茫了,PHP中文網學PHP給你希望');echo $len .'字節被寫入了\n'; ?>打開網頁執行這段代碼,你會發現:每刷新一次,文件中就會多一段
:讀大學迷茫了,PHP中文網學PHP給你希望。
總結:
模式 總結
**x 每次寫入會干掉原有文件的內容,**文件不存在都會創建 a 每次寫入都會向文件的尾端追加內容 注:a+ 是增強的追加功能。可以讀取時也可以使用。x模式和w模式的不同
這段代碼我們再實驗一次,改為x模式:
<?php$filename = 'test.txt';$fp= fopen($filename, "x");$len = fwrite($fp,'讀大學迷茫了,PHP中文網學PHP給你希望');echo $len .'字節被寫入了\n'; ?>我們會發現:
1.文件存在的時候會報錯2.如果把$filename 改成其他的文件名,就可以了。但是,再次刷新的時候又報錯了3.x+ 是增強的x模式。讀取時也可以使用。創建臨時文件
我們之前創建的文件都是永久文件。
而創建臨時文件在我們平時的項目開發中也非常有用。創建臨時文件的幾個好處:
文完后即刪除
不需要去維護這個文件的刪除狀態
例如:我需要把A的文件內容轉存B里面,把B的文件內容轉存到C里面。
就跟現實生活中一樣,我可以先用一個臨時的瓶子把B的水裝起來,然后把A的數據寫入到B里面。把臨時瓶子的水追加到C里面。
我們來學習一下這個函數:
resource tmpfile ( )功能:創建一個臨時文件,返回資源類型。關閉文件即被刪除。
<?php//創建了一個臨時文件$handle = tmpfile();//向里面寫入了數據$numbytes = fwrite($handle, '寫入臨時文件');//關閉臨時文件,文件即被刪除fclose($handle);echo '向臨時文件中寫入了'.$numbytes . '個字節'; ?>移動、拷貝和刪除文件
我們日常在處理文件的時候,可以刪除文件、重命名文件也可以也可復制文件。
那這這一節,我們就來講解我們日常生活當中最常用到的一些操作。
我們先來說重命名,重命名的函數是:
重命名文件
bool rename($舊名,$新名);這個函數返回一個bool值,將舊的名字改為新的名字。
<?php//舊文件名$filename = 'test.txt';//新文件名$filename2 = $filename . '.old';//復制文件rename($filename, $filename2); ?>我們打開目錄,我們可以看看效果,你會發現把指定的文件,復制了一份到了目標路徑。
復制文件
復制文件,就相當于是克隆技術,將一個原來的東西再克隆成一個新的東西。兩個長得一模一樣。
bool copy(源文件,目標文件)功能**:將指定路徑的源文件,復制一份到目標文件的位置。**
我們來通過實驗和代碼來玩玩:
<?php//舊文件名$filename = 'copy.txt';//新文件名$filename2 = $filename . '_new';//修改名字。copy($filename, $filename2); ?>總結:
你會通過上面的例子,發現多出來了一個文件。
刪除文件
刪除文件就是將指定路徑的一個文件刪除,不過這個刪除是直接刪除。使用的是windows電腦,你在回收站看不到這個文件。
你只會發現,這個文件消失了。
bool unlink(指定路徑的文件)
<?php$filename = 'test.txt';if (unlink($filename)) {echo "刪除文件成功 $filename!\n";} else {echo "刪除 $filename 失敗!\n";} ?>檢測文件屬性函數
有些同學特別好奇,**檢測文件屬性用在什么地方。**檢測文件屬性能用到的地方太多了。
我們來舉例子:
1.我們在做軟件安裝的時候,大家會發現如果文件存在了,就跳轉到了其他的地方。
2.如果在安裝的過程當中,某些文件沒有寫入權限,就不讓進行安裝。
我們來舉一個國內非常出名的軟件,discuz的安裝過程截圖給大家看看:
上面的例子,就是典型的文件檢測的用法。
我們來學習一下下面的**一批函數。**然后,我們來通過一個例子進行學習。
bool file_exists ( $指定文件名或者文件路徑) 功能:文件是否存在。bool is_readable ( $指定文件名或者文件路徑) 功能:文件是否可讀bool is_writeable ( $指定文件名或者文件路徑) 功能:文件是否可寫bool is_executable ( $指定文件名或者文件路徑) 功能:文件是否可執行bool is_file ( $指定文件名或者文件路徑) 功能:是否是文件bool is_dir ( $指定文件名或者文件路徑) 功能:是否是目錄void clearstatcache ( void ) 功能:清楚文件的狀態緩存上面的功能一看就清楚了。那實驗,我們就來寫這個最開始我們舉的這個例子。
文件鎖
我們來講**第一個例子,文件鎖。**如果已經安裝了,存在安裝鎖就提示已安裝,否則就繼續安裝。
我們假設安裝界面的網址是:install.php,安裝的鎖文件是install.lock。我們就可以檢測install.lock文件是否存在。
<?phpif(file_exists('install.lock')){echo '已安裝,請不要再次進行安裝';exit;} ?>檢測文件或目錄是否有寫入或者讀取權限
我們接下來做一個文件安裝檢測的實驗來檢測文件或目錄是否有寫入或者讀取權限。如果沒有則不能進行安裝。
處理這件事情的思路如下:
1.定義一批需要檢測權限的數組2.可以檢測是文件夾還是文件3.做一個標置位變量,如果標置位變量一旦為false則不顯示下一步的安裝 <?php //可以定義一批文件是否存在 $files = ['config.php','img/','uploads/', ]; //定義標志位變量 $flag = true; foreach($files as $v){echo $v;//判斷是文件還是文件夾if(is_file($v)){echo '是一個文件 ';}else if(is_dir($v)){echo '是一個文件夾 ';}if(is_readable($v)){echo ' 可讀';}else{echo '<font color="red">不可讀</font>';}if(is_writeable($v)){echo '可寫';}else{echo '<font color="red">不可寫</font>';}echo '<br />'; }if($flag){echo '<a href="step1">下一步</a>';}else{echo '不能進行安裝'; } ?>通過上面的例子,我們就做到了。實現PHP某個軟件安裝過程當中的安裝檢測。
也就是我們上面思路的實現。
文件的時間函數
函數 功能說明
filectime 文件創建時間 filemtime 文件修改時間 fileatime 文件上次訪問時間 <?php$filename = 'demo.txt';if (file_exists($filename)) {echo '$filename文件的上次訪問時間是:' . date("Y-m-d H:i:s", fileatime($filename));echo '$filename文件的創建時間是: ' . date("Y-m-d H:i:s", filectime($filename));echo '$filename文件的修改時間是: ' . date("Y-m-d H:i:s", filemtime($filename));} ?>文件常用函數和常量
文件操作的常量
下面這一個常量是最常用的。是文件目錄的分割符的常量。
我們來看看格式:
平臺 分割符 windows \ 類unix /windows 的路徑格式為 d:\xxx\xxx 注意:windows支持 d:/xxx/xxx
linux 的路徑格式為 /home/xxx/xxx 注意:如果\home\xxx\xxx 在linux上是錯誤的
所以當你開啟轉義之類的話,轉義字符 \ 用一起的話 d:\xxx\xxx 是一樣的。判斷時候有兩個 \ 有的話 再轉成一個\ 再把 \ 替換成 /當路徑分割,這樣在linux上或者windos上的路徑就能保持統一了。
我們會使用到一個常量:
DIRECTORY_SEPARATOR我們來寫一個小的實例,定義當前文件所在的路徑:
由于FILE是PHP的預定義常量,所以沒辦法改變,如果需要讓FILE也自適應操作系統。
那么就是不要用FILE,可以用自定義的常量,并且把FILE處理一下,如下:
文件指針操作函數
rewind ( resource handle)功能:指針回到開始處
fseek ( resource handle, int offset [, int from_where])功能:文件指針向后移動指定字符
我們在之前的讀取當中我們發現fread讀取指定長度的數據。讀取指定長度的內容,下次再讀取的時候從原位置開始再接著向后讀取。
文件鎖機制
文件鎖機制一般在單一打開文件的時候根本看不到效果。這一塊的學習有一點點抽象。
大家不要去思考怎么實現的呀?
為什么看不到效果呀?
答:因為電腦的操作太快了,基本上是毫秒級的。所以這個實驗其實是看不到效果的。
這一章了解文件鎖的基本概念即可****,熟悉文件鎖函數和鎖機制。
文件鎖的用途:
若一個人在寫入一個文件,另外一個人同時也打個了這個文件進行寫入文件。
這情況下,如果遇到一定的碰撞概率的話,不知道到底誰的操作為準。
因此,這個時候我們引入鎖機制。
若用戶A在寫入或者讀取這個文件的時候,將文件加上共享鎖。我可以讀,其他人也可以讀。
但是,我如果這與的時候。我使用獨占鎖。這個文件歸我了,你們都別動,除非我將文件鎖進行釋放。
注意:不論加上了文件鎖后要注意釋放。
我們來看看這個函數:
bool flock ( resource $handle , int $operation)功能:輕便的咨詢文件鎖定
我們來看看鎖類型:
鎖類型 說明
LOCK_SH 取得共享鎖定(讀取的程序) LOCK_EX 取得獨占鎖定(寫入的程序 LOCK_UN 釋放鎖定(無論共享或獨占)我們接下來把demo.txt加上一個獨占鎖,進行寫入操作。
<?php$fp = fopen("demo.txt", "r+");// 進行排它型鎖定 if (flock($fp, LOCK_EX)) { fwrite($fp, "文件這個時候被我獨占了喲\n");// 釋放鎖定flock($fp, LOCK_UN); } else {echo "鎖失敗,可能有人在操作,這個時候不能將文件上鎖"; }fclose($fp);?>說明:
1.上例中我為了寫入文件,把文件加上了獨占鎖。
2.如果我操作完成,寫入完成后,解除掉了獨占鎖。
3.如果是在讀取文件的時候,大家可加按照同樣的處理思路加上共享鎖。
目錄處理函數
之前我們處理的全都是文件,那目錄和文件夾怎么處理呢?
我們就來學習目錄或者稱為文件夾的處理相關函數。
處理文件夾的基本思想如下:
1.讀取某個路徑的時候判斷是否是文件夾2.是文件夾的話,打開指定文件夾,返回文件目錄的資源變量3.使用readdir讀取一次目錄中的文件,目錄指針向后偏移一次4.使用readdir讀取到最后,沒有可讀的文件返回false5.關閉文件目錄我們來學習一比常用函數:
函數名 功能 opendir 打開文件夾,返回操作資源 readdir 讀取文件夾資源 is_dir 判斷是否是文件夾 closedir 關閉文件夾操作資源 filetype 顯示是文件夾還是文件,文件顯示file,文件夾顯示dir <?php //設置打開的目錄是D盤 $dir = "d:/";//判斷是否是文件夾,是文件夾 if (is_dir($dir)) {if ($dh = opendir($dir)) {//讀取一次向后移動一次文件夾指針echo readdir($dh).'<br />';echo readdir($dh).'<br />';echo readdir($dh).'<br />';echo readdir($dh).'<br />';//讀取到最后返回false//關閉文件夾資源closedir($dh);} } ?>即然是讀取一次向后移動一次,我們是不是可以
<?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);} } ?>文件權限設置
文件權限設置的函數在系統管理級別的軟件中很常用。例如:某個文件不準許guest組(來賓用戶)查看呀。
在企業管理中,某些用戶或者某些用戶文件只準讀取不準修改。這都是非常常用的功能。
注:
1.本章為了解章節。如果沒有學習過linux會有些吃力,可以跳過本章,了解有這個東西即可。2.在實際生產環節中用處較少。3.主要針對在linux下有過全面知識體系的同學可以重點學習。4.windows下面有些功能無法實現。 函數 功能說明 chmod 修改讀取模式 chgrp 修改用戶組 chown 修改權限上面的函數用法與linux的權限操作的用法一樣。
對于學過linux的同學來說學起來比較簡單。沒有學過的會有些吃力。
我只講一個例子,看看如何來修改權限:
chmod 主要是修改文件的的權限
<?php //修改linux 系統/var/wwwroot/某文件權限為755 chmod("/var/wwwroot/index.html", 755); chmod("/var/wwwroot/index.html", "u+rwx,go+rx"); chmod("/somedir/somefile", 0755); ?>文件路徑函數
我們經常會遇到處理文件路徑的情況。
例如:
1.文件后綴需要取出來2.路徑**需要取出名字不取目錄**3.只需要取出路徑名中的**目錄路徑**4.或者把網址中的各個部份進行解析取得獨立值5.甚至是自己組成一個url出來 ... ....很多地方都需要用路徑處理類的函數。
我們把常用的路徑處理函數為大家做了標注,大家對著這個路徑處理函數進行處理即可:
函數名 功能 pathinfo 返回文件的各個組成部份 basename 返回文件名 dirname 文件目錄部份 parse_url 網址拆解成各部份 http_build_query 生成url 中的query字符串 http_build_url 生成一個url pathinfo array pathinfo ( string $路徑)功能:傳入文件路徑返回文件的各個組成部份
我們用具體的示例來用一下:
結果如下:
文件目錄名:d:/www 文件全名:lib.inc.php 文件擴展名:php 不包含擴展的文件名:lib.inc basename string basename ( string $路徑[, string $suffix ])功能:傳入路徑返回文件名
第一個參數傳入路徑。
第二個參數,指定我文件名到了指定字符停止。
執行結果如下
1: index 2: index.php 3: passwddirname
dirname(string $路徑)功能:返回文件路徑的文件目錄部份
<?php dirname(__FILE__); ?>結論:你可以執行看看是不是返回了文件的目錄部份。
parse_url
mixed parse_url ( string $路徑 )功能:將網址拆解成各個部份
<?php $url = 'http://username:password@hostname:9090/path?arg=value#anchor';var_dump(parse_url($url));?>結果如下:
array(8) { ["scheme"]=> string(4) "http" ["host"]=> string(8) "hostname" ["port"]=> int(9090) ["user"]=> string(8) "username" ["pass"]=> string(8) "password" ["path"]=> string(5) "/path" ["query"]=> string(9) "arg=value" ["fragment"]=> string(6) "anchor" }http_build_query
string http_build_query ( mixed $需要處理的數據)功能:生成url 中的query字符串
<?php //定義一個關聯數組 $data = ['username'=>'php','area'=>'hubei'];//生成query內容 echo http_build_query($data); ?>結果如下:
username=php&area=hubeihttp_build_url()
功能: 生成一個url
注:
PHP_EOL 常量 在 windows平臺相當于 echo "\r\n"; 在unix\linux平臺相當于 echo "\n"; 在mac平臺相當于 echo "\r";php實現文件留言本
我們講完了這么多關于文件處理的系統,可是我們連一個最基本的小東西都寫不出來。
從這一節開始,大家會發現大家能夠寫越來越多的東西了。
接下來我們我們來看看演示效果:
在下面一個界面中寫入留言內容的表單界面:
存在留言后的展示界面:
我們來看一下文件結構:
index.php ---展示輸入框和留言內容 write.php ---向message.txt寫入數據 message.txt ---存入聊天內容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>看了剛剛的展示內容,我們知道文件存儲時:
1.段與段之間進行了分割2.內容與用戶之前用一個特殊的符號進行了分割下面我們來寫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');?>php實現 修改配置文件的實例
我們來看看國內知名論壇discuz的安裝界面:
在這兒安裝,它怎么就修改了config.inc.php文件呢?
下面我們來通過幾個簡單的技術來揭開它所謂的神秘面紗!
文件規劃:
1.index.php -- 展示修改界面2.edit.php -- 修改功能代碼3.config.php -- 實際的修改部份index.php 展示修改界面。將config.php中的配置項展示出來。展示到表單中:
<?phpinclude 'config.php';?><form action="edit.php" method="post"> <input type="text" name="DB_HOST" value="<?php echo DB_HOST;?>" /><br /> <input type="text" name="DB_USER" value="<?php echo DB_USER;?>" /><br /> <input type="text" name="DB_PWD" value="<?php echo DB_PWD;?>" /><br /> <input type="text" name="DB_NAME" value="<?php echo DB_NAME;?>" /><br /><input type="submit" value="修改" /></form>2.edit.php 讀取config.php文件,將這個文件視為字符串。我然后使用正則表達示匹配來修改內容。
<?php$string=file_get_contents('config.php');//DB_HOST localhostforeach($_POST as $key=>$val){//定義正則來查找內容,這里面的key為form表單里面的name$yx="/define\('$key','.*?'\);/";//將內容匹配成對應的key和修改的值$re="define('$key','$val');";//替換內容$string=preg_replace($yx,$re,$string); }//寫入成功 file_put_contents('config.php',$string);echo '修改成功';?>config.php 實際存儲配置文件的部份,存儲了真實的config.php文件內容:
<?phpdefine('DB_HOST','localhost');define('DB_USER','root');define('DB_PWD','root');define('DB_NAME','neirong');?>你是不是發現,這些其實并沒有想象中的那么難。結合一下正則表達示和文件的知識就做到了!
總結
以上是生活随笔為你收集整理的【php学习笔记】文件系统---制作备忘录和修改配置文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ansible awx基础配置(容器化部
- 下一篇: TCP/IP(3)——IPV6