文件相关函数/文件IO
文件信息相关
filetype()
filetype($filepath);获取文件的类型;返回的是文件的类型
- 返回文件的类型
- 参数:
filepath文件的路径 - 可能的值有
fifo,char,dir,block,link,file和unknown - 如果出错则返回
FALSE
<?php
$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 文件的路径
<?php
$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 文件的路径
<?php
$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要检查的文件名称
<?php
$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文件的路径
<?php
$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 文件的路径
<?php
$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__表示文件的完整路径和文件名
<?php
$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 中,斜线(/)和反斜线(\)都可以用作目录分隔符
- 在其它环境下是斜线(/)
<?php
$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,则不会输出这个扩展名。
<?php
$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 文件或目录的路径
<?php
$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
<?php
$file_path = "sort.php";
var_dump(unlink($file_path)); // true
rename()
rename($oldname,$newname,$path);重命名或者剪切一个文件或目录;返回布尔值;
- 尝试把
oldname重命名为newname - 返回值:成功时返回
TRUE, 或者在失败时返回FALSE - path 剪切一个文件或者目录的路径
- 同一个路径, 一般是重命名
<?php
$old_name = "sort.php";
$new_name = "sort2.php";
var_dump(rename($old_name,$new_name)); // true, 会把sort.php删掉, 新增一个sort2.php
- 如果路径不一样, 可以实现剪切的效果
<?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, 相当于下载
<?php
$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会创建一个新的文件
<?php
$file_path = "test.txt";
var_dump(fopen($file_path, 'r')); // resource
fread()
string fread ( resource
length )
-
fread() 函数读取打开的文件。
-
函数会在到达指定长度或读到文件末尾(EOF)时(以先到者为准),停止运行。
-
该函数返回读取的字符串,如果失败则返回 FALSE。
<?php
$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。
<?php
$file = fopen("test.txt","w");
echo fwrite($file,"Hello World. Testing!");
fclose($file);
fclose()
fclose($file)
-
fclose() 函数关闭打开的文件。
-
该函数如果成功则返回 TRUE,如果失败则返回 FALSE。
<?php
$file = fopen("test.txt","r");
//some code to be executed
fclose($file);
fgetc()
fgetc(file)
- 一次读取一个字符
<?php
$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])
- 一次读取一行字符, 包括结尾的换行符
<?php
$file = fopen("test.txt","r");
while (!feof($file)) {
echo fgets($file);
}
fgetss()
fgetss(file[,length[,tags]])
- 一次读取一行, 过滤html标签
fgetcsv()
fgetcsv(file[,length[,separator[,enclosure]]])
- 一次获取csv文件的一行, 把这一行内容转换成索引数组
<?php
$file = fopen("index.csv","r");
while ($arr = fgetcsv($file)) {
var_dump($arr);
}
fclose($file);
fputcsv()
fputcsv(file,fields[,seperator[,enclosure]])
- 数组转csv
<?php
$file = fopen("index.csv","r+");
$arr = [
'hello',
'world',
'!!!!'
];
var_dump(fputcsv($file, $arr));
file_get_contents()
- 根据路径, 把文件的内容, 保存到一个字符串中
- 必选参数为文件路径, 不用指定打开方式, 如果参数是一个网址, 返回网址对应的html源代码
- 需要开启php.ini里面的openssl,
extension=php_openssl.dll
<?php
$str = file_get_contents("index.csv");
var_dump($str);
file_put_contents()
- 把字符串保存到文件
- 把百度的源代码保存到本地
<?php
file_put_contents('baidu.html', file_get_contents('https://www.baidu.com'));
file()
- 函数把整个文件读入一个数组中。
- 根据换行, 一行是一个元素, 会保留后面的换行符
readfile()
- 读取文件内容, 保存到变量里
- 第一个参数: 文件路径
<?php
$str = readfile('test.txt');
var_dump($str);
parse_ini_file()
- 数解析一个配置文件,并以数组的形式返回其中的设置, 参数是一个路径
<?php
var_dump(parse_ini_file("C:\phpStudy\PHPTutorial\php\php-7.2.1-nts\php.ini"));
parse_ini_string()
- 把配置文件的字符串, 转换成关联数组, 参数是字符串
<?php
$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代码高亮, 参数是文件路径
<?php
var_dump(highlight_file('test.php'));