php 处理文件

来源:互联网 发布:人生 不 快乐 知乎 编辑:程序博客网 时间:2024/06/15 20:22

今天来总结一下php怎么处理文件。包括文件的读取与写入,文件的上传。文件的下载。

一、文件的读写

php 提供了许多处理文件的方法,我这里只讲其中一部分,更多方法请去php官网查看。

1.打开文件

 $file = fopen(路径,打开模式);

fopen()方法为我们打开文件,如果成功返回该文件,如果失败返回(0)false。它有两个参数,第一个参数是打开文件的路径,第二个参数是打开文件的模式。打开模式提供一下方法:

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

2.检测文件末尾

feof($file)

用于当读取文件时,判断是否达到文件末尾,达到了返回true。未达到返回false。

3.读取文件

fgets( $file )  // 逐行读取文件,可以利用它来判读文件有多少行fgetc($file// 逐字符读取文件

4.关闭文件

fclose( $file )    

5.写入内容:

file_put_contents(file,data,mode,context)
  • file 必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。
  • data 必需。规定要写入文件的数据。可以是字符串、数组或数据流。
  • mode 可选。规定如何打开/写入文件。可能的值:

FILE_USE_INCLUDE_PATH
FILE_APPEND
LOCK_EX

  • context 可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。

写入文件遵循以下规则:

如果设置了 FILE_USE_INCLUDE_PATH,那么将检查 filename 副本的内置路径
如果文件不存在,将创建一个文件
打开文件
如果设置了 LOCK_EX,那么将锁定文件
如果设置了 FILE_APPEND,那么将移至文件末尾。否则,将会清除文件的内容
向文件中写入数据
关闭文件并对所有文件解锁

6.其他函数

file_get_contents() // 把文件读入字符串basename() // 返回路径中文件名不封copy() // 复制文件dirname() // 返回路径中的目录名称部分disk_free_space() // 返回目录的可用空间disk_tota;_space() // 返回一个目录磁盘的总容量filesize() // 返回文件大小unlink() // 删除文件move_uploaded_file() // 将文件保存到指定文件夹

重点内容
向文件写入内容时,要将文件权限设置为 777;具体设置方法,我这不在写,可以网上搜索。

二、上传文件

这里直接上代码,因为比较简单。
HTML:

<form action="upload.php" method='post' enctype="multipart/form-data">    <p><input type="file" name="file"></p>    <p><input type="submit"></p></form>

PHP:

<?phpheader("Content-type:text/html;charset=utf-8");echo "文件名称 " . $_FILES["file"]["name"] . '<br/>';echo "文件大小,以字节计 " . $_FILES["file"]["size"] . '<br/>';echo "文件类型 " . $_FILES["file"]["type"] . '<br/>';echo "文件临时存储的位置 " . $_FILES["file"]["tmp_name"] . '<br/>';echo "文件上传导致的错误代码: " . $_FILES["file"]["error"] . '<br/>';// 上面是获取文件的一些信息,form表单提交后,利用超全局变量$_FILES 就可以获取上传文件。if(file_exists("newfile/" . $_FILES["file"]["name"])){ // 判断文件是否存在    echo $_FILES["file"]["name"] . "已存在";}else{    // 将缓存文件保存的指定文件夹move_uploaded_file($_FILES['file']['tmp_name'],"newfile/".$_FILES["file"]["name"]);}?>

三、下载文件

<?phpheader("Content-type:text/html;charset=utf-8");$file_name = "text.txt";     //下载文件名    $file_dir = "./";        //下载文件存放目录    //检查文件是否存在    if (! file_exists ( $file_dir . $file_name )) {        echo "文件找不到";        exit ();    } else {        //打开文件        $file = fopen ( $file_dir . $file_name, "r" );        //下载文件需要用到的头         Header ( "Content-type: application/octet-stream" );        Header ( "Accept-Ranges: bytes" );        Header ( "Accept-Length: " . filesize ( $file_dir . $file_name ) );        Header ( "Content-Disposition: attachment; filename=" . $file_name );        //输出文件内容         //读取文件内容并直接输出到浏览器        echo fread ( $file, filesize ( $file_dir . $file_name ) );        fclose ( $file );        exit ();    }    ?>
  • Header(“Content-type: application/octet-stream”)的作用:通过这句代码客户端浏览器就能知道服务端返回的文件形式
    Header(“Accept-Ranges: bytes”)的作用:告诉客户端浏览器返回的文件大小是按照字节进行计算的
    Header(“Accept-Length:”.file_size)的作用:告诉浏览器返回的文件大小 Header(“Content-Disposition: attachment; filename=”.filesfile_name)的作用:告诉浏览器返回的文件的名称
    以上四个Header()是必需的