ホームページ >バックエンド開発 >PHPの問題 >php ファイルを読み取ることができますが、データを書き込めないようにするにはどうすればよいですか?

php ファイルを読み取ることができますが、データを書き込めないようにするにはどうすればよいですか?

青灯夜游
青灯夜游オリジナル
2021-09-15 18:51:432288ブラウズ

php ファイルのデータを読み取るが書き込みはしない方法: 1. 「fopen('file path', '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]])

パラメータの説明は次のとおりです:

  • $ ファイル名: 開くファイルの URL です。この URL は、ファイルが存在するサーバー内の絶対パス、または相対パスまたはネットワーク内のファイルにすることができます。 resource;

  • $mode: used ファイルを開く方法 (ファイル モード) を設定します。特定の値は次の表から選択できます:

#modeDescriptionr読み取り専用モードで開き、ファイル ポインターをファイル ヘッダーにポイントします。 r 読み取り/書き込みモードで開き、ファイル ポインターをファイル ヘッダーにポイントします。 w書き込み用に開き、ファイル ポインターをファイル ヘッダーにポイントし、ファイル サイズをゼロに切り捨てます。ファイルが存在しない場合は作成します。 w 読み取り/書き込みモードで開き、ファイル ポインターをファイル ヘッダーにポイントし、ファイル サイズをゼロに切り捨てます。ファイルが存在しない場合は作成します。 a書き込み用に開き、ファイル ポインタをファイルの末尾に指します。ファイルが存在しない場合は作成します。 a 読み取り/書き込みモードで開き、ファイル ポインターをファイルの末尾に指します。ファイルが存在しない場合は作成します。 #xxxx cc
  • $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视频教程

ファイル ポインタをファイル ヘッダーに指定して、書き込み用に作成して開きます。ファイルが既に存在する場合、 fopen() 呼び出しは失敗し、FALSE を返し、E_WARNING レベルのエラー メッセージを生成します。ファイルが存在しない場合は作成します。ローカル ファイルのみに適用されます。
読み取り/書き込みモードで作成して開きます。その他の動作は x と同じです。
ファイルを書き込むためにのみ開きます。ファイルが存在しない場合はファイルを作成します。ファイルが存在する場合、ファイルの内容はクリアされず、ファイル ポインタはファイル ヘッダーを指します。
ファイルを読み取りおよび書き込み用に開き、ファイルが存在しない場合は作成します。ファイルが存在する場合、ファイルの内容はクリアされず、ファイル ポインタはファイル ヘッダーを指します。

以上がphp ファイルを読み取ることができますが、データを書き込めないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。