php 快速入门(四)

一、文件操作

1.1 文件基础操作

1.1.1 打开文件

在PHP中,我们可以使用fopen()函数来打开一个文件,该函数接收两个参数:

文件名和打开模式。

打开模式可以使"r"(只读模式)、"w"(写入模式)、"a"(追加模式)等。

fopen 函数的格式

fopen("文件名","打开模式")

|----|---------------------------------|
| 模式 | 描述 |
| r | 只读。在文件的开头开始。 |
| r+ | 读/写。在文件的开头开始。 |
| w | 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。 |
| w+ | 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。 |
| a | 追加。打开并向文件末尾进行写操作,如果文件不存在,则创建新文件 |
| a+ | 读/追加。通过向文件末尾写内容,来保持文件内容。 |
| x | 只写。创建新文件。如果文件已存在,则返回FALSE和一个错误。 |
| x+ | 读/写。创建新文件,如果文件已存在,则返回FALSE和一个错误 |

下面是一个打开文件的实例:

php 复制代码
$file = fopen("example.txt","r");

打开文件案例:

php 复制代码
<?php
    header("content-type:text/html;charset=utf-8");
    $file = "a111.txt";
    
    // fopen()打开文件的时候,如果打开成功,则返回真,如果打开失败,则返回假
    // 在函数前面加上@可以屏蔽掉函数的报错和警告输出
    $fileObj = @fopen($file,"r");
    if($fileObj)
    {
        echo "打开文件成功<br>";
    }
    else
    {
        echo "打开文件失败<br>"
        exit();
    }
?>
1.1.2 读取文件

逐行读取文件

fgets() 函数用于从文件中逐行读取文件。

注释: 在调用该函数之后,文件指针会移动到下一行。

实例:下面的实例逐行读取文件,直到文件末尾为止;

php 复制代码
<?php
    header("conteent-type:text/html;charset=utf-8");

    //定义文件名
    $file = "a.txt";
    
    //打开文件
    $fileObj = @fopen($file,"r");

    //判断文件是否打开成功
    if($fileObj)
    {
        echo "打开文件成功<br>";
    }
    else
    {
        echo "打开文件失败<br>";
        exit();
    }

    //从文件中读取内容
    while(!feof($fileObj))    # feof() 判断指针是否指向文件的末尾,如果是的话,则为真
    {
        //fgets() 执行一次,就会从打开的文件中读取一行
        //读取了一行一行,指针就会向后移动一行
        $content = fgets($fileObj);
    
        //输出读取的这行的内容
        echo "$content <br>";

        echo "<hr>";
    }
    fclose($fileObj);
?>

feof() 函数检查是否已到达文件末尾(EOF)。

如果出错或者文件指针到了文件末尾(EOF)则返回TRUE,否则返回FALSE

逐字符读取文件

fgetc() 函数用于从文件中逐字符地读取文件
**注释:**在调用该函数之后,文件指针会移动到下一个字符。

实例:逐字符读取文件,直到文件末尾为止。

php 复制代码
<?
    header("content-type:text/html;charset=utf-8");
    
    // 定义文件名
    $file = "a.txt";
    
    // 打开文件
    $fileObj = @fopen($file,"r");

    // 判断文件是否打开文件
    if($fileObj)
    {
        echo "打开文件成功<br>";
    }
    else
    {
        echo "打开文件失败<br>";
        exit();
    }
    
    // 从文件中读取内容
    while(!feof($fileObj))    #  feof() 判断指针是否指向文件的末尾,如果是的话,则为真
    {
        // fgetc() 执行一次,就会从打开的文件中读取一个字符
        // 读取了一个字符,指针就会向后移动一位
        // 英文字母和数字,一个字符就是一个,但是一个汉字,占用2-6个字符,具体要看编码类型
        $content1 = fgetc($fileObj);
        $content2 = fgetc($fileObj);
        $content3 = fgetc($fileObj);
        $content4 = fgetc($fileObj);

        // 输出读取的这行的内容
        echo "$content1";
        echo "$content2";
        echo "$content3";
        echo "$content4";
        
        echo "<br>";
    }

    fclose($fileObj);
?>

读取全部内容:fread

php 复制代码
<?php
    header("content-type:text/html;charset=utf-8");

    // 定义文件名
    $file = "a.txt";
    
    // 打开文件
    $fileObj = @fopen($file,"r");
    
    // 判断文件是否打开成功
    if($fileObj){
        echo "打开文件成功<br>";
    } else {
        echo "打开文件失败<br>";
        exit();
    }
    
    $content = fread($fileObj,filesize("a.txt"));
    fcloes($fileObj);
    
    echo $content;
?>

fread函数

  • fread() 函数读取打开的文件。
  • 函数会到达指定长度或读到文件末尾(EOF)时(以先到者为准),停止运行。
  • 该函数返回读取的字符串,如果失败则返回 FALSE
