您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關php文件如何實現可以讀取卻不能寫入數據功能,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
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文件如何實現可以讀取卻不能寫入數據功能”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。