• PHP学习笔记--文件目录操作(文件上传实例)


    文件操作是每个语言必须有的,不仅仅局限于PHP,这里我们就仅用PHP进行讲解

    php的文件高级操作和文件上传实例我放在文章的最后部分。--以后我还会给大家写一个PHP类似于网盘操作的例子

    注意:阅读此文章,必须的备一个 《PHP中文手册》或者其它可以查询PHP函数的手册 因为文章有大量的示例,但是为了节约篇幅和时间,所以请大家自行查阅PHP手册,以明白函数的具体作用

    1、php打开文件和关闭文件

      用到的函数 fopen() 、fclose()  注:打开的文件一定要关闭! 具体函数参数请查阅php手册

     实例:

    <?php
                $fopen = fopen("fun.txt","rb");
                /* ...文件的其他操作 */
                fclose($fopen);
            ?>
    View Code

    fopen()函数在php5中也支持url格式:

    <?php
        $fopen = fopen("http://www.baidu.com","rb");
        while(!feof($fopen))
        {
            echo fgets($fopen);    
        }
        fclose($fopen);
    ?>
    View Code

    2、PHP的文件读写

      读操作-

        用到的函数 readfile()、file()、file_get_contents()、fgets()、fgetss()、fgetc()

        示例中的文件位置请根据自己的文件进行更改,不要纠结文件位置和文件名什么的。重点在学习

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>文件测试</title>
    </head>
    
    <body>
    <!--不需要打开文件读取-->
    <table width="500" border="1" cellpadding="0" cellspacing="0">
        <tr>
            <td width="253" height="100" align="right" valign="middle" scope="col">使用 readfile()函数读取文件内容:
            </td>
            <td width="241" height="100" align="center" valign="middle" scope="col">
            <!-- 使用readfile()函数读取ee.txt文件内容 -->
            <?php readfile("ee.txt"); ?>
            </td>
        </tr>
        <tr>
            <td height="100" align="right" valign="middle">使用 file()函数读取文件内容:
            </td>
            <td height="100" align="center" valign="middle">
            <!-- 使用file()函数读取ee.txt文件内容 -->
            <?php
                $f_arr = file("ee.txt");
                foreach($f_arr as $cont)
                {
                    echo $cont."<br />";
                }
            ?>
            </td>
        </tr>
        <tr>
            <td width="250" height="25" align="right" valign="middle" scope="col">使用 file_get_contents()函数读取文件内容:
            </td>
            <td height="25" align="center" valign="middle" scope="col">
            <!-- 使用file_get_contents()函数读取ee.txt文件内容 -->
            <?php
                $f_chr = file_get_contents("ee.txt");
                echo $f_chr;
            ?>
            </td>
        </tr>
    </table>
    <!--需要打开文件流读取-->
    <table border="1" cellpadding="0" cellspacing="0">
        <tr>
            <td align="right" valign="middle" scope="col">使用fgets()函数:</td>
            <td align="center" valign="middle" scope="col">
            <!--使用fgets()函数读取-->
            <?php
                $fopen = fopen("fun.txt","rb");  //打开文件
                while(!feof($fopen))  //feof()函数测试指针是否到了文件结束的位置
                {
                    echo fgets($fopen);        //输出当前行    
                }
                fclose($fopen);  //关闭文件
            ?>
            </td>
        </tr>
        <tr>
            <td align="right" valign="middle" >使用fgetss()函数:</td>
            <td align="center" valign="middle">
            <!--使用fgetss()函数读取-->
            <?php
                $fopen = fopen("fun.txt","rb");
                while(!feof($fopen))  //feof()函数测试指针是否到了文件结束的位置
                {
                    echo fgetss($fopen); //输出当前行
                }
                fclose($fopen);
            ?>
            </td>
        </tr>
        <tr>
            <td align="right" valign="middle" >使用fgetc()函数:</td>
            <td align="center" valign="middle">
            <!--使用fgetss()函数读取-->
            <?php
                $fopen = fopen("ee.txt","rb");  //创建文件资源。打开文件流
                while(false !== ($chr = fgetc($fopen)))  //使用fgetc()函数取得一个字符串,判断是否为false
                {
                    echo $chr;   //如果不是,输出该字符
                }
                fclose($fopen); //关闭文件资源
            ?>
            </td>
        </tr>
    </table>
    </body>
    </html>
    View Code

         写操作-

        用到的函数 fwrite()、 file_put_contents()

    <?php
    /*
        $filename = "ee.txt"; //要读取的文件
        $fp = fopen($filename,"rb"); //打开文件
        echo fread($fp,6);  //使用 fread() 函数读取文件内容的前32个字节
        echo "<p>";
        echo fread($fp,filesize($filename)); //输出其余的文件内容
        */
        $filepath = "05.txt";
        $str = "此情可待成追忆   只是当时已惘然<br />";
        echo "用 fwrite() 函数写入文件: ";
        $fopen = fopen($filepath,"wb") or die("文件不存在");
        fwrite($fopen,$str);
        fclose($fopen);
        readfile($filepath);
        echo "<p>用 file_put_contents() 函数写入文件: ";
        file_put_contents($filepath,$str);
        readfile($filepath);
    ?>
    View Code

     3、php文件本身的操作

           本示例只是列举函数,请不要直接运行。运行前请根据自己的需求更改

    <?php
        date_default_timezone_set('Asia/Shanghai');  //PHP5以上版本支持 --时区的设置,一会儿会有涉及到时间
        //php文件操作 --本示例只是列举函数,请不要直接运行。运行前请根据自己的需求更改
        
        /*用rename()函数文件重命名*/
        rename("123.txt","321.txt");
        
        /*用copy()函数 复制文件*/
        copy("ee.txt","upfile/ee.txt");
        
        /*用unlink()函数 删除文件*/
        unlink("321.txt");
        
        /*用fileatime()函数 返回文件最后一次访问的时间 --默认是以unix时间戳来访问的*/
        echo "Last access time: ".date("Y-m-d H:i:s",fileatime("ee.txt"));
        
        /*用filemtime()函数 返回文件最后一次被修改的时间 --默认是以unix时间戳来访问的*/
        echo "Last modified time: ".date("Y-m-d H:i:s",filemtime("ee.txt"));
        
        /*用filesize() 函数取得文件大小 以字节数显示*/
        echo filesize("ee.txt");
        
        /*用pathinfo() 函数获取文件信息 包括路径、类型、名字等*/
        print_r(pathinfo("ee.txt"));
        
        /*用realpath() 函数返回文件的绝对路径*/
        echo realpath("ee.txt");
        
        /*用stat() 函数返回文件的相关信息。如大小、最后修改时间等等*/
        print_r(stat("ee.txt"));
    ?>
    View Code

     ===================================================================

    一、php目录操作

         和文件操作类似,也要打开关闭目录 用opendir()、和closedir()函数进行打开和关闭目录

    <?php
        $path = "D:/user/test";    //路径应为 "/" 而不是 ""
        if(is_dir($path))        //检测是否是一个目录
        {
            if($dire = opendir($path))  //判断打开目录是否成功
            {
                echo $dire;            //输出目录指针
            }
        }
        else
        {
            echo '路劲错误';
            exit();
        }
        closedir($dire);    //关闭目录
    ?>
    View Code

    二、php目录的游览

         核心函数 scandir()

    <?php
        $path = "D:/user";   //要游览的目录
        if(is_dir($path))
        {
            $dir = scandir($path);        //使用scandir() 函数取得所有文件及目录
            foreach($dir as $value)        //使用foreach循环遍历
            {
                echo iconv("gbk","utf-8",$value);  //转换编码。
                echo "<br />";
            }
        }
        else
        {
            echo "目录路径错误!";    
        }
    ?>
    View Code

    三、php目录的其他操作,获取磁盘目录大小,新建删除目录等等

    本示例只是列举函数,请不要直接运行。运行前请根据自己的需求更改

    <?php
        /*本示例只是列举函数,请不要直接运行。运行前请根据自己的需求更改*/
        /*用mkdir() 函数新建一个指定目录*/
        mkdir("tt");
        
        /*用rmdir()函数 删除一个指定的目录,前提是目录必须是空的*/
        rmdir("tt");
        
        /*用getcwd()函数 获取当前工作的目录*/
        echo getcwd();
        
        /*用chdir() 函数更改当前目录为工作目录*/
        echo getcwd();
        echo "<br />";
        chdir("../");  //更改为返回上一级
        echo getcwd(); //重新获取当前目录
        
        /*用disk_free_space()函数 返回目录中的可用空间*/
        echo disk_free_space("D:/")/pow(1024,3);  //这里换算成了G、默认是以字节显示的
        
        /*用disk_total_space()函数 返回目录中的可用空间*/
        echo disk_total_space("D:/")/pow(1024,3);  //这里换算成了G、默认是以字节显示的
        
        /*关于PHP5以前的老游览目录的方法 我就不列举了,这里仅仅给出函数名: readdir()、rewinddir()*/
    ?>
    View Code

    ====================================================================

    文件的高级运用

    文件指针:

    <?php
        $filename = "ee.txt";    //指定文件路径及文件名
        if(is_file($filename))    //判断文件是否存在
        { 
            echo "文件总字节数: ".filesize($filename)."<br />";   //输出总字节数
            $fopen = fopen($filename,"rb");    //打开文件 , 以只读的二进制文件格式的去
            echo "初始指针位置是: ".ftell($fopen)."<br />";  //输出指针位置
            fseek($fopen,3);  //移动指针
            echo "使用 fseek() 函数后指针位置: ".ftell($fopen)."<br />"; //输出移动后的指针位置
            echo "输出当前指针后面的内容: ".fgets($fopen)."<br />"; //输出从当前指针到行尾的内容
            if(feof($fopen))   //判断指针是否指向文件末尾
            {
                echo "当前指针指向文件末尾: ".ftell($fopen)."<br />";  //如果指向了文件尾,则输出指针位置
            }
            //使用rewind() 函数返回文档流的开头  --一旦流读到末尾再度就读不到数据了,
            //所以这里要重新指向一个文件的指针
            rewind($fopen);  
            //查看使用 rewind() 函数后指针的位置
            echo "使用 rewind() 函数后指针的位置: ".ftell($fopen)."<br />";  
            echo "输出前 6 个字节的内容: ".fgets($fopen,6);  //输出前6个字节的内容
            fclose($fopen);  //关闭文件
        }
        else
        {
            echo "文件不存在!";    
        }
    ?>
    View Code

    文件锁定:

    <?php
        $filename = '05.txt';   //声明要打开文件名称
        $fopen = fopen($filename,'w');   //以w 只写的形式打开文件
        flock($fopen,LOCK_EX);   //锁定文件 (独占共享)
        fwrite($fopen,"hightman1");  //向文件中写入数据
        flock($fopen,LOCK_UN);  //解除锁定
        fclose($fopen);  //关闭文件指针
        readfile($filename);   //输出文件内容
    ?>
    View Code

    ====================================================================

    文件的上传

    获取上传文件的信息:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head>
    
    <body>
        <table width="500" border="0" cellpadding="0" cellspacing="0">
            <!-- 上传文件的form表单,必须有 enctype 属性 -->
            <form enctype="multipart/form-data" action="" method="post">
                <tr>
                    <td width="150" height="30" align="right" valign="middle">请选择上传文件: </td>
                    <!-- 上传文件域,type类型为file -->
                    <td width="250"><input type="file" style="border:1px solid #000" name="upfile" /></td>
                    <!-- 提交按钮 -->
                    <td width="100"><input type="submit" name="submit" value="上传" /></td>
                </tr>
            </form>
        </table>
        <?php
            if(!empty($_FILES))  //检查变量是否为空
            {
                foreach($_FILES['upfile'] as $name=>$value)  //使用foreach循环输出上传文件信息的名称和值
                {
                    echo $name.'='.$value."<br />";
                }
            }
        ?>
    </body>
    </html>
    View Code

    真正的文件上传(从临时到指定位置):

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head>
    
    <body>
        <form action="" method="post" enctype="multipart/form-data" name="form">
            <input name="up_file" type="file" />
            <input type="submit" name="submit" value="上传" />
          </form>
        <?php
            if(!empty($_FILES['up_file']['name']))  //判断是否有上传文件
            {
                $fileinfo = $_FILES['up_file'];  //将文件信息赋给fileinfo
                if($fileinfo['size'] < 901 && $fileinfo['size'] > 0)  //判断文件大小
                {
                    //上传文件
                    move_uploaded_file($fileinfo['tmp_name'],"upfile/".$fileinfo['name']);
                    echo "文件上传成功!";
                }
                else
                {
                    echo "文件太大或者未知";    
                }
            }
        ?>
    </body>
    </html>
    View Code

    多文件上传:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head>
    
    <body>
        <form action="" method="post" enctype="multipart/form-data">
            <table id="up_table" border="1" bgcolor="#f0f0f0">
                <tbody id="auto">
                    <tr id="show">
                        <td>上传文件</td>
                        <td><input type="file" name="u_file[]" /></td>
                    </tr>
                    <tr>
                        <td>上传文件</td>
                        <td><input type="file" name="u_file[]" /></td>
                    </tr>
                    <tr>
                        <td colspan="4"><input type="submit" value="上传" /></td>
                    </tr>
                </tbody>
            </table>
        </form>
        <?php
            if(!empty($_FILES['u_file']['name']))  //判断$FILES变量是否为空
            {
                $file_name = $_FILES['u_file']['name']; //将上传的临时文件名存放在数组里
                $file_tmp_name = $_FILES['u_file']['tmp_name']; //将上传的临时文件路径存放数组
                for($i = 0; $i<count($file_name); $i++)  //循环上传文件
                {
                    if($file_name[$i] != '')   //判断上传文件名是否为空
                    {
                        move_uploaded_file($file_tmp_name[$i],"upfile/".$i.$file_name[$i]);
                        echo "文件".$file_name[$i]."上传成功, --更名为".$i.$file_name[$i]."<br />";
                    }
                }
            }
        ?>
    </body>
    </html>
    View Code
  • 相关阅读:
    [Linux] 设置系统时区
    [Python] 当猎头遇上 Guido van Rossum
    [Ubuntu] LightDM 轻量级桌面显示管理器
    [Java] Apache Ant 构建基础教程
    [Python] pip 简明指南
    .NET Core下的Spring Cloud——前言和概述
    福州首届.NET开源社区技术交流会圆满成功
    【福州活动】| "福州首届.NET开源社区线下技术交流会"(2018.11.10)
    使用CoreRT将.NET Core发布为Native应用程序
    使用.NET Core快速开发一个较正规的命令行应用程序
  • 原文地址:https://www.cnblogs.com/clouds008/p/3188086.html
Copyright © 2020-2023  润新知