首頁 > 後端開發 > PHP問題 > php檔案怎麼可以讀取卻不能寫入數據

php檔案怎麼可以讀取卻不能寫入數據

青灯夜游
發布: 2023-03-12 15:22:01
原創
2291 人瀏覽過

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

php檔案怎麼可以讀取卻不能寫入數據

本教學操作環境: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(&#39;./test.txt&#39;, &#39;r&#39;);                 //打开文件
    if (!$handle) {                                     //判断文件是否打开成功
        echo &#39;文件打开失败!&#39;;
    }
    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.&#39;<br>&#39;;
        }
        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 &#39;-------使用 fgets() 函数的输出结果:-------<br>&#39;;
    $handle = @fopen("index.html", "r");
    if ($handle) {
        while (!feof($handle)) {
            $buffer = @fgets($handle, 4096);
            echo htmlentities($buffer,ENT_QUOTES,"UTF-8").&#39;<br>&#39;;
        }
        fclose($handle);
    }
    echo &#39;-------使用 fgetss() 函数的输出结果:-------<br>&#39;;
    $handle = @fopen("index.html", "r");
    if ($handle) {
        while (!feof($handle)) {
            $buffer = @fgetss($handle, 4096);
            echo $buffer.&#39;<br>&#39;;
        }
        fclose($handle);
    }
?>
登入後複製

推荐学习:《PHP视频教程

以上是php檔案怎麼可以讀取卻不能寫入數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板