PHP操作文件和目录

本文介绍了PHP中对文件和目录的各种操作,包括目录信息查询与操作,如is_dir()、chdir()、mkdir()等;文件信息查询,如is_file()、file_exists()等;文件操作,如fopen()、fwrite()、fread()等;以及文件的上传和下载方法,涉及表单上传和通过函数实现下载。
摘要由CSDN通过智能技术生成


一、目录处理

如下图所示,当前的工作目录是C:\Users\YK\Desktop\PHP_web\code\exercise\dir

在这里插入图片描述

1.1 目录信息查询

  1. is_dir( d i r ) : 查看 dir) : 查看 dir):查看dir是不是目录(判断当前工作目录下是否有$dir这个目录)
  2. dirname( f i l e ) : 查看 file):查看 file):查看file文件工作的相对目录(判断当前工作目录下的文件的相对目录路径)
  3. realpath( f i l e ) :查看 file):查看 file):查看file文件工作的绝对目录(判断当前工作目录下的文件的绝对路径)
  4. getcwd():查看当前运行文件工作的绝对目录
  5. phpinfo():获取详细信息
<?php
$dir = 'exercise/dir';
$file = 'exercise/dir/dir.php';
var_dump(is_dir($dir));  //查看$dir是不是目录

echo dirname($file) .PHP_EOL; //查看$file文件工作的相对目录
echo realpath($file); // 查看$file文件工作的相对目录

如下是代码执行结果:
在这里插入图片描述

1.2 目录操作

  1. chdir():更改当前工作目录(getcwd():显示当前工作目录)
  2. mkdir():创建工作目录
    在这里插入图片描述
<?php
echo getcwd() .PHP_EOL;
chdir('exercise/dir');  //更改工作目录1
echo getcwd() . PHP_EOL;
chdir('../');  //更改工作目录2
echo getcwd() . PHP_EOL;

mkdir('first');  //普通创建
mkdir('seconde/three', 0 , true);  //递归创建
//rmdir('first'); //删除目录

如下是代码显示结果:
在这里插入图片描述

  1. rmdir():删除目录,要求删除的目录下无任何的文件
  2. opendir( d i r ) : 打开 dir):打开 dir):打开dir目录
  3. readdir( d i r ) : 读取 dir):读取 dir):读取dir目录信息
    6closedir( d i r ) : 关闭 dir):关闭 dir):关闭dir目录
<?php
$dirhandel = opendir('../');
echo getcwd() .PHP_EOL;
$file = readdir($dirhandel);
while ($file !== false)
{
    echo $file . PHP_EOL;
    $file = readdir($dirhandel); //每次读取一个
}
closedir($dirhandel);


在这里插入图片描述

二、文件处理

2.1 查询文件信息

  1. is_file($file):文件是不是有效文件
  2. file_exits($file):文件是否存在
  3. fileatime($file):文件最后一次被修改的时间
  4. fileperms($file):文件的权限
<?php
//当前工作目录在dir目录下面
$file = '1.txt';
if(!is_file($file))
{
    echo '1.txt不是正常文件' . PHP_EOL;
    die();
}
if(file_exists($file))
{
    echo '1.txt文件存在' .PHP_EOL;
}
echo date('Y-m-d H:i:s', fileatime($file)) . PHP_EOL; //文件最后一次被修改的时间

echo fileperms($file);

如下是代码运行结果:
在这里插入图片描述

2.2 文件操作

  1. fopen():打开文件
    在这里插入图片描述

一般就使用前两个参数

  1. fwrite( f p , fp, fp,string,$length):写数据到文件,(length可选,代表写入文件的长度)
  2. fgetc($fp):每次读取一个字符
  3. fgets($fp):每次读取一行字符
  4. readline( f p , fp, fp,length):读取length长度的字符
  5. file($fp):读取整个文件:
<?php
$fp = fopen('1.txt', 'w'); //以写的形式打开1.txt文件
$string= <<<EOF
Hellow word
hi
EOF;
fwrite($fp,$string);
fclose($fp); //关闭文件



$fp = fopen('1.txt', 'r'); //以读的形式打开1.txt文件
$word = fgetc($fp);  //读取一个单词
while ($word !== false)  //判断是否读到文件末尾
{
    echo $word;
    $word = fgetc($fp);  //读取一个单词
}
fclose($fp); //关闭文件
echo PHP_EOL;

$fp = fopen('1.txt', 'r'); //以读的形式打开1.txt文件
$line = fgets($fp);  //读取一行
while ($line !== false)  //判断是否读到文件末尾
{
    echo $line;
    $line = fgets($fp);  //读取一个单词
}
fclose($fp); //关闭文件

echo file('1.txt');  //直接读取整个文件,以数组形式展示

