文件相关函数/文件IO
文件信息相关
filetype()
filetype($filepath);获取文件的类型;返回的是文件的类型
返回文件的类型
参数:filepath 文件的路径
可能的值有 fifo,char,dir,block,link,file 和 unknown
如果出错则返回 FALSE
$file_path = 'sort.php';
$dir_path = '../0809';
var_dump(filetype($file_path)); // file
var_dump(filetype($dir_path)); // dir
复制代码D:\php20190701\php_code\0810\filetype.php:6:string 'file' (length=4)
D:\php20190701\php_code\0810\filetype.php:7:string 'dir' (length=3)
复制代码
filesize()
filesize($filename);获取文件的大小;返回的是字节数;
返回文件大小的字节数,如果出错返回 FALSE 并生成一条 E_WARNING 级的错误
注意: 因为 PHP 的整数类型是有符号整型而且很多平台使用 32 位整型,对 2GB 以上的文件,一些文件系统函数可能返回无法预期的结果
参数:filename 文件的路径
$file_path = 'sort.php';
var_dump(filesize($file_path)); // 101字节
复制代码
filectime()
filectime($filename);获取文件的创建时间;返回的是时间戳;
返回文件创建的时间, 或者在失败时返回 FALSE
时间以 Unix 时间戳的方式返回
由于返回的是时间戳,可以使用date()函数修改日期和时区;
修改时区:date_default_timezone_set('PRC');
修改成可见日期:date('Y-m-d H:i:s',filectime($filename));
参数:filename 文件的路径
filemtime()
filemtime($filename);获取文件的修改时间;返回的是时间戳;
返回文件上次被修改的时间, 或者在失败时返回 FALSE
时间以 Unix 时间戳的方式返回,可用于 date()
(date()函数如上)
参数:filename 文件的路径
fileatime()
fileatime($filename);获取文件的最后访问时间;返回的是时间戳;
返回文件上次被访问的时间, 或者在失败时返回 FALSE
时间以 Unix 时间戳的方式返回
由于返回的是时间戳,可以使用date()函数修改日期和时区;
date()函数如上;修改时区和修改成可见日期;
参数:filename 文件的路径
$file_path = 'sort.php';
var_dump(date('Y-m-d H:i:s',filectime($file_path)));
var_dump(date('Y-m-d H:i:s',filemtime($file_path)));
var_dump(date('Y-m-d H:i:s',fileatime($file_path)));
复制代码D:\php20190701\php_code\0810\filetype.php:5:string '2019-08-10 10:52:53' (length=19)
D:\php20190701\php_code\0810\filetype.php:6:string '2019-08-10 11:15:33' (length=19)
D:\php20190701\php_code\0810\filetype.php:7:string '2019-08-10 10:52:53' (length=19)
复制代码
is_readable()
is_readable($filename);检测文件是否可读;返回布尔值;
如果由 filename 指定的文件或目录存在并且可读则返回 TRUE,否则返回 FALSE
参数:filename 文件的路径
is_writable()/is_writeable()
is_writable($filename)/is_writeable($filename);检测文件是否可写;返回布尔值;
如果文件 filename 存在并且可写则返回 TRUE
filename 参数可以是一个允许进行是否可写检查的目录名
is_writeable() 是 is_writable() 的别名
参数:filename 要检查的文件名称
$file_path = 'sort.php';
var_dump(is_readable($file_path));
var_dump(is_writable($file_path));
var_dump(is_writeable($file_path));
复制代码D:\php20190701\php_code\0810\filetype.php:5:boolean true
D:\php20190701\php_code\0810\filetype.php:6:boolean true
D:\php20190701\php_code\0810\filetype.php:7:boolean true
复制代码
is_executable()
is_executable($filename);检测文件是否可执行;返回布尔值;
判断给定文件名是否可执行
如果文件存在且可执行则返回 TRUE,错误时返回FALSE
FALSE表示文件不可执行;
参数:filename 文件的路径
$file_path = "C:\Users\Administrator\AppData\Local\Programs\Microsoft VS Code\Code.exe";
var_dump(is_executable($file_path)); // true
复制代码
is_file()
is_file($filename);检测是否为文件;返回布尔值;
判断给定文件名是否为一个正常的文件
如果文件存在且为正常的文件则返回 TRUE,否则返回 FALSE
注意: 因为 PHP 的整数类型是有符号整型而且很多平台使用 32 位整型,对 2GB 以上的文件,一些文件系统函数可能返回无法预期的结果
参数:filename 文件的路径
$file_path = 'sort.php';
$dir_path = '../0809';
var_dump(is_file($file_path)); // true
var_dump(is_file($dir_path)); // false
var_dump(is_dir($dir_path)); // true
复制代码
pathinfo()
pathinfo($filename);获取文件路径相关信息;返回一个关联数组;
参数为文件路径
返回一个关联数组包含有 path 的信息
返回关联数组还是字符串取决于 options
如果没有传入 options ,将会返回包括以下单元的数组 array:dirname,basename 和 extension(如果有),以 及filename
options例子:
echo pathinfo($filename,PATHINFO_EXTENSION);-------获取文件扩展名
options 如果指定了,将会返回指定元素;它们包括:
PATHINFO_DIRNAME
PATHINFO_BASENAME
PATHINFO_EXTENSION
PATHINFO_FILENAME
如果没有指定 options 默认是返回全部的单元
__FILE__表示文件的完整路径和文件名
$file_path = 'sort.php';
var_dump(pathinfo($file_path)); // true
复制代码D:\php20190701\php_code\0810\filetype.php:5:
array (size=4)
'dirname' => string '.' (length=1)
'basename' => string 'sort.php' (length=8)
'extension' => string 'php' (length=3)
'filename' => string 'sort' (length=4)
复制代码
dirname()
dirname($path);返回文件中的路径部分;
给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名
返回值:返回 path 的父目录
参数:path 一个路径
在 Windows 中,斜线(/)和反斜线(\)都可以用作目录分隔符
在其它环境下是斜线(/)
$file_path = 'C:\Users\Administrator\Downloads\Firefox Setup 69.0b11.exe';
$file_path2 = 'C:/Users/Administrator/Downloads/Firefox Setup 69.0b11.exe';
var_dump(dirname($file_path));
var_dump(dirname($file_path2));
复制代码D:\php20190701\php_code\0810\filetype.php:6:string 'C:\Users\Administrator\Downloads' (length=32)
D:\php20190701\php_code\0810\filetype.php:7:string 'C:/Users/Administrator/Downloads' (length=32)
复制代码
basename()
basename($filename,$suffix);返回路径中文件名部分;
给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名
参数:path 一个路径
在 Windows 中,斜线(/)和反斜线(\)都可以用作目录分隔符
在其它环境下是斜线(/)
第二个参数可选。规定文件扩展名。如果文件有 suffix,则不会输出这个扩展名。
$file_path = 'C:\Users\Administrator\Downloads\Firefox Setup 69.0b11.exe';
var_dump(basename($file_path));
复制代码D:\php20190701\php_code\0810\filetype.php:6:string 'Firefox Setup 69.0b11.exe' (length=25)
复制代码<?php
$file_path = 'C:\Users\Administrator\Downloads\Firefox Setup 69.0b11.exe';
var_dump(basename($file_path,".exe")); // 'Firefox Setup 69.0b11'
复制代码
file_exists()
file_exists($filename);检测文件或者目录是否存在;返回布尔值;
返回值:如果由 filename 指定的文件或目录存在则返回 TRUE,否则返回 FALSE
参数:filename 文件或目录的路径
$file_path = "sort.php";
$dir_path = "../0809";
$dir_path2 = "../080911";
var_dump(file_exists($file_path)); // true
var_dump(file_exists($dir_path)); // true
var_dump(file_exists($dir_path2)); // false
复制代码
文件操作相关
touch()
touch($filename,$time,$atime); 设定文件的访问和修改时间,如果文件不存在,则会创建文件;返回布尔值
参数:filename要设定的文件名
如果文件不存在,则会被创建
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE
time要设定的时间, 如果没有提供参数 time 则会使用当前系统的时间
atime如果给出了这个参数,则给定文件的访问时间会被设为 atime,否则会设置 为time
如果没有给出这两个参数,则使用当前系统时间
第二个参数: 设置修改时间
第三个参数: 设置访问时间
unlink()
unlink($filename,$context);删除文件;返回布尔值;
删除 filename
参数:filename文件的路径
发生错误时会产生一个 E_WARNING 级别的错误
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE
$file_path = "sort.php";
var_dump(unlink($file_path)); // true
复制代码
rename()
rename($oldname,$newname,$path);重命名或者剪切一个文件或目录;返回布尔值;
尝试把 oldname 重命名为 newname
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE
path 剪切一个文件或者目录的路径
同一个路径, 一般是重命名
$old_name = "sort.php";
$new_name = "sort2.php";
var_dump(rename($old_name,$new_name)); // true, 会把sort.php删掉, 新增一个sort2.php
复制代码如果路径不一样, 可以实现剪切的效果
$old_name = "sort2.php";
$new_name = "../sort2.php";
var_dump(rename($old_name,$new_name)); // true, 实现剪切的效果
复制代码
copy()
copy($filename,$path);拷贝一个文件;返回布尔值;
$filename, 文件名
$path, 拷贝到的路径
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE
注意: 拷贝远程文件需要开启PHP配置选项中的allow_url_fopen=On
远程copy, 相当于下载
$old_name = "sort.php";
$new_name = "sort2.php";
var_dump(copy($old_name,$new_name)); // true
复制代码<?php
$old_name = "http://pic68.nipic.com/file/20150601/2692994_151045402000_2.jpg";
$new_name = "1.jpg";
var_dump(copy($old_name,$new_name)); // 下载
复制代码
文件内容操作相关
fopen()
fopen(filename,mode)
fopen() 函数打开一个文件或 URL。
如果 fopen() 失败,它将返回 FALSE 并附带错误信息。
可以通过在函数名前面添加一个 '@' 来隐藏错误输出。
返回一个文件句柄(handle), 是一个资源类型, 需要配合其他函数使用
第二个参数: 如何打开, 打开方式
"r" (只读方式打开,将文件指针指向文件头)
"r+" (读写方式打开,将文件指针指向文件头)
"w" (写入方式打开,清除文件内容,如果文件不存在则尝试创建之)
"w+" (读写方式打开,清除文件内容,如果文件不存在则尝试创建之)
"a" (写入方式打开,将文件指针指向文件末尾进行写入,如果文件不存在则尝试创建之)
"a+" (读写方式打开,通过将文件指针指向文件末尾进行写入来保存文件内容)
如果找不到文件, r是会报错的, 但是a和w会创建一个新的文件
$file_path = "test.txt";
var_dump(fopen($file_path, 'r')); // resource
复制代码
fread()
string fread ( resource
length )
fread() 函数读取打开的文件。
函数会在到达指定长度或读到文件末尾(EOF)时(以先到者为准),停止运行。
该函数返回读取的字符串,如果失败则返回 FALSE。
$file_path = "test.txt";
$file = fopen($file_path, 'r');
var_dump(fread($file,99)); // hello world !
复制代码<?php
$file_path = "test.txt";
$file = fopen($file_path, 'r');
var_dump(filesize($file_path));
var_dump(fread($file,filesize($file_path))); // hello world !
复制代码
fwrite()|fput()
fwrite(file,string[,length])
fwrite() 函数将内容写入一个打开的文件中。
函数会在到达指定长度或读到文件末尾(EOF)时(以先到者为准),停止运行。
第二个参数, 可选, 最多可以写入多少个字符
如果函数成功执行,则返回写入的字节数。如果失败,则返回 FALSE。
$file = fopen("test.txt","w");
echo fwrite($file,"Hello World. Testing!");
fclose($file);
复制代码
fclose()
fclose($file)
fclose() 函数关闭打开的文件。
该函数如果成功则返回 TRUE,如果失败则返回 FALSE。
$file = fopen("test.txt","r");
//some code to be executed
fclose($file);
复制代码
fgetc()
fgetc(file)
一次读取一个字符
$file = fopen("test.txt","r");
for ($i=0; $i < filesize('test.txt'); $i++) {
echo fgetc($file);
}
while (!feof($file)) {
echo fgetc($file);
}
复制代码
fgets()
fgets(file[,length])
复制代码
一次读取一行字符, 包括结尾的换行符
$file = fopen("test.txt","r");
while (!feof($file)) {
echo fgets($file);
}
复制代码
fgetss()
fgetss(file[,length[,tags]])
复制代码
一次读取一行, 过滤html标签
fgetcsv()
fgetcsv(file[,length[,separator[,enclosure]]])
复制代码
一次获取csv文件的一行, 把这一行内容转换成索引数组
$file = fopen("index.csv","r");
while ($arr = fgetcsv($file)) {
var_dump($arr);
}
fclose($file);
复制代码
fputcsv()
fputcsv(file,fields[,seperator[,enclosure]])
复制代码
数组转csv
$file = fopen("index.csv","r+");
$arr = [
'hello',
'world',
'!!!!'
];
var_dump(fputcsv($file, $arr));
复制代码
file_get_contents()
根据路径, 把文件的内容, 保存到一个字符串中
必选参数为文件路径, 不用指定打开方式, 如果参数是一个网址, 返回网址对应的html源代码
需要开启php.ini里面的openssl, extension=php_openssl.dll
$str = file_get_contents("index.csv");
var_dump($str);
复制代码
file_put_contents()
把字符串保存到文件
把百度的源代码保存到本地
file_put_contents('baidu.html', file_get_contents('https://www.baidu.com'));
复制代码
file()
函数把整个文件读入一个数组中。
根据换行, 一行是一个元素, 会保留后面的换行符
readfile()
读取文件内容, 保存到变量里
第一个参数: 文件路径
$str = readfile('test.txt');
var_dump($str);
复制代码
parse_ini_file()
数解析一个配置文件,并以数组的形式返回其中的设置, 参数是一个路径
var_dump(parse_ini_file("C:\phpStudy\PHPTutorial\php\php-7.2.1-nts\php.ini"));
复制代码
parse_ini_string()
把配置文件的字符串, 转换成关联数组, 参数是字符串
$ini_string = '
xdebug.profiler_output_dir="C:\phpStudy\PHPTutorial\tmp\xdebug"
xdebug.trace_output_dir="C:\phpStudy\PHPTutorial\tmp\xdebug"
zend_extension="C:\phpStudy\PHPTutorial\php\php-7.2.1-nts\ext\php_xdebug-2.8.0beta1-7.2-vc15-nts.dll"
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
';
var_dump(parse_ini_string($ini_string));
复制代码
highlight_string()
把字符串中的php代码高亮, 参数是字符串
highlight_file()
把文件中的php代码高亮, 参数是文件路径
var_dump(highlight_file('test.php'));
复制代码