文件系统: (函数参考-》文件系统相关扩展-》Filesystem)
当程序运行时的数据是存放在内存中的,比如变量、常量等;想要长期保存程序运行完毕所产生的数据,我们可以利用文件的方式存储到硬盘上!
文件类型:
可以通过filetype()获取一个文件的类型
windows最常见的只有dir和file
判断文件类型
is_dir(路径) //判断是否是目录
is_file(路径) //判断是否是文件
//了解
is_readable(路径) //是否可读
is_writable(路径) //是否可写
is_executable(路径) //是否可执行
文件的属性:(什么叫属性?比如大小、创建时间。。。)
检测文件或目录是否存在
file_exists(路径);
获取文件大小
filesize(文件路径); //单位为字节
获取相关时间
filectime(文件路径); //创建时间 create
filemtime(文件路径); //修改时间 modify
fileatime(文件路径); //访问时间 active
目录相关
常见路径格式:
windows
C:/www/index.php
C:wwwindex.php
Linux
/var/www/index.php
相对路径
./index.php
../1.jpg
路径相关的函数
basename()取出路径中的文件名部分
dirname()去除路径中的文件名部分
pathinfo()获取路径中的所有信息
realpath() 获取规范的绝对路径(文件必须存在,否则返回false)
遍历目录
opendir(目录路径) 打开一个目录
readdir(资源) 读取一个目录资源,并将指针往前移,返回文件或目录名
closedir(资源) 关闭一个目录
扩充:iconv(原字符集, 目标字符集, 字符串)字符集转换
创建和删除目录
mkdir('目录'[, 权限, true]) 创建目录
在Windows中权限被忽略,Linux中0777表示最高权限
第3个true,表示递归创建目录
注意:创建的目录已存在会报错
rmdir('目录路径') 删除目录,只能删除空目录
unlink('文件路径') 删除文件
文件路径:
相对路径:./a/b/c/1.txt
绝对路径:C:wampwwwphp15ac1.txt
注意:http的绝对路径无法删除
文件的基本操作
touch('文件名'); 设定文件的修改时间
如果文件不存在,则会被创建。
copy(原文件名,新文件名);
只能复制一个文件,不能复制目录
rename(旧名,新名);
重命名一个文件,其实相当于剪切
文件操作:
打开文件
fopen('文件路径', 打开方式);
打开方式:
'r' 只读方式打开,将文件指针指向文件头。
'r+' 读写方式打开,将文件指针指向文件头。
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
w或w+/a或a+,如果不存在会自动创建
r或r+,不会自动创建文件
写文件
fwrite(资源, '写的内容');
写的位置由打开方式决定
读文件
fread(资源, 读的长度);
读的长度必须大于0
关闭文件
fclose(资源);
简单的文件读写:(常用)
file_get_contents(文件路径)
读取文件内容,返回文件内容的字符串
file_put_contents(文件路径,写的内容[, FILE_APPEND])
文件不存在就创建;默认为覆盖内容,可以用第3个参数设置为追加
文件上传和下载
上传用到头像、相册、网盘、资料、种子、资源等
下载资料、种子、资源、图片等
文件的上传
就是将文件从客户端上传到服务端
实现步骤:
1、表单的设置
1.要做文件上传,method必须使用post
2.必须在form标签里面加:enctype="multipart/form-data"
enctype:用于指定在发送数据到服务器之前如何对表单数据进行编码
multipart/form-data:表示不对数据进行编码,以文件流(二进制)的形式上传到服务器。
application/x-www-form-urlencoded:默认选项,默认对所有字符进行编码
3.<input type="hidden" name="MAX_FILE_SIZE" value="2000">
2、服务器端的设置 php.ini
1. file_uploads = On 是否允许文件上传
2. upload_max_filesize = 2M 上传文件最大允许范围
3. post_max_size = 8M POST表单上传数据的最大允许范围
4. upload_tmp_dir ="c:/wamp/tmp" 上传文件的临时目录
注意:
post_max_size的值一定要大于upload_max_filesize的值
3、PHP代码处理文件的上传
1. 上传后的数据用$_FILES接收。
2. $_FILES中每个元素的意思
name 上传的文件名
type 文件类型
tmp_name 临时文件路径
文件上传的原理:就是在脚本执行完毕之前将文件从这个临时路径里面弄出来,因为这货会在脚本执行完毕后自动删除
error 错误号
其值为 0,没有错误发生,文件上传成功。
其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
其值为 3,文件只有部分被上传。
其值为 4,没有文件被上传。
其值为 6,找不到临时文件夹。
其值为 7,文件写入失败。(比如你的临时目录没有写的权限)
size 文件大小,单位为字节
执行文件上传:
move_uploaded_file(临时文件名, 新文件名);
本函数检查文件是否是合法的上传文件
完整的文件上传步骤
1、判断错误号
2、判断文件的mime类型
3、判断文件的大小
4、生成随机的文件名
5、获取文件的后缀名
6、判断并执行文件上传
is_uploaded_file()
文件下载:
将文件从服务器下载到客户端
注意:如果浏览器能够识别该文件的mime类型,会直接解析;如果不能识别,则提供下载
所以,我要手动告诉浏览器,这是一个附件,你不要给我解析出来
步骤:
1.告诉它是一个附件
header('Content-disposition:attachment')
2.下载的文件没内容
在php输出的内容会被下载
用readfile()读取并输出
3.结合第1步,给文件取个名字
header('Content-disposition:attachment;filename=xxoo.jpg')
4.告诉它文件的大小
header('Content-length:'.filesize('文件路径'));
5.告诉它文件的类型
header('Content-type:image/jpeg');