php 处理文件

今天来总结一下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:

<?php
header("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"]);
}

?>
三、下载文件
<?php
header("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=”. files file_name)的作用:告诉浏览器返回的文件的名称
    以上四个Header()是必需的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值