PHP檔案處理—打開/關閉檔案
一:打開檔案
對檔案進行操作的時候,我們首先要做的就是打開檔案,這是進行資料存取的第一步,在PHP中使用 fopen()函式打開檔案,fopen()函式的語法如下:
resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )
引數 filename 是要打開包含路徑的檔案名,可以使相對路徑,也可以是絕對路徑,如果沒有任何前綴側表示打開的事本地檔案,引數 mode 是打開檔案的方式,可以取值如下:

二:關閉檔案
對檔案的操作結束后應該關閉這個檔案,否則可能會引起錯誤,在 PHP 中使用 fclose()函式關閉檔案,該函式的語法格式如下;
bool fclose ( resource $handle )
具體看下面的示例代碼:
<?php $f_open = fopen('./index_ok.php','rb'); ... fclose($f_open);
PHP檔案處理—如何讀取檔案(一行,整個檔案)
從檔案中讀取資料
從檔案中讀取資料,可以讀取一個字符、一行字串或者是整個檔案,還可以讀取指定長度的字串,
1.讀取整個檔案:readfile()、flie()以及file_get_contents()三個函式,
readfile()函式
readfile()函式用于讀入一個檔案并且將其寫入到輸出緩沖,如果出現錯誤則回傳 false,
使用 readfile()函式,不需要打開檔案和關閉檔案,也不需要 echo ,print等輸出陳述句,直接先寫出檔案路徑就可以了,
flie()函式
flie()函式也可以讀取整個檔案的內容,只是 file()函式將檔案內容按行存放到陣列中,包括換行符在內,如果讀取失敗則回傳 false,
file_get_contents()函式
file_get_contents()函式將檔案的內容(fliename)讀入到一個字串中,如果沒有 offset 和 maxlen引數 ,將從引數offset所指定的位置開始讀取長度為 maxlen的一個字串,如果讀取失敗那么就會回傳false,
下面的實體就是使用上面的三個函式讀取檔案內容,具體代碼如下:
<html>
<body>
<table border="1">
<tr>
<td>readfile()</td>
<td><?php readfile('text.txt'); ?></td>
</tr>
<tr>
<td>file()</td>
<td><?php
$f_arr = file('text.txt');
foreach($f_arr as $cont){
echo $cont.'<br>';
}
?></td>
</tr>
<tr>
<td>file()</td>
<td><?php
$f_chr = file_get_contents('text.txt');
echo $f_chr;
?></td>
</tr>
</table>
</body>
</html>
輸出結果為:

2.讀取一行資料:fgets()函式和fgetss()函式
(1) fgets()函式
fgets()函式用于一次讀取一行資料,
(2)fgetss()函式
fgetss()函式是fgets()函式的變體,用于讀取一行資料,同事,fgetss()函式會過濾掉被讀取內容中的 HTML 和 PHP標記,
該函式能夠從讀取的檔案中過濾掉任何 html 和 PHP 標記,可以使用引數來控制哪些標記不被過濾掉,
<html>
<body>
<table border="1">
<tr>
<td>fgets()</td>
<td><?php
$f_open = fopen('text.txt','rb');
while(!feof($f_open)){
echo fgets($f_open);
}
fclose($f_open);
?></td>
</tr>
<tr>
<td>fgetss()</td>
<td><?php
$f_open = fopen('text.txt','rb');
while(!feof($f_open)){
echo fgetss($f_open);
}
fclose($f_open);
?></td>
</tr>
</table>
</body>
</html>
輸出結果為:

PHP檔案處理—讀取檔案(一個字符,字串)
一:讀取一個字符:fgetc()函式
下面的實體用 fgetc()函式逐個字符讀取檔案里的內容,并且輸出,具體示例代碼如下:
<?php $fopen = fopen('text.txt','rb');//創建檔案資源 while(false !== ($chr = fgetc($fopen))){ echo $chr; } fclose($fopen);
二:讀取指定長度的字串:fread()函式
<?php $filename = 'text.txt'; $fopen = fopen($filename,'rb');//創建檔案資源 echo fread($fopen,6); echo '<p>'; echo fread($fopen,filesize($filename));
PHP檔案處理—寫入檔案及操作檔案
一:將資料寫入檔案
寫入資料也是 PHP 中常用的檔案操作,在PHP中使用 fweite() 和file_put_contents()函式向檔案中寫入資料,
1.fwrite()也稱之為fputs(),他們兩個的用法是相同的,
2.file_put_contents()函式是PHP5新增的函式
使用file_put_contents()函式和依次呼叫 fopen(),fwrite(),fclose()函式所實作的功能一樣,下面我們通過具體實體比較一下!
本實體首先使用 fwrite()函式向檔案寫入資料,在使用file_put_contents()函式寫入資料,具體示例代碼如下:
<?php $filename = 'text.txt'; $str = 'cyy you~'; $fopen = fopen($filename,'wb') or die('檔案不存在'); fwrite($fopen,$str); fclose($fopen); readfile($filename); $str2 = 'cyy2 you~'; file_put_contents($filename, $str2); readfile($filename);
輸出結果為:

