PHP文件處理及高級應用

PHP文件處理—打開/關閉文件

一:打開文件php

對文件進行操做的時候,咱們首先要作的就是打開文件,這是進行數據存取的第一步。在PHP中使用 fopen()函數打開文件,fopen()函數的語法以下:html

resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )

參數 filename 是要打開包含路徑的文件名,能夠使相對路徑,也能夠是絕對路徑。若是沒有任何前綴側表示打開的事本地文件,參數 mode 是打開文件的方式,能夠取值以下:數組

 

 

二:關閉文件服務器

對文件的操做結束後應該關閉這個文件,不然可能會引發錯誤。在 PHP 中使用 fclose()函數關閉文件,該函數的語法格式以下;函數

bool fclose ( resource $handle )

具體看下面的示例代碼:url

<?php

$f_open = fopen('./index_ok.php','rb');
...
fclose($f_open);

 

PHP文件處理—如何讀取文件(一行,整個文件)

從文件中讀取數據spa

從文件中讀取數據,能夠讀取一個字符、一行字符串或者是整個文件,還能夠讀取指定長度的字串。3d

1.讀取整個文件:readfile()、flie()以及file_get_contents()三個函數。指針

readfile()函數code

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

相關文章
相關標籤/搜索