PHP是以UNIX文件系统为模型的,因此在windows系统中,我们只能获得”file”、”dir”、“unknown”三种文件类型。
在这里,我们着重讲解file和dir类型。
常用的有下面函数:
filetype()获取文件类型
is_file() 判断是否是普通文件类型
is_dir() 判断是否是目录类型
is_link() 判断是否是链接类型
filesize() 获取文件大小(单位是byte)
fileatime() 获取文件访问时间
filectime() 获取文件创建时间
filemtime()获取文件修改时间
is_readable() 判断文件是否可读
is_writable()判断文件是否可写
is_executable() 判断文件是否可执行
stat()可以获取文件的大部分属性(以数组方式返回)
如下代码:
<?php $filename="index.php"; echo filetype($filename);//file echo is_readable($filename);//1 echo is_writable($filename);//1 var_dump(is_executable($filename));//false echo date("Y-m-d H:i:s",filectime($filename)); echo date("Y-m-d H:i:s",fileatime($filename)); echo date("Y-m-d H:i:s",filemtime($filename)); echo "<hr/>"; echo round((filesize($filename)/1024),2)."kb";//0.35kb
<?php
$dir="G:/wamp/www/index.php";
//获取目录中文件
echo basename($dir);//index.php
echo basename($dir,".php");//index(过滤掉.php)
<?php
$dir="G:/wamp/www/index.php";
echo dirname($dir);//G:/wamp/www
<?php
$dir="G:/wamp/www/index.php";
print_r(pathinfo($dir));
//Array ( [dirname] => G:/wamp/www [basename] => index.php [extension] => php [filename] => index )
打开一个目录,返回资源类型的目录句柄
返回当前目录指针位置的文件名,并且指针移动到下一位
关闭指定目录
将目录指针重置到目录开始处
如下代码:遍历一个目录
<?php
header("content-type:text/html;charset=utf-8");
$dir="G:/wamp";
$handle=opendir($dir);
function listDir($handle,$dir,$number=0) {
while($file=readdir($handle))
{
$dirFile=$dir.DIRECTORY_SEPARATOR.$file;
if($file=="." || $file=="..")
continue;
echo str_repeat(" ",$number).$file." ";
echo round(filesize($dirFile)/1024,2)."KB"." ";
echo filetype($dirFile)." ";
echo filectime($dirFile)."<br/>";
if(is_dir($dirFile))
{
if($file=="." || $file=="..")
continue;
listDir(opendir($dirFile),$dirFile,$number+2);
}
}
closedir($handle);
}
listDir($handle,$dir);
建立目录:mkdir()
删除目录:rmdir()
但目录如果非空,则需要用unlink()删除目录的每个文件
//清空一个目录
<?php
header("content-type:text/html;charset=utf-8");
function deleteDir($dir) {
$handle=opendir($dir);
while($file=readdir($handle))
{
//如果是目录,就删除目录下的所有文件
if($file!="." && $file!=".."){
$subfile=$dir.DIRECTORY_SEPARATOR.$file;
if(is_file($subfile))
{
unlink($subfile);
}
if(is_dir($subfile))
{
deleteDir($subfile);
}
}
}
closedir($handle);
rmdir($dir);
}
mkdir("test");
deleteDir("test");
fopen(文件名,打开方式)
必须指定打开方式,指定打开方式,操作系统才知道对这个文件怎么操作(对这个文件加什么样的锁)
打开方式有下面几种:
r:只读方式
r+:读写方式
w:只写方式。清空文件开始写,文件不存在创建文件
w+:读写方式。清空文件开始读写,文件不存在创建文件
a:写入方式。从文件末尾开始写,文件不存在创建文件
a+:写入方式。从文件末尾开始读写,文件不存在创建文件
x:创建文件并以写入方式打开,如果文件存在,返回false
x+:创建文件并以读写方式打开,如果文件存在,返回false
fclose()关闭fopen()打开的额文件
即将程序中的数据写入一个文件中:
fwrite($handle,文件内容,[文件长度])
<?php
header("content-type:text/html;charset=utf-8");
$handle=fopen("text.txt","w");
for($i=0;$i<10;$i++)
{
fwrite($handle,($i+1)."heheehrwerer\r\n");//windows系统中,换行符是\r\n
}
fclose($handle);
快速写入:file_put_contents()
file_put_contents()和依次调用fopen()、fwrite(fputs())、fclose()一样。
<?php
clearstatcache();
$handle=fopen("text.txt","r");
//feof()用于判断文件是否到结尾
while(!feof($handle))
{
echo fread($handle,1024);
}
//或者使用
fread($handle,filesize("text.txt"));
注意:要想读取全部的文件,使用file_get_contents()性能高
fgetc()从文件中读取1个字符,遇到EOF返回
fgets($handle,length)
从文件中读取最多length-1个字符,如果忽略length,默认length为1024。
或者,fgtes()在遇到换行符或EOF时返回。
file()和file_get_contents()函数相似
不过file()函数将文件内容返回到数组中,数组中的每个元素是一行
<?php
print_r(file("text.txt"));
<?php
readfile("text.txt");//直接将text.txt文件内容输出到浏览器
ftell()返回当前文件指针位置
fseek($handle,offset)//默认从0开始移动offset个位置
SEEK_CUR 从当前指针处移动offset个位置
SEEK_END 从末尾指针向前移动offset个位置(offset是负数)
rewind()重置指针
<?php
$handle=fopen("text.txt","r");
echo fread($handle,2);//指针移动到2
echo ftell($handle);//2
fseek($handle,8,SEEK_CUR);//指针为2+8=10处
fseek($handle,-2,SEEK_END);//最后指针位置-2
echo ftell($handle);
锁,是为了控制文件并发。防止多个用户操作文件时,使文件发生数据不一致的情况。
flock($handle,$operation)
$operation的值为:
LOCK_SH 共享锁(读锁)
LOCK_EX 独占锁(写锁)
LOCK_UN 释放锁
使用flock()锁定的资源文件,可以被fclose()释放
文件上传与下载(一)
文件上传与下载(二)
文件上传与下载(三)