PHP:文件处理

文件处理

将数据写入一个文件,有3个步骤:
1. 打开文件
2. 将数据写入这个文件
3. 关闭这个文件
同样,从一个文件中读取数据,也有3个步骤
1. 打开文件。如果文件打不开,就应正确地退出
2. 从文件中读取数据
3. 关闭这个文件

1. 打开文件

要在PHP中打开一个文件,可以使用fopen()函数。当打开文件的时候还要指定打开模式。

1.1 选择文件模式

模式模式名称意义
r只读读模式–打开文件,从文件头开始读
r+只读读写模式–打开文件,从文件头开始读写
w只写写模式–打开文件,从文件头开始读。如果该文件已存在,将删除所有文件已有内容。如果文件不存在,将创建这个文件
w+只写写模式–打开文件,从文件头开始读写。如果该文件已存在,将删除所有文件已有内容。如果文件不存在,将创建这个文件
x谨慎写写模式打开文件,从文件头开始写。如果文件已经存在,该文件将不会被打开,fopen()函数将返回false,同时PHP将产生一个警告
x+谨慎写读写模式打开文件,从文件头开始写。如果文件已经存在,该文件将不会被打开,fopen()函数将返回false,同时PHP将产生一个警告
a追加追加模式–打开文件,如果文件已经有内容,将从文件末尾开始追加(写)。如果文件不存在,将创建这个文件
a+追加追加模式–打开文件,如果文件已经有内容,将从文件末尾开始追加(写)或者读。如果文件不存在,将创建这个文件

1.2 打开文件

可以使用fopen()打开文件,如果fopen()函数调用失败,将会返回false。可以以一种友好的方式来处理这个错误,通过抑制PHP的错误信息并根据自己的方式给出错误信息。(当然也可以使用抛出异常的方式)

@ $fp = fopen("filename.fileformate", "mode");
if (!$fp) {
    echo "<p>文件打开失败!</p>";
    exit; //程序到这就终止了
}

2. 写文件

在PHP中写入文件可以使用fwrite()函数。调用方式如下:

fwrite($fp, $outputstring);

这个函数告诉PHP将$outputstring中的字符串写入到$fp所指的文件中去。

3. 关闭文件

当使用完文件后,应将其关闭,关闭方法如下:

fclose($fp);

一般不出错,成功就返回true。

4. 读文件

4.1 以只读方式打开文件

$fp = fopen("filename.fileformat", 'r');

4.2 知道何时读完文件:feof()

函数feof()的唯一参数是文件指针。如果文件指针指向了末尾,便返回true。feof是File End Of File的缩写。
我们就可以使用如下的循环来读取文件:

while (!feof($fp)) {
    # code here
}

4.3 每次读取一行数据

  • 举个例子:

fgets($fp, 999);

上述代码会从文件中每次读取一行数据,直至读到一个换行字符(\n)、或者文件结束符EOF,或者是从文件中读取了998B。(注意:大小是999-1)

  • 也可以使用函数fgetss(),其函数原型如下:

string fgetss(resource fp, int length stirng [allowable_tags]);

fgetss()函数可以过滤字符串中包含的HTML标记和PHP。如果要过滤任何特殊的标记,可以将它们包含在allowable_tags数组中。

4.4 读取整个文件

用法如下:
readfile("filename.fileformat");

4.5 读取任意长度

使用fread()读取任意长度的字节,该函数原型如下:
string fread(resource fp, int length);

5. 其他有用的函数

5.1 文件是否存在

如果希望在不打开文件的情况下,检查一个文件是否存在,可以使用file_exists()。

if (file_exists("filename.fileformat")) {
    echo "文件存在!";
}
else {
    echo "不存在!";
}

5.2 文件大小

可以使用函数filesize()函数来查看一个文件的大小。

echo filesize("filename.fileformat");

5.3 删除一个文件

使用unlink()函数来删除一个文件。(PHP中没有名为delete的函数)

unlink("filename.fileformat");

5.4 在文件中定位:rewind()、fseek()和ftell()

rewind()函数可以将文件指针复位到文件的开始。ftell()函数可以以字节为单位报告指针当前在文件中的位置。

可以使用fseek()函数将文件指针指向文件的某个位置。其函数原型如下:

int fseek(resource fp, int offset [, int whence])

调用fseek()函数可以将文件指针从whence处移动offset个字节。whence是一个可选值,缺省值SEEK_SET表示文件的开始处,SEEK_CUR表示文件指针的当前位置,SEEK_END表示文件的结束位置。

示例程序:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>写入数据</title>
    <style>
        form
        {
            width: 400px;
            height: 400px;
            margin-left: 100px;
            padding: 10px;
            border: 1px solid #ccc;
        }

        input
        {
            width: 100px;
            height: 20px;
        }
    </style>
</head>
<body>
    <form action="fwrite.php" method="post">
        时间:<input type="date" name="dateTime" ><br>
        <br>
        内容:<textarea name="content" cols="30" rows="10"></textarea><br>
        <br>
        <input type="submit" value="发送">
    </form>
</body>
</html>

处理脚本:

<?php  
$dateTime = $_POST['dateTime'];
$content = $_POST['content'];

if (isset($dateTime) && isset($content)) {
    $outputstring = $dateTime."\t".$content."\n";

    @ $fp = fopen('data.txt', 'a');

    if (!$fp) {
        echo "<p>文件无法打开也无法创建!</p>";

        exit;
    }

    fwrite($fp, $outputstring);
    fclose($fp);
}

echo "<p>文件写入成功,现在data.txt的内容为:</p><br>";

@ $fp = fopen('data.txt', 'r');

while (!feof($fp)) {
    $data = fgets($fp, 100);

    echo $data."<br>";
}

fclose($fp);

?>

运行示例:
这里写图片描述

](https://img-blog.csdn.net/20170328121716450?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2l0aHViXzM2NzA0MTU4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值