二:操作檔案
PHP 除了可以對檔案內容進行讀寫,對檔案本身同樣也可以進行操作,如:復制,重命名,查看修改日期等,PHP 內置了大量的檔案操作函式,常用的檔案操作函式如下表:


注意:
在讀寫檔案時,除了file(),readfile()等少數幾個函式外,其他操作必須要先使用 fopen()函式打開檔案,最后用 fclose()函式關閉檔案,檔案的資訊函式(如:filesize,filemtime 等)則都不需要打開檔案,只要檔案存下就可以了!
PHP目錄處理—打開/關閉目錄
一:打開目錄
打開/關閉目錄和打開/關閉檔案類似,但是打開的檔案如果不存在,那么就會自動創建一個新的檔案,而打開的目錄如果不正確,那么就一定會報錯!PHP使用 opendir()函式來打開目錄
二:關閉目錄
關閉目錄使用 closedir()函式
下面的實體就是為打開和關閉目錄的流程代碼,具體示例代碼如下:
<?php $path = 'D:\phpstudy_pro\WWW\test\uploads'; if(is_dir($path)){ if($dir = opendir($path)){ echo $dir; }else{ echo '路徑錯誤'; exit(); } } closedir($dir);
結果:

PHP目錄處理—瀏覽目錄以及操作目錄
—:瀏覽目錄
在 PHP 瀏覽目錄中的檔案,我們使用 scandir()函式
該函式回傳一個陣列,包含 directory 中的所有檔案和目錄,引數 sorting_order 指定排序順序,默認按字母升序排序,如果添加了該引數,那么就會變為降序排序,
下面的實體將查看一個目錄下的所有檔案,具體示例代碼如下:
<?php $path = 'D:\phpstudy_pro\WWW\test'; if(is_dir($path)){ $dir = scandir($path); foreach($dir as $value){ echo $value.'<br>'; } }else{ echo '路徑錯誤'; } closedir($dir);
運行結果如下:

二:操作目錄
目錄是一種特殊的檔案,也就是說,對檔案的操作函式(如:重命名)多數同樣適用于目錄,但是還有一些特殊的函式只是專門針對目錄的,下面串列就是一些常用的目錄操作函式:

PHP檔案處理的高級應用—遠程檔案訪問及鎖定檔案
一:遠程檔案的訪問
PHP 支持URL格式的檔案呼叫,只要在 php.ini中設定一下就可以了,php.ini 中找到allow_url_fopen,將該選項設為ON,重啟服務器后就可以使用 HTTP或者FTP的URL格式了
<?php $filename = 'http://localhost/test/text.txt'; readfile($filename);
二:鎖定檔案
在向一個文本檔案寫入內容的時候,需要先鎖定該檔案,以防止其他用戶同事修改此檔案的內容,在PHP中鎖定檔案的函式為 flock()

在下面的實體中 使用 flock()函式鎖定檔案,然后在寫入資料,最后解除鎖定,關閉檔案,具體示例代碼如下:
<?php $filename = 'text.txt'; $fd = fopen($filename,'w'); //鎖定檔案,獨占共享 flock($fd,LOCK_EX); fwrite($fd,'new cyy'); //解除檔案鎖定 flock($fd,LOCK_UN); fclose($fd); readfile($filename);
說明:
在向檔案寫入資料的時候,使用 W 或者 w+ 模式打開檔案,這個時候如果使用了 LOCK_EX,那么同一時間訪問此檔案的其他用戶就無法獲得檔案的大小,不能進行操作!
PHP檔案處理的高級應用—檔案指標
一:rewind()函式
該函式將檔案 handle 的指標設定為檔案流的開頭
注意:
如果將檔案與追加(“a”)模式打開,那么寫入檔案的任何資料總是會被附加在檔案已有的內容末尾,不論檔案指標的位置在何處!
二:fseek()函式
fseek()函式實作檔案指標的定位
三:feof()函式
該函式判斷檔案指標是否在檔案尾
四:ftell()函式
ftell()函式回傳當前指標的位置
下面就是使用上面 4個指標函式來輸出檔案中的內容,示例代碼如下:
<?php $filename = 'text.txt'; if(is_file($filename)){ echo '檔案總位元組數:'.filesize($fopen).'<br>'; $fopen = fopen($filename,'rb'); echo '指標初始位置:'.ftell($fopen).'<br>'; fseek($fopen,14); echo '此時指標位置:'.ftell($fopen).'<br>'; echo '當前指標之后的內容:'.fgets($fopen).'<br>'; if(feof($fopen)){ rewind($fopen); echo '此時指標位置:'.ftell($fopen).'<br>'; fclose($fopen); } } else{ echo '檔案不存在'; }
輸出結果為:

歡迎QQ交流討論:965794175
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/33665.html
標籤:PHP
上一篇:PHP八種資料型別+使用實體
