php檔案怎樣可以讀取卻不能寫入資料

2021-09-15 19:00:06

php檔案實現讀取又不能寫入資料的方法:1、使用「fopen('檔案路徑', 'r')」語句以唯讀的方式來開啟檔案;2、使用fgetc()、fgets()、fgetss()等函數讀取資料即可。

本教學操作環境:windows7系統、PHP7.1版,DELL G3電腦

在PHP中,可以使用fopen() 函數以唯讀的方式來開啟檔案來實現讀取又不能寫入資料。

PHP 中可以使用 fopen() 函數來開啟檔案或者 URL。如果開啟成功,則返回檔案指標資源;如果開啟失敗則返回 FALSE,該函數的語法格式如下所示:

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

引數說明如下:

  • $filename:為待開啟檔案的 URL,這個 URL 可以是檔案所在伺服器中的絕對路徑,也可以是相對路徑或者網路資源中的檔案;

  • $mode:用來設定檔案的開啟方式(檔案模式)。具體的值可以從下表中選取:

mode說明
r以唯讀方式開啟,將檔案指標指向檔案頭。
r+以讀寫方式開啟,將檔案指標指向檔案頭。
w以寫入方式開啟,將檔案指標指向檔案頭並將檔案大小截為零。如果檔案不存在則建立該檔案。
w+以讀寫方式開啟,將檔案指標指向檔案頭並將檔案大小截為零。如果檔案不存在則建立該檔案。
a以寫入方式開啟,將檔案指標指向檔案末尾。如果檔案不存在則建立該檔案。
a+以讀寫方式開啟,將檔案指標指向檔案末尾。如果檔案不存在則建立該檔案。
x建立並以寫入方式開啟,將檔案指標指向檔案頭。如果檔案已存在,則 fopen() 呼叫失敗並返回 FALSE,並生成一條 E_WARNING 級別的錯誤資訊。如果檔案不存在則建立該檔案。僅適用於本地檔案。
x+建立並以讀寫方式開啟,其他的行為和 x 一樣。
c只開啟檔案進行寫入,如果檔案不存在,則建立該檔案。如果檔案存在,不會清空檔案內容,並將檔案指標指向檔案頭。
c+開啟檔案進行讀寫,如果檔案不存在,則建立該檔案。如果檔案存在,不會清空檔案內容,並將檔案指標指向檔案頭。
  • $use_include_path:可選引數,如果也需要在 include_path 中搜尋檔案的話,可以將 $use_include_path 設為 1 或 TRUE;

  • $context:可選引數,在 PHP5.0.0 中增加了對上下文(Context)的支援。

讀取檔案資料,可以使用fgetc()、fgets()、fgetss()等函數

fgetc():從檔案中讀取一個字元

在對某一個字元進行查詢、替換時,就需要有針對性地對某個字元進行讀取,在 PHP 中可以使用 fgetc() 函數實現此功能。該函數語法格式如下:

fgetc(resource $handle)

其中引數 $handle 為使用 fopen() 或 fsockopen() 成功開啟的檔案資源。

fgetc() 函數可以返回一個包含有一個字元的字串,該字元是從 $handle 指向的檔案中得到。當碰到 EOF 時返回 FALSE。

注意:fgetc() 函數可能返回布林值 FALSE,也可能返回等同於 FALSE 的非布林值。所以應該使用===運運算元來測試此函數的返回值。

另外,fgetc() 函數可安全用於二進位制物件,但不適用於讀取中文字串,因為一箇中文通常佔用 2~3 個字元。

【範例】使用 fgetc() 函數逐個字元的讀取檔案中的內容並輸出。

<?php
    header("Content-Type: text/html;charset=utf-8");    //設定字元編碼
    $handle = fopen('./test.txt', 'r');                 //開啟檔案
    if (!$handle) {                                     //判斷檔案是否開啟成功
        echo '檔案開啟失敗!';
    }
    while (false !== ($char = fgetc($handle))) {        //迴圈讀取檔案內容
        echo $char;
    }
    fclose($handle);                                    //關閉檔案
?>

fgets()和fgetss():逐行讀取檔案

fgets() 函數用於一次讀取一行資料。函數的語法格式如下:

fgets(resource $handle[, int $length])

其中引數 $handle 是被開啟的檔案;引數 $length 為可選引數,用來設定讀取的資料長度。函數能夠實現從指定檔案 $handle 中讀取一行並返回長度最大值為 $length-1 個位元組的字串。在遇到換行符、EOF 或者讀取了 $length-1 個位元組後停止。如果忽略 $length 引數,則預設讀取 1k(1024位元組)長度。

【範例】使用 fgets() 函數逐行讀取檔案的內容並輸出。

<?php
    $handle = @fopen("./test.txt", "r");
    if ($handle) {
        while (($info = fgets($handle, 1024)) !== false) {
            echo $info.'<br>';
        }
        fclose($handle);
    }                                
?>

fgetss() 函數是 fgets() 函數的變體,用於讀取一行資料,同時 fgetss() 函數會過濾掉讀取內容中的 HTML 和 PHP 標記,函數的語法格式如下:

fgetss(resource $handle[, int $length[, string $allowable_tags]])

引數說明如下:

  • $handle:為被開啟的檔案;

  • $length:可選引數,用來設定要讀取的資料長度;

  • $allowable_tags:可選引數,用來指定哪些標記不被去掉。

注意:fgetss() 函數在 PHP7.3 及之後的版本中已經棄用。

【範例】分別使用 fgets() 函數和 fgetss() 函數讀取 index.html 檔案並輸出結果,看一看有什麼區別。

<?php
    echo '-------使用 fgets() 函數的輸出結果:-------<br>';
    $handle = @fopen("index.html", "r");
    if ($handle) {
        while (!feof($handle)) {
            $buffer = @fgets($handle, 4096);
            echo htmlentities($buffer,ENT_QUOTES,"UTF-8").'<br>';
        }
        fclose($handle);
    }
    echo '-------使用 fgetss() 函數的輸出結果:-------<br>';
    $handle = @fopen("index.html", "r");
    if ($handle) {
        while (!feof($handle)) {
            $buffer = @fgetss($handle, 4096);
            echo $buffer.'<br>';
        }
        fclose($handle);
    }
?>

推薦學習:《》

以上就是php檔案怎樣可以讀取卻不能寫入資料的詳細內容,更多請關注TW511.COM其它相關文章!