在 Windows 中,斜线(/)和反斜线(\)都可以用作目录分隔符。在其它环境下是斜线(/)。
文件与目录
文件与目录
判断普通文件和目录
is_file( $filename ) : bool —— 判断给定文件名是否为一个普通文件
is_dir ( $filename ) : bool —— 判断给定文件名是都是一个目录,也就是文件夹
我的文件目录 D:\PHPStudy\phpstudy_pro\WWW\PHP\demo1
. 表示当前目录下的文件
./ 表示当前目录下的文件
../ 表示当前文件的目录的父目录文件
/ 表示文件的根目录,是当前文件的盘符,也就是 D盘
//相对路径
文件的属性
1. file_exists( $filename ) : bool —— 检查文件和目录是否存在
2. filesize( $filename ) : int —— 获取普通文件的大小,单位为字节
";//0
echo filesize("7/7-1.php");//5733 B
}
else{
echo filesize(__FILE__);//计算本文件的大小
}
?>
3. is_readable( $filename ) : bool—— 判断给定文件名是否可读取
4. is_writable( $filename ) : bool —— 判断给定文件名是否可以写入
5. filectime( $filename ) : int —— 获取文件创建时间
";//2020-04-09 21:23:59
echo date("Y-m-d H:i:s",filectime("7/7-1.php"));//2020-04-09 11:43:11
}
?>
6. filemtime( $filename ) : int —— 获取文件修改时间
";//2020-04-09 21:24:17
echo date("Y-m-d H:i:s",filemtime("7/7-1.php"));//2020-04-09 22:13:53
}
?>
7. fileatime( $filename ) : int —— 取得文件上次访问的时间
";//2020-04-09 21:24:17
echo date("Y-m-d H:i:s",fileatime("7/7-1.php"));//2020-04-09 22:13:53
}
?>
8. stat( $filename ) : array —— 获取文件大部分属性值
数字下标 | 关联键名(自 PHP 4.0.6) | 说明 |
---|---|---|
0 | dev | device number - 设备名 |
1 | ino | inode number - inode 号码 |
2 | mode | inode protection mode - inode 保护模式 |
3 | nlink | number of links - 被连接数目 |
4 | uid | userid of owner - 所有者的用户 id |
5 | gid | groupid of owner- 所有者的组 id |
6 | rdev | device type, if inode device * - 设备类型,如果是 inode 设备的话 |
7 | size | size in bytes - 文件大小的字节数 |
8 | atime | time of last access (unix timestamp) - 上次访问时间(Unix 时间戳) |
9 | mtime | time of last modification (unix timestamp) - 上次修改时间(Unix 时间戳) |
10 | ctime | time of last change (unix timestamp) - 上次改变时间(Unix 时间戳) |
11 | blksize | blocksize of filesystem IO * - 文件系统 IO 的块大小 |
12 | blocks | number of blocks allocated - 所占据块的数目 |
//数组分为两部分,前十三组为数字索引,后十三组为字符串索引,对应的值相等
";//26
foreach( $arr as $key => $val)
{
echo $key." —— ".$val."
";
}
// 0 dev —— 2
// 1 ino —— 0
// 2 mode —— 33206
// 3 nlink —— 1
// 4 uid —— 0
// 5 gid —— 0
// 6 rdev —— 2
// 7 size —— 1064
// 8 atime —— 1586490940
// 9 mtime —— 1586490940
// 10 ctime —— 1536996696
// 11 blksize —— -1
// 12 blocks —— -1
?>
9. lstat( $filename ) : array — 给出一个文件或符号连接的信息
lstat() 和 stat() 相同,只除了它会返回符号连接的状态
";//26
foreach( $arr as $key => $val)
{
echo $key." —— ".$val."
";
}
// 0 dev —— 2
// 1 ino —— 0
// 2 mode —— 33206
// 3 nlink —— 1
// 4 uid —— 0
// 5 gid —— 0
// 6 rdev —— 2
// 7 size —— 1064
// 8 atime —— 1586490940
// 9 mtime —— 1586490940
// 10 ctime —— 1536996696
// 11 blksize —— -1
// 12 blocks —— -1
?>
目录的基本操作
1. basename( suffix ] ) : string—— 返回路径中文件名部分
- suffix 结尾,就会去掉
2. dirname( $path ) : string —— 返回路径中的目录部分
3. pathinfo() —— 返回路径的信息
可以看出返回值有四个参数
- diranme —— 文件的父目录
- basename —— 文件名
- extension —— 文件后缀名
- filename —— 文件名
如果是目录(文件夹),则没有后缀名参数extension
C:\ [basename] => Windows [filename] => Windows )
print_r(pathinfo("7/7-1.php"));//Array ( [dirname] => 7 [basename] => 7-1.php [extension] => php [filename] => 7-1 )
print_r(pathinfo(__FILE__));
// [dirname] => D:\PHPStudy\phpstudy_pro\WWW\PHP\demo1 [basename] => 8-2.php [extension] => php [filename] => 8-2 )
?>
4. opendir ( context] ) : resource —— 打开目录句柄
可用于之后的 closedir(),readdir() 和 rewinddir() 调用中。
resource 表示 资源
$context —— resource类型
5. readdir ([ $dir_handle ] ) : string —— 从目录句柄中读取条目,返回目录中下一个文件的文件名
$dir_handle —— resource类型
// 一条一条的读取对应目录的文件
// 前两条命令为string(1) "." string(2) ".."
// 当到达最后没有文件的时候,返回false
";
var_dump(readdir($dir));//string(2) ".." , .. 表示父目录
echo "
";
var_dump(readdir($dir));//string(11) "Captcha.png"
echo "
";
var_dump(readdir($dir));//string(19) "Lobster-Regular.ttf"
echo "
";
var_dump(readdir($dir));//string(11) "segoesc.ttf"
echo "
";
var_dump(readdir($dir));//string(12) "segoescb.ttf"
echo "
";
var_dump(readdir($dir));//string(5) "t.jpg"
echo "
";
var_dump(readdir($dir));//bool(false)
echo "
";
?>
";
var_dump(readdir($dir));//string(2) ".." , .. 表示父目录
echo "
";
var_dump(readdir($dir));//string(19) "AceXGame_sys_23.dll"
echo "
";
var_dump(readdir($dir));//sstring(6) "addins"
echo "
";
?>
6. rewinddir ( $dir_handle ) : void —— 倒回目录句柄
$dir_handle —— resource类型
//使用此函数之后会重新开始读取目录文件
";
var_dump(readdir($dir));//string(2) ".." , .. 表示父目录
echo "
";
var_dump(readdir($dir));//string(11) "Captcha.png"
echo "
";
var_dump(readdir($dir));//string(19) "Lobster-Regular.ttf"
echo "
";
rewinddir($dir);
var_dump(readdir($dir));//string(1) ".", .表示当前目录
echo "
";
var_dump(readdir($dir));//string(2) ".." , .. 表示父目录
echo "
";
var_dump(readdir($dir));//string(11) "Captcha.png"
echo "
";
?>
7. closedir ([ $dir_handle ] ) : void —— 关闭目录句柄
$dir_handle —— resource类型
";
var_dump(readdir($dir));//string(2) ".." , .. 表示父目录
echo "
";
var_dump(readdir($dir));//string(11) "Captcha.png"
echo "
";
closedir($dir);
// var_dump(readdir($dir));//报错
?>
8. mkdir(mode],[content]):bool —— 新建目录
$dirname —— 文件目录
$mode —— 设置文件权限,默认权限0777,可读可写 —— int
$recursive —— 取值true 子目录嵌套也就是创建多层目录,默认false
$content —— resource类型
9. rmdir ( context ] ) : bool —— 删除指定的空目录
$content —— resource类型
1 && $str != false) {
if(rmdir("{$parent_file}"."/"."{$str}")){
echo "remove:{$str}"."
";
}
}
++$i;
}
if($true)
{
rmdir($parent_file);
}
}
removeAllFile("../demo3",true);
?>
10. scandir ( sorting_order ],[ $context ] ) : array—— 列出指定路径中的文件和目录
$directory —— 浏览的目录
$sorting_order —— 文件的排序,默认排序是按照字母升序排列,若为 1 ,则为降序排列,—— int
$context —— 资源类型
用这个删除文件就方便了多了
. [1] => .. [2] => adio_1 [3] => adio_2 [4] => adio_3 [5] => adio_4 )
?>
文件的基本操作
1. fopen() —— 打开文件或者 URL
fopen()
fopen ( $filename , $mode ,[$use_include_path = false], [ $context ]] ) : resource
$filename —— 目录
$mode —— 访问类型
$use_include_path —— 如果也需要在 include_path 中搜寻文件的话,可以将可选的第三个参数 use_include_path 设为 '1' 或 TRUE。
$context —— 资源resource类型
mode | 说明 | |
---|---|---|
'r' | 只读方式打开,将文件指针指向文件头。 | |
'r+' | 读写方式打开,将文件指针指向文件头。 | |
'w' | 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 | |
'w+' | 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 | |
'a' | 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 | |
'a+' | 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 | |
'x' | 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL | O_CREAT 标记是等价的。 |
'x+' | 创建并以读写方式打开,其他的行为和 'x' 一样。 |
2. fread() —— 读取文件
fread ( $handle , $length ) : string
$handle —— 打开的资源resource类型文件,——resource
$length —— 要读取length长度个字符
3. fgets() —— 从文件指针中读取一行
fgets ( $handle,[ $length ] ) : string
$handle —— 打开的资源resource类型文件,——resource
$length —— 每一行读取 $length - 1 个字符,然后多余的会调到下一行
";
echo fgets($file,3);
echo "
";
echo fgets($file);
echo "
";
echo fgets($file);
// 1111
// 22
// 2
// 33
?>
4. feof() —— 测试文件指针是否到了文件结束的位置
feof ($handle ) : bool
$handle —— 打开的资源resource类型文件,——resource
5. fwrite() —— 写入文件(可安全用于二进制文件)
fwrite ( $handle , $string, [int $length ] ) : int
$handle —— 打开的资源resource类型文件,——resource
$string —— 要写入的字符串
$length —— 写入length长度的字符,超过此长度就不会写入了
返回值: —— 字符串长度
6. rewind() —— 倒回文件指针的位置
rewind ( resource $handle ) : bool
将 handle 的文件位置指针设为文件流的开头。
7. flock() —— 轻便的咨询文件锁定
设置锁定,防止多人同时修改,造成堵塞
flock ( $handle , $operation , [&$wouldblock] ) : bool
$handle —— 打开的资源resource类型文件,——resource
operation —— 取值:
LOCK_SH取得共享锁定(读取的程序)。
LOCK_EX 取得独占锁定(写入的程序。
LOCK_UN 释放锁定(无论共享或独占)。
&$wouldblock —— Windows 上不支持
当修改完成,记得解锁,还是使用函数,修改第二个参数
8. fclose() —— 关闭一个已打开的文件指针
fclose ( $handle ) : bool
9. fseek() — 在文件指针中定位
fseek ( $handle , $offset, [ $whence = SEEK_SET ] ) : int
$offset —— 偏移量。
$whence —— 取值:
SEEK_SET - 设定位置等于 offset 字节。
SEEK_CUR - 设定位置为当前位置加上 offset。
SEEK_END - 设定位置为文件尾加上 offset。
10. file() —— 把整个文件读入一个数组中
file ( $filename ,[$flags = 0], [ $context ] ) : array
$filename —— 文件的路径。
$flags: 取值:
FILE_USE_INCLUDE_PATH —— 在 include_path 中查找文件。
FILE_IGNORE_NEW_LINES——在数组每个元素的末尾不要添加换行符
FILE_SKIP_EMPTY_LINES——跳过空行
$context —— 资源resource类型
//测试感觉flags的参数没什么用
1111 [1] => [2] => 222 [3] => 33 [4] => 466565 )
echo "
";
print_R(file("../Img/index.txt",FILE_USE_INCLUDE_PATH));//Array ( [0] => 1111 [1] => [2] => 222 [3] => 33 [4] => 466565 )
echo "
";
print_r(file("../Img/index.txt",FILE_IGNORE_NEW_LINES));//Array ( [0] => 1111 [1] => [2] => 222 [3] => 33 [4] => 466565 )
echo "
";
print_r(file("../Img/index.txt",FILE_SKIP_EMPTY_LINES));//Array ( [0] => 1111 [1] => [2] => 222 [3] => 33 [4] => 466565 )
?>
11. copy() —— 拷贝文件
copy ( $source , $dest ,[ $context ] ) : bool
$source —— 源文件
$dest —— 目标路径,如果目标文件已存在,将会被覆盖
$context —— 资源resource类型
12. unlink() —— 删除文件
unlink ( $filename , [ $context ] ) : bool
$filename —— 文件的路径。
$context —— 资源resource类型
13. file_get_contents() —— 将整个文件读入一个字符串
file_get_contents ( $filename ,[ $use_include_path = false], [ $context], [ $offset = -1], [$maxlen ] ) : string
$filename —— 文件的路径。
use_include_path —— 从PHP 5开始,FILE_USE_INCLUDE_PATH可用于触发包含路径include path搜索。
$context —— 资源resource类型,可以用 NULL 来忽略。
$offset —— 从原始流开始读取的偏移量。
$maxlen —— 读取的最大数据长度。默认设置为读取直到到达文件末尾。
14. file_put_contents() —— 将字符串写入文件中
file_put_contents ( $filename , $data ,[ $flags = 0], [ $context ] ) : int
$filename —— 文件的路径
$data —— 要写入的数据
flags
flags 的值可以是 以下 flag 使用 OR (|) 运算符进行的组合。
FILE_USE_INCLUDE_PATH 在 include 目录里搜索 $filename。
FILE_APPEND 如果文件 $filename 已经存在,追加数据而不是覆盖。
LOCK_EX 在写入时获得一个独占锁。
//返回值为字符串的长度
15. rename() —— 重命名一个文件或目录
rename ( $oldname , $newname [ $context ] ) : bool
16. readfile() —— 读入一个文件,并写入到输出缓冲
readfile ( $filename, [ $use_include_path = false], [ $context ] ) : int
filename —— 要读取的文件名。
use_include_path
想要在 include_path 中搜索文件,可使用这个可选的第二个参数,设为 TRUE。
17. ftruncate() — 将文件截断到给定的长度
ftruncate ( $handle , $size ) : bool
$handle —— 文件指针。
$size —— 截断到的大小。
如果 $size 大于文件,则文件将扩展为空字节。
//文件内容会为$size大小
18. ftell — 返回文件指针读/写的位置
ftell ( resource $handle ) : int
//请注意Window中的换行——\r\n
19. fflush() — 将缓冲内容输出到文件
fflush ( resource $handle ) : bool
文件指针必须是有效的,必须指向由 fopen() 或 fsockopen() 成功打开的文件(并还未由 fclose() 关闭)。
缓存机制:
当进行文件操作,修改内容,之前的内容会计入缓存机制,然后当调用时就会使用
文件的上传
上传文件的过程不需要管理,是自动的,上传的文件会存放到临时目录中,实际操作就是将该目录中的文件转移到我们需要的地方
HTML标签上传设置
form标签设置
(1) method 设置为 post
(2) enctype 设置为 multipart/form-data
(3) form表单中设置隐藏类型的input,其中name设置为MAX_FILE_SIZE,value值设置为需要限制的上传文件的大小(单位:字节)
//注意 name 会在后期的上传中使用
//$_POST['submit'] 此处是用来 sumbit
//$_FILES["myfile"]["name"] 此处的 myfile
配置文件
php.ini 配置文件
php.ini 配置 :https://www.php.net/manual/zh/ini.php
集成环境直接搜索文件,然后进行操作
- PHPstudy 应该是在 phpstudy_pro\Extensions\php 目录下
- Wampserver 应该在 此软件目录 Apache\bin 下
配置项 | 默认值 | 描述 |
---|---|---|
file_uploads | ON | 确定服务器上的PHP脚本是否可以接受HTTP文件上传 |
memory_limit | 8M | 设置脚本可以分配的最大内存量,防止失控的脚本独占服务武器 |
upload_max_filesize | 2M | 限制PHP处理上传文件的最大值,此值必须小于post_max_size |
post_max_size | 8M | 限制通过POST方法可以接受的信息需大量 |
upload_tmp_dir | NULL | 上传文件存放的临时路径,可以是绝对路径,此目录对于拥有此服务器进程的用户必须是可写的,如果未指定,PHP将使用系统的默认值。 |
根据各人需要进行修改:
注意:
post_max_size 要大于 upload_max_filesize
我的设置:
有些默认值感觉也可以,不要改的
file_uploads = On
memory_limit=256M
upload_max_filesize=100M
post_max_size=200M
upload_tmp_dir = ""
$_FILES 多维数组
用于存储各种与上传文件有关的信息
值 | 描述 |
---|---|
$_FILES[ 'file' ][ 'name' ] | 客户端机器文件的原名称,包含扩展名 |
$_FILES[ 'file' ][ 'size' ] | 已上传文件的大小,单位字节 |
$_FILES[ 'file' ][ 'tmp_name' ] | 文件上传之后,在服务器端存储的临时文件名 |
$_FILES[ 'file' ][ 'error' ] | 文件上传时产生的错误,0 —— 表示没有发生任何错误,上传成功 。1 —— 表示长传的文件大小超出了在PHP配置文件中upload_max_filesize 选项限制的值 。 2 —— 表示上传文件大小超出HTMl表单找那个 MAX_FILE_SIZE 选项所指定的值 |
$_FILES[ 'file' ][ 'type' ] | 获取客户端上传文件的MIME类型 |
MIME类型 规定了各种文件格式的类型,每种MIME类型都是由 " / " 分隔 的主类型 和 子类型组成
当文件上传成功之后,不会显示在upload_tmp_dir设置的 目录里,因为上传的文件被销毁,该文件是临时文件,当刚上传的时候,可以看到闪一下就没了
函数处理
- is_uploaded_file() —— 判断 指定的文件是否通过HTTP POST 上传
is_uploaded_file ( string $filename ):布尔
filename —— 正在检查文件名。
函数is_uploaded_file()需要一个$ _FILES ['file'] ['tmp_name']之类的参数
客户端计算机$ _FILES ['file'] ['name']上载文件的名称不行。
- move_uploaded_file() —— 文件上传后,首先会存储于服务器的临时目录中,使用此函数将文件移动到新位置
move_uploaded_file ( string $filename , string $destination ):布尔
filename —— 上传文件的文件名。
destination —— 移动文件的目的地。
例子
文件上传
文件的下载
浏览器无法打开,就会产生下载
发送指定的文件MIME类型的头文件
header("Content-type: MIME 类型");
File Information 扩展
获取文件MIME类型, PHP 扩展,PHP版本低,可能需要下载
finfo_open() —— 创建一个 fileinfo 资源
finfo_open ([ int $options= FILEINFO_NONE ],[ string $magic_file=“” ]):resource
options —— 一个 Fileinfo 常量 或多个 Fileinfo 常量 进行逻辑或运算。
magic_file —— 魔数数据库文件名称, 通常是 /path/to/magic.mime。 如果未指定,则使用 MAGIC 环境变量。 如果未指定此环境变量, 则使用 PHP 绑定的魔数数据库。
传入 NULL 或者空字符串,等同于使用默认值。
一个 Fileinfo 常量 : https://www.php.net/manual/zh/fileinfo.constants.php
$file_finfo = finfo_open(FILEINFO_MIME_TYPE);//返回文件的 mime 编码
finfo_file() —— 返回一个文件的信息
finfo_file ( resource $finfo , string $file_name = NULL ,[ int $options = FILEINFO_NONE ], [ resource $context = NULL ] ) : string
$finfo —— finfo_open() 函数所返回的 fileinfo 资源。
file_name —— 要检查的文件名。
options —— 一个 Fileinfo 常量 或多个 Fileinfo 常量 进行逻辑或运算。
$context —— 资源resource类型
返回 file_name 参数指定的文件信息。 发生错误时返回 FALSE 。
$file = "D:\PHPStudy\phpstudy_pro\NewFile\download\太阳能作业.zip";
$file_finfo = finfo_open();
var_dump(finfo_file($file_finfo,$file,FILEINFO_MIME_TYPE));//string(15) "application/zip"
//返回zip文件的MIME编码
finfo_close() — 关闭 fileinfo 资源
finfo_close ( resource $finfo ) : bool
finfo_close($file_finfo);
finfo_buffer() —— 返回一个字符串缓冲区的信息
finfo_buffer ( resource $finfo , string $string = NULL [int $options = FILEINFO_NONE], [ resource $context = NULL ] ) : string
$finfo —— finfo_open() 函数所返回的 fileinfo 资源。
$string —— 要检查的文件内容。
options —— 一个 Fileinfo 常量 或多个 Fileinfo 常量 进行逻辑或运算。
$context —— 资源resource类型
返回 string 参数所指定内容的类型描述。 发生错误时返回 FALSE 。
var_dump(finfo_buffer($file_finfo,$file,FILEINFO_MIME_TYPE));//string(10) "text/plain"
指定下载文件的描述
header("Content-Disposition:attachment;filename=文件名称")
指定下载文件的大小
header("Content-length:文件大小");
读取文件内容至输出缓冲区
readfile();
例子