php 复制代码
string fread ( resource $handle,int $lenngth)

filesize函数

  • filesize() 函数返回指定文件的大小。
  • 如果成功,该函数返回文件大小的字节数。如果失败,则返回 FALSE。
1.1.3 写入文件

与读取文件类似,我们可以使用fwrite()函数来向文件中写入内容。下面是一个写入文件的示例:

php 复制代码
<?php
    header("content-type:text/html;charset=utf-8");
    
    // 定义文件名
    $file = "a.txt";

    // 打开文件
    $fileObj = @fopen($file,"r");

    // 判断文件是否打开成功
    if($fileObj)
    {
        echo "打开文件成功<br>";
    }
    else
    {
        echo "打开文件失败<br>";
        exit();
    }
    
    // fwrite() 向文件写入内容的时候,则返回的是写入到文件的字符个数
    // php中,数字0表示假,非0表示真,因此可以基于这个特性来判断写入操作是否成功
    $res = fwrite($fileObj,"Hello,World!");
    echo "写入到文件中 $res 个字符";

    fclose($fileObj);
?>

在上面的案例中,我们首先以写入模式打开一个文件,然后使用fwrite()函数将字符串"Hello,World!"写入到文件中。最后,我们使用close()函数关闭文件

1.1.4 修改文件

如果需要修改文件中的内容,我们可以先将文件内容读取到一个字符串中,然后对字符串进行修改,最后再将修改后的内容写入到文件中,下面是一个修改文件的示例:

php 复制代码
<?php
    header("Content-Type:text/html;charset=utf-8");
    //打开读取文件内容
    $file = fopen("a.txt","r");
    $content = fread($file,filesize("a.txt"));
    fclose($file);

    echo "1:读取文件完成...<br>";

    // 对内容进行字符串替换
    $content = str_replace("大力","张美丽",$content);
    echo "2:替换内容完成...<br>";

    // 将替换后的字符串再次写入到源文件中
    $file = fopen("a.txt","w")
    fwrite($file,$content);
    fclose($file);
    echo "3:重新写入完成...<br>";
?>

在上面的示例中,我们先将文件内容读取到$content变量中,然后使用str_replace()函数将字符串"大力"替换为"张美丽"。最后,我们将修改后的内容写入文件中。

1.1.5 删除文件

要删除一个文件,可以使用PHP的unlink()函数,以下是一个简单的示例代码:

php 复制代码
if(unlink("example.txt")) {
    echo "文件已删除";
}
else
{
    echo "无法删除文件";
}

在上述代码中,我们使用unlink()函数删除了名为example.txt的文件。如果删除成功,则该函数返回true,否则返回fales。

1.1.6 关闭文件

fclose() 函数用于关闭打开的文件:

php 复制代码
<?pphp
    $file = fopen("text.txt","r");
    
    //执行一些代码
    
    fclose($file);
?>
1.1.7 判断文件是否存在

file_exists()函数用于判断文件是否存在

php 复制代码
$file = "check.txt";
if(file_exists($file))
{
    echo "当前目录中,文件".$file."存在";
}
else
{
    echo "当前目录中,文件".$file."不存在";
}
1.1.8 判断目录是否存在

is_dir() 函数用于判断目录是否存在

php 复制代码
$dir = "c:/dir1";
if(is_dir($dir))
{
    echo "当前目录下,目录".$dir."存在";
}
else
{
    echo "当前目录下,目录".$dir."不存在";
}

1.2 操作文件的函数

1.2.1 fopen() 函数

fopen() 函数用于在PHP中打开文件,它可以用来读取文件的内容,也可以用来写入文件的内容。下面是一个示例:

php 复制代码
$file = 'test.txt';
$fp = fopen($file,'r');
while (!feof($fp)){
    $content = fgets($fp);
}
fclose($fp);
echo $content;
1.2.2 file_get_contents() 函数

file_get_content()函数用于将整个文件读入到一个字符串中,它是最简单也是最常用的读取文件内容的方法,使用起来也非常方便。下面是一个示例:

php 复制代码
$file = "test.txt";
$content = file_get_contents($fiel);
echo $content;
1.2.3 readfile() 函数

readfile()函数用于将文件的内容读取到输出缓冲中,它可以用来输出文本文件、图片文件等。下面是一个示例:

php 复制代码
$file = 'test.txt';
readfile($file);
1.2.4 file() 函数

file()函数用于读取文件的内容,将文件内容读取到一个数组中,每一行为数组中的一个元素。下面是一个示例:

php 复制代码
$fiel = 'test.txt';
$content = file($file);
foreach($content as $line){
    echo $line;
}
相关推荐
JaguarJack11 小时前
为什么 PHP 闭包要加 static?
后端·php·服务端
ServBay1 天前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户962377954482 天前
CTF 伪协议
php
BingoGo4 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack4 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo5 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack5 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack6 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo6 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack7 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel