🤖 AI智能摘要

暂未配置

前言

实际开发过程当中,除了操作变量、数组,还经常需要操作服务器上面的文件。比如生成日志、保存留言、读写配置、导出数据、生成静态页面。本章学习 PHP 文件读写相关函数,掌握文件创建、读取、写入、删除、判断文件是否存在等基础操作。

一、文件路径

分为相对路径和绝对路径。

  1. 相对路径:相对于当前 php 文件的位置。test.txt代表同一文件夹下面的文件。
  2. 绝对路径:服务器完整路径,例如D:/phpstudy/www/test.txt
小提示:Windows 系统路径斜杠可以写/,不要使用\,反斜杠容易出现转义报错。

二、判断文件是否存在 file\_exists ()

file_exists(文件路径),文件存在返回 true,不存在返回 false。

<?php
$filename = "test.txt";
if(file_exists($filename)){
    echo "文件存在";
}else{
    echo "文件不存在";
}
?>

三、读取文件内容 file\_get\_contents ()

把整个文件里面的内容全部读取出来,保存为字符串。

<?php
$file = "test.txt";
if(file_exists($file)){
    $content = file_get_contents($file);
    echo $content;
}else{
    echo "文件找不到";
}
?>

四、写入文件 file\_put\_contents ()

向文件里面写入内容。

  • 如果文件不存在,会自动新建这个文件。
  • 如果文件已经存在,默认会直接覆盖原来全部内容。
<?php
$file = "test.txt";
$text = "今天学习PHP文件操作\r\n第二行文字";

//写入文件
file_put_contents($file,$text);
echo "写入完成";
?>

追加内容,不覆盖原有内容

参数加上FILE_APPEND,新内容写在文件末尾,不会覆盖旧数据,适合写日志、保存留言。

<?php
$file = "test.txt";
$addText = "\r\n这一行是追加的内容";
file_put_contents($file,$addText,FILE_APPEND);
echo "追加成功";
?>

五、fopen、fgets 逐行读取文件

文件体积很大的时候,一次性读取会消耗内存,可以一行一行读取。

  • r 只读模式
  • w 写入模式(清空覆盖)
  • a 追加模式
<?php
$fp = fopen("test.txt","r");
//循环读取每一行
while(!feof($fp)){
    $line = fgets($fp);
    echo $line."<br>";
}
//关闭文件,必须写
fclose($fp);
?>

六、删除文件 unlink ()

用来删除服务器上的文件。文件删除之后无法恢复,开发使用一定要谨慎。

<?php
$file = "test.txt";
if(file_exists($file)){
    unlink($file);
    echo "文件已经删除";
}else{
    echo "文件不存在";
}
?>

七、文件夹操作

1. 创建文件夹 mkdir ()

<?php
//新建名字为data的文件夹
mkdir("data");
echo "文件夹创建完毕";
?>

2. 判断是否为文件夹 is\_dir ()

<?php
if(is_dir("data")){
    echo "文件夹存在";
}
?>

3. 删除文件夹 rmdir ()

注意:只能删除空文件夹,如果文件夹里面还有文件,不能直接删除。
<?php
if(is_dir("data")){
    rmdir("data");
    echo "空文件夹已删除";
}
?>

八、文件上传基础(表单)

文件上传网页表单,form 标签必须添加属性enctype="multipart/form-data",method 必须为 post。

上传表单 upload.html

<form action="upload.php" method="post" enctype="multipart/form-data">
    选择文件:
    <input type="file" name="upfile">
    <br>
    <input type="submit" value="上传文件">
</form>

接收上传文件 upload.php
$_FILES专门接收上传文件的信息。

  • $_FILES['upfile']['name'] 原始文件名
  • $_FILES['upfile']['tmp_name'] 服务器临时文件位置
  • $_FILES['upfile']['error'] 错误码,0 代表上传成功

move_uploaded_file():把临时文件移动到正式目录。

<?php
//判断有没有上传错误
if($_FILES['upfile']['error'] === 0){
    $tmp = $_FILES['upfile']['tmp_name'];
    $name = $_FILES['upfile']['name'];
    //移动到当前目录保存
    move_uploaded_file($tmp,$name);
    echo "上传成功";
}else{
    echo "上传失败";
}
?>

九、实战小案例:简易留言板(文件版)

不需要数据库,使用 txt 文本保存用户留言。

留言表单 msg.html

<form action="save.php" method="post">
    昵称:<input type="text" name="nick"><br>
    留言:<textarea name="msg"></textarea><br>
    <input type="submit" value="提交留言">
</form>
<a href="show.php">查看全部留言</a>

保存留言 save.php

<?php
$nick = trim($_POST["nick"]);
$msg = trim($_POST["msg"]);

if(empty($nick) || empty($msg)){
    echo "昵称和留言不能为空!<a href='msg.html'>返回</a>";
    exit;
}

$line = $nick."|".$msg."\r\n";
//追加写入到msg.txt文件
file_put_contents("msg.txt",$line,FILE_APPEND);
echo "留言保存成功!<a href='show.php'>查看留言</a>";
?>

展示留言 show.php

<?php
$file = "msg.txt";
if(!file_exists($file)){
    echo "暂时还没有留言";
    exit;
}
$content = file_get_contents($file);
//把换行分割成数组
$list = explode("\r\n",$content);

foreach($list as $v){
    if(!empty($v)){
        echo $v."<hr>";
    }
}
?>

十、本章总结

  1. file_exists() 判断文件是否存在;
  2. file_get_contents()读取文件;file_put_contents()写入文件,FILE_APPEND实现追加;
  3. unlink()删除文件;mkdir()创建文件夹,rmdir()删除空文件夹;
  4. 文件上传表单必须写enctype="multipart/form‑data",使用$_FILES接收;
  5. move_uploaded_file() 将临时文件保存到服务器;
  6. 可以利用 txt 文件实现简易的数据存储,适合小型简单程序。
(注:部分内容可能由 AI 生成)