如下是运行结果:
在这里插入图片描述

  • unlink($file) :删除文件

2.3 文件的上传

1. 文件上传配置

文件上传配置,如下是最常见的文件上传配置:(在php.ini文件中进行相应的配置)
在这里插入图片描述

2. 单文件上传表单
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>支持文件上传的表单, $_FILES</title>
</head>

<body>
    <form action="uploads.php" method="POST" enctype="multipart/form-data">
        <fieldset>
            <legend>单文件上传</legend>
            <input type="file" name="my_pic">
            <button>上传</button>
        </fieldset>
    </form>
</body>

</html>

如上提交表单后,交给uploads.php文件进行处理

3. 多文件上传表单
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>多文件上传</title>
</head>
<body>
<form action="uploads.php" method="post" enctype="multipart/form-data">
  <input name="myFile[]" type="file">
  <input name="myFile[]" type="file">
  <input name="myFile[]" type="file">
  <input type="submit" value="send">
</form>
</body>
</html>

如上提交表单后,交给uploads.php文件进行处理

4. 全局变量$file

在这里插入图片描述

5. 文件上传后端代码
<?php
printf("<pre>%s</pre>",print_r($_FILES));
if(isset($_FILES['my_pic']))
{
    $name = $_FILES['my_pic']['name'];
    $tmpName = $_FILES['my_pic']['tmp_name'];
    $error = $_FILES['my_pic']['error'];
    if($error > 0) {
        $tips = '<span style="color:red">上传失败!</span><br>';
        switch ($error) {
            case 1:
                $tips .= '大小超过了php.ini中的允许上传的文件大小';
                break;
            case 2:
                $tips .= '大小超过了表单中(MAX_FILE_SIZE)的允许上传的文件大小';
                break;
            case 3:
                $tips .= '文件只有部分被上传';
                break;
            case 4:
                $tips .= '没有文件被上传';
                break;
            case 6:
                $tips .= '找不到临时目录';
                break;
            case 7:
                $tips .= '文件写入失败,请检查目录权限';
                break;
        }
        echo "<p>$tips</p>";
    }
    else
    {
        if(is_uploaded_file($tmpName))
        {
            $allow = ['txt'];
            // 扩展名
            $ext = pathinfo($name)['extension'];
            if(is_array($ext,$allow))
            {
                $path = 'uploads/';
                $path .= md5($name) . '.' . $ext;
                if(move_uploaded_file($tmpName,$path))
                {
                    echo "<h1>文件上传成功</h1>";
                }
                else{
                    echo "<h1>文件上传失败</h1>";
                }
            }
            else
            {
                echo "<h1>后缀名错误</h1>";
            }
        }else
        {
            echo "<h1>上传方式错误</h1>";
        }
    }
}
else
{
    echo "<h1>文件没有上传成功</h1>";
}
?>
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>支持文件上传的表单, $_FILES</title>
</head>

<body>
    <form action="" method="POST" enctype="multipart/form-data">
        <fieldset>
            <legend>单文件上传</legend>
            <input type="file" name="my_pic">
            <button>上传</button>
        </fieldset>
    </form>
</body>
</html>

如上所示,文件上传后交给本文件进行处理

2.4 文件的下载

1. 链接下载
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>下载</title>
</head>
<body>
<a href="1.zip">点击进行下载</a> <!--href为要下载文件路径,要在同一个站点目录下面-->
</body>
</html>

在这里插入图片描述

两个文件在同一个目录下面,直接通关a标签进行下载

2.函数下载

如下代码进行文件的下载,

<?php  
$file_name = "demo.zip";     //下载文件名    
$file_dir = "./down/";        //下载文件存放目录
// 下载文件直接改如上两个参数即可,下面的代码统一,不需要修改

    
//检查文件是否存在    
if (! file_exists ( $file_dir . $file_name )) {    
    header('HTTP/1.1 404 NOT FOUND');  
} else {    
    //以只读和二进制模式打开文件   
    $file = fopen ( $file_dir . $file_name, "rb" ); 

    //告诉浏览器这是一个文件流格式的文件    
    Header ( "Content-type: application/octet-stream" ); 
    //请求范围的度量单位  
    Header ( "Accept-Ranges: bytes" );  
    //Content-Length是指定包含于请求或响应中数据的字节长度    
    Header ( "Accept-Length: " . filesize ( $file_dir . $file_name ) );  
    //用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
    Header ( "Content-Disposition: attachment; filename=" . $file_name );    

    //读取文件内容并直接输出到浏览器
    echo fread ( $file, filesize ( $file_dir . $file_name ) );    
    fclose ( $file ); //打开的时候要进行关闭这个文件
    exit (); 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安全天天学

你的鼓励是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值