文件操作
文件类型
-
windows系统识别的文件类型
- file
- dir
- unknown
-
filetype()
判断文件类型- 文件不存在,返回false
<?php
$filename1= 'D:Program Filesxampphtdocsindex.php';
$filename2= 'D:Program Filesxampphtdocs';
$filename3= 'D:Program Filesxampphtdoc';
var_dump(filetype($filename1));
var_dump(filetype($filename2));
var_dump(filetype($filename3));
?>
file_exists()
判断文件是否存在- 文件存在,返回true
- 文件不存在,返回false
<?php
$filename1= 'D:Program Filesxampphtdocsindex.php';
$filename2= 'D:Program Filesxampphtdocs';
$filename3= 'D:Program Filesxampphtdoc';
var_dump(file_exists($filename1));
var_dump(file_exists($filename2));
var_dump(file_exists($filename3));
?>
文件属性
- 获取文件属性的函数
filesize
获取文件大小filectime
获取文件的创建时间filemtime
获取文件的修改时间fileatime
获取文件的上次访问时间is_readable
判断给定文件是否可读is_writable
判断给定文件是否可写is_executable
判断给定文件是否可执行is_file
判断给定文件是否为一个正常的文件is_dir
判断给定文件是否是一个目录stat
给出文件的信息
<?php
$filename= 'D:Program Filesxampphtdocsindex.php';
if(file_exists($filename)& is_file($filename)){
echo "文件大小为:".filesize($filename)."字节!<br>";
echo "文件的创建时间为:".date('Y年m月d日', filectime($filename))."<br>";
echo "文件的修改时间为:".date('Y年m月d日', filemtime($filename))."<br>";
echo "文件的访问时间为:".date('Y年m月d日', fileatime($filename))."<br>";
echo is_readable($filename)? "该文件可读<br>": "该文件不可读<br>";
echo is_writable($filename)? "该文件可写<br>": "该文件不可写<br>";
echo is_executable($filename)? "该文件可执行<br>": "该文件不可执行<br>";
echo "<pre>";
print_r(stat($filename));
echo "</pre>";
}else{
echo "该文件不存在!";
}
?>
文件操作
打开和关闭文件
fopen()
打开文件
<?php
$downURL= 'http://rrh2.ufile.ucloud.com.cn/iXiaoma.rar';
$file1= fopen('D:Program Filesxampphtdocslogin.html', 'r');
$file2= fopen('D:Program Filesxampphtdocslogin.html', 'w');
$file3= fopen($downURL, 'r');
$file4= fopen('ftp://user:password@example.com/index.html', 'w');
echo "{$file1}<br>";
echo "{$file2}<br>";
echo "{$file3}<br>";
echo "{$file4}<br>";
?>
fclose()
关闭文件- 成功返回 true
- 失败返回 false
<?php
$file= fopen('D:Program Filesxampphtdocslogin.html', 'r');
echo "文件打开成功!<br>".$file."<br>";
if(fclose($file)){
echo "文件关闭成功!";
}
?>
读取文件
fread()
用于在打开文件时读取指定长度的字符串
<?php
$filename= 'D:Program Filesxampphtdocserror_log.txt';
$file= fopen($filename, 'r');
$content= fread($file, 33);
echo "文件读取:{$content}<br>";
if(fclose($file)){
echo "文件关闭成功!<br>";
}
# 读取全文
$file= fopen($filename, 'r');
$contentAll= fread($file, filesize($filename));
echo "文件读取:{$contentAll}<br>";
if(fclose($file)){
echo "文件关闭成功!<br>";
}
?>
fgetc()
用于在打开的文件中读取一个字符
<?php
$filename= 'D:Program Filesxampphtdocserror_log.txt';
$file= fopen($filename, 'r');
$content= fgetc($file);
echo "文件读取:{$content}<br>";
if(fclose($file)){
echo "文件关闭成功!<br>";
}
?>
fgets()
用于在打开的文件中读取一行
<?php
$filename= 'D:Program Filesxampphtdocserror_log.txt';
$file= fopen($filename, 'r');
$content= fgets($file);
echo "文件读取:{$content}<br>";
if(fclose($file)){
echo "文件关闭成功!<br>";
}
?>
file_get_contents()
用于将文件的内容全部读取到一个字符串中
<?php
$filename= 'D:Program Filesxampphtdocserror_log.txt';
$content= file_get_contents($filename);
echo "文件读取:{$content}<br>";
?>
readfile()
用于将文件的内容全部输出到终端
<?php
$filename= 'D:Program Filesxampphtdocserror_log.txt';
readfile($filename);
?>
file()
将整个文件读入到数组中
<?php
$filename= 'D:Program Filesxampphtdocserror_log.txt';
$content= file($filename);
foreach($content as $key=>$value){
echo "{$key} : {$value}<br>";
}
?>
写入文件
fwrite()
用于写入文件fopen($filename, 'w')
只写模式,文件清空重写fopen($filename, 'a')
追加模式,文件追加续写
<?php
$filename= 'D:Program Filesxampphtdocssunny_log.txt';
$content= "塔萌萌
";
$file= fopen($filename, 'a');
echo "文件打开成功!<br>";
fwrite($file, $content);
if(fclose($file)){
echo "文件关闭成功!<br>";
}
?>
file_put_contents()
用于对文件进行写操作- 不需要打开文件
- 默认,文件清空重写
<?php
$filename= 'D:Program Filesxampphtdocssunny_log.txt';
$content= "塔萌萌啊
";
file_put_contents($filename, $content, FILE_APPEND);
echo '文件写入成功';
?>
文件加锁机制
flock()
实现文件加锁机制LOCK_SH
取得共享锁定(读文件时使用)LOCK_EX
取得独占锁定(写文件时使用)LOCK_UN
释放锁定(无论共享与独占,都用它释放)LOCK_NB
如果不希望 flock() 在锁定时堵塞,则给operation加上LOCK_NB
<?php
$filename= 'D:Program Filesxampphtdocssunny_log.txt';
$content= "塔萌萌啊
";
$file= fopen($filename, 'w+');
if(flock($file, LOCK_EX)){
fwrite($file, $content);
flock($file, LOCK_UN);
}else{
echo "文件不能被锁定!";
}
if(fclose($file)){
echo "文件关闭成功!<br>";
}
?>
二进制读取
fread()
实现二进制读取- 文件的存储有两种:字符流和二进制流
- 二进制流的读取按文件大小来读的
<?php
$path= 'D:Program Filesxampphtdocspig.jpg';
$file= fopen($path, 'r');
header('content-type:image/jpeg');
echo fread($file, filesize($path));
if(fclose($file)){
echo "文件关闭成功!<br>";
}
?>
file_get_contents()
实现二进制读取
<?php
$path= 'D:Program Filesxampphtdocspig.jpg';
header('content-type:image/jpeg');
echo file_get_contents($path);
?>
复制文件
copy()
用于实现拷贝文件的功能
<?php
$path= 'D:Program Filesxampphtdocspig.jpg';
$newPath= 'D:Program Filesxampphtdocsimgpig.jpg';
if(copy($path, $newPath)){
echo '拷贝成功';
}else{
echo '拷贝失败';
}
?>
重命名文件
rename()
用于实现文件或目录的重命名功能
<?php
$name= 'D:Program Filesxampphtdocspig.jpg';
$newName= 'D:Program Filesxampphtdocspiger.png';
$newPath= 'D:Program Filesxampphtdocsimgpigger.jpg';
rename($name, $newName);
echo '文件重命名成功'."<br>";
rename($newName, $newPath);
echo '文件重命名并指定新位置'."<br>";
?>
删除文件
unlink()
其作用是删除文件
<?php
$path= 'D:Program Filesxampphtdocsjerry.txt';
$file= fopen($path, 'a');
fwrite($file, "蜗萌
");
if(fclose($file)){
echo "文件关闭成功!<br>";
}
if(unlink($path)){
echo "文件删除成功!<br>";
}
?>
目录操作
解析目录
basename()
用于返回路径中的文件名
<?php
$path= 'D:Program Filesxampphtdocssunny.txt';
$file1= basename($path);
echo $file1."<br>";
$file2= basename($path, '.txt');
echo $file2."<br>";
?>
dirname()
用于返回路径中的目录部分
<?php
$path= 'D:Program Filesxampphtdocssunny.txt';
echo dirname($path);
?>
pathinfo()
用于以数组的形式返回路径的信息
<?php
$path= 'D:Program Filesxampphtdocssunny.txt';
echo '<pre>';
print_r(pathinfo($path));
echo '</pre>';
?>
遍历目录
opendir()
用于打开一个目录句柄
<?php
$dir= 'D:Program Filesxampphtdocs';
echo opendir($dir);
?>
-
closedir()
用于关闭目录句柄- 没有返回值
-
readdir()
用于从目录句柄中读取条目
<?php
$dir= 'D:Program Filesxampphtdocsimg';
if(is_dir($dir)){
if($dh= opendir($dir)){
while(($file= readdir($dh))!== false){
echo "filename:".$file."<br>";
}
closedir($dh);
echo "目录关闭成功!";
}
}
?>
rewindir()
用于倒回目录句柄
创建和删除目录
mkdir()
用于新建目录- 用于新建目录
- 单层目录创建于递归嵌套目录创建
<?php
if(mkdir('D:Program Filesxampphtdocspath')){
echo '路径创建成功!';
};
?>
- 创建说明
- 0777表示是文件夹的权限,在Linux中会详细讲解
- true表示递归创建,默认是false
<?php
$path= 'D:Program Filesxampphtdocspath1path2';
if(mkdir($path, 0777, true)){
echo '路径创建成功!';
};
?>
rmdir()
用于删除目录- 删除的文件夹必须是空的
- PHP基于安全考虑,没有提供递归删除。
<?php
$path1= 'D:Program Filesxampphtdocspath';
$path2= 'D:Program Filesxampphtdocspath1path2';
if(rmdir($path1)){
echo '路径删除成功!';
}else{
echo '路径删除失败!';
}
if(rmdir($path2)){
echo '路径删除成功!';
}else{
echo '路径删除失败!';
}
?>
统计目录中所有文件的大小
<?php
function getDirSize($dirname){
$dirsize= 0;
$filePath= opendir($dirname);
while($filename= readdir($filePath)){
if($filename!= '.'& $filename!= '..'){
$file= $dirname.'/'.$filename;
if(is_dir($file)){
$dirsize+= getDirSize($file);
}else{
$dirsize+= filesize($file);
}
}
}
closedir($filePath);
return $dirsize;
}
$dirname= 'D:Program Filesxampphtdocs';
echo $dirname.'目录中文件的总大小为:'.getDirSize($dirname).'B';
?>
其他目录操作
- 重命名文件夹 rename(旧名字,新名字)
<?php
echo is_dir('./aaa')?'是文件夹':'不是文件夹';
?>
- 打开文件夹、读取文件夹、关闭文件夹
- opendir()返回资源类型
- 每个文件夹中都有.和..
- iconv()用来做字符编码转换
<?php
$folder=opendir('./'); //打开目录
//var_dump($folder); //resource(3) of type (stream)
while($f=readdir($folder)){ //读取文件夹
if($f=='.' || $f=='..')
continue;
echo iconv('gbk','utf-8',$f),'<br>'; //将gbk转成utf-8
}
closedir($folder); //关闭文件夹
?>
查看磁盘大小或可用空间
<?php
echo disk_total_space("d:")."<br>";
echo disk_free_space("d:");
?>