File Function.php
来源:原创
时间:2016-07-23
作者:脚本小站
分类:代码笔记
<?php
//============================================================
//------------------删除文件夹中所有的文件-------------------
/**
* 删除文件夹中所有的文件,不包括文件夹
*
* @param $path 路径 如./path/dir/
*/
function delete_all_files_in_the_directory($path){
$dir = opendir($path);
while($file = readdir($dir)){
$full_path = $path.'/'.$file;
if($file != '.' and $file != '..'){
if(is_file($full_path)){
unlink($full_path);
}else{
delete_all_files_in_the_directory($full_path);
}
}
}
closedir($dir);
}
//====================文件类型与属性信息======================
//------------------------------------------------------------
filetype //返回文件或目录的字符串类型
filetype("Hello.txt");
filetype("Hello");
//判断文件类型
if(filetype=="dir"){
echo "This is dir";
}else{
echo "This is file";
}
//判断文件
is_file //判断文件是否正常的文件
is_dir* //判断给定文件名是否是一个目录
is_readable //判断文件是否可读
is_link //判断给定文件名是否为一个符号连接
is_writable //判断给定的文件名是否可写
is_executable* //判断给定文件名是否可执行
is_link //判断给定文件名是否为一个符号连接
is_writable* //判断给定的文件名是否可写
is_writeable //is_writable()的别名
is_readable* //判断给定文件名是否可读
is_uploaded_file* //判断文件是否是通过 HTTP POST 上传的
//---------------------------------------------------------
//-------------------判断文件类型与大小-------------------
function GetFilePro($FileName){
if(!file_exists($FileName)){
echo "File or dir ".$FileName."is not exists<br>";
return;
}else{
echo "Filetype is ".filetype($FileName)."<br>";
}
if(is_file($FileName)){
echo "This is file<br>";
echo "File size is ".filesize($FileName)."<br>";
}
if(is_dir($FileName)){
echo "This is dir<br>";
}
if(is_readable($FileName)){
echo "This file can read<br>";
}
if(is_writable($FileName)){
echo "This file can write<br>";
}
if(is_executable($FileName)){
echo "This file can execute<br>";
}
//输出文件的创建,修改,访问时间
echo "File creation date is ".date('Y-m-d H:i:s',filectime($FileName)) ."<br>";
echo "File modification time is ".date('Y-m-d H:i:s',filemtime($FileName)) ."<br>";
echo "File access time is ".date('Y-m-d H:i:s',fileatime($FileName))."<br>";
}
GetFilePro("hello.html");
//---------------------------------------------------------
//----------------------时区设置---------------------------
date_default_timezone_set('PRC'); //将时区设置成中华人民共和国
//---------------------------------------------------------
//-------------------文件大小单位判断---------------------
/**
* 返回人性化显示文件大小名称
* @param $FileSize int 文件大小
* @return String 加单位名称文件大小
*/
function GetFileSize($FileSize){//参数:文件大小
$Unit="Byte";
if($FileSize>=pow(2,40)){
//文件大小除以二的四十次方并保留两位小数
$FileSize=round($FileSize/pow(2,40),2);
$Unit="TB";
}else if($FileSize>=pow(2,30)){
$FileSize=round($FileSize/pow(2,30),2);
$Unit="GB";
}else if($FileSize>=pow(2,20)){
$FileSize=round($FileSize/pow(2,20),2);
$Unit="MB";
}else if($FileSize>=pow(2,10)){
$FileSize=round($FileSize/pow(2,10),2);
$Unit="KB";
}else{
$Unit="Byte";
}
return $FileSize.$Unit;
}
//---------------------------------------------------------
//-------------------stat()取得文件信息-------------------
//取得文件信息
echo "<pre>";
print_r(stat('hello.html'));
echo "</pre>";
/* Array
(
[0] => 2
[1] => 0
[2] => 33206
[3] => 1
[4] => 0
[5] => 0
[6] => 2
[7] => 341
[8] => 1384532912
[9] => 1384532912
[10] => 1384532085
[11] => -1
[12] => -1
[dev] => 2
[ino] => 0
[mode] => 33206
[nlink] => 1
[uid] => 0
[gid] => 0
[rdev] => 2
[size] => 341
[atime] => 1384532912
[mtime] => 1384532912
[ctime] => 1384532085
[blksize] => -1
[blocks] => -1
)*/
//---------------------------------------------------------
//---------------------文件缓存实例-----------------------
$CacheTime=5; //缓存时间
$CacheFile="hello.txt";
if(file_exists($CacheFile) && (time()-$CacheTime) < filemtime($CacheFile)){
echo file_get_contents($CacheFile); //如果缓存在缓存时间类就读出缓存数据
}else{
file_put_contents($CacheFile,date('Y-m-d H:i:s',time()));
}
//=============================================================
//-------------------文件路径及操作权限-----------------------
. //当前目录
.. //上一级目录
basename($url) //取路径的文件名
dirname($url) //取路径的路径部分
//---------------------------------------------------------
//-----------------pathinfo()取出路径信息-----------------
$URL="C:/lamp/apache2/htdocs/hello.html";
echo "<pre>";
print_r(pathinfo($URL));
echo "</pre>";
/*Array
(
[dirname] => C:/lamp/apache2/htdocs
[basename] => hello.html
[extension] => html
[filename] => hello
)*/
//---------------------------------------------------------
//--------------------文件的操作--------------------------
//删除文件
unlink("./Hello.php");
//拷贝文件
copy("./Test/Old.php","./New.php");
//创建文件
touch("./Hello.php")
//移动文件
rename("./Old.php","./Hello/New.php",[$Content]);
//---------------------------------------------------------
//---------------------文件权限----------------------------
7 7 7 4+2+1 4+2+1 4+2+1
r w x r w x r w x
//改变文件模式
chmod("./Hello.php",0755);
//改变文件的所有者
chown("admin","./Hello.php");
//改变文件所属的组
chgrp("./Hello.php","admin");
filegroup //取得文件的组
fileowner //取得文件的所有者
//=============================================================
//---------------------文件的读写与操作-----------------------
//--------------------读取函数-----------------------------
//1.把整个文件读入一个字符串中
file_get_contents();
//2.把整个文件读入一个数组中,一行就是一个数组元素
file();
//3.读取文件若成功,则返回从文件中读入的字节数
readfile();
//4.
fopen();
fread(); //读取指定长度
fgetc(); //读取单个字符
fgets(); //读取一行字符
feof(); //读取文件出错或结尾返回真
fclose(); //关闭fopen打开的文件
//---------------------------------------------------------
//---------------------写入函数----------------------------
//1.
$File = fopen("./Test.txt");
fwrite($File,"Hello\n");
//2.
file_put_contents("Test.txt","Hello",FILE_APPEND);
FILE_APPEND//追加法术
//---------------------------------------------------------
//------------------------例-------------------------------
//1.读取文件(覆盖重写)
$str = file_get_contents("Test.txt");
echo $str;
//2.读取一个文件并输出,不用echo
readfile("./Hello.php");
//3.将文件中的每一行作为数组的一个元素
$Arr=file("./Test.txt");
echo "<pre>";
print_r($Arr);
echo "</pre>";
/*Array
(
[0] => Hello
[1] => How are you
[2] => I am fine
[3] => Thank you
[4] => And You
)*/
//统计行数
echo count($Arr);
//4.
//---------------------------------------------------------
//-----------------------fread()---------------------------
//读取本地文件
$File=fopen("./Test.txt","r");
echo fread($File,filesize("./Test.txt"));
fclose($File);
//读取远程文件
$File=fopen("http://www.baidu.com","r");
$str="";
while(!feof($File)){
$str.=fread($File,100);
}
echo $str; //输出字符串
fclose($File);
//---------------------------------------------------------
//------------------------fgets()--------------------------
//每次读取一行
$File=fopen("./Test.txt","r");
$str="";
$i=0;
while(!feof($File)){
$str.=fgets($File);
$i++;
}
echo $i; //输出行数
fclose($File);
//---------------------------------------------------------
//------------------------fgetc()--------------------------
//每次读取单个字符
$File=fopen("./Test.txt","r");
$str="";
$i=0;
while(!feof($File)){
$str.=fgetc($File);
$i++;
}
echo $i; //输出字符数
fclose($File);
//---------------------------------------------------------
//------------------------fopen()--------------------------
//"+"表示读写
r //只读
r+
w //只写,创建,重写
w+
a //只写,创建,追加
a+
b //二进制打开 (rb 读二进制 wb 写二进制)
t //文本模式打开
//fopen返回文件资源
$File=fopen("./Test.txt","w");
for($i=0;$i < 10;$i++){
fwrite($File,"Hello\n");
}
fclose($File);
//========================文件指针============================
//------------------------------------------------------------
ftell($file); //返回指针位置
fseek($file,10); //指定指针位置
fseek($file,10,SEEK_SET); //开始位置后十个(默认)
fseek($file,10,SEEK_CUR); //当前位置后十个
fseek($file,-10,SEEK_END); //结尾位置前十个
fread(); //读多少指针移动多少
rewind(); //回到文件头部
//---------------------------------------------------------
//----------------------ftell()----------------------------
$file=fopen("./Test.txt","r");
echo ftell($file)."<br>"; //输出指针位置
echo fread($file,10)."<br>";
echo ftell($file)."<br>";
fclose($file);
//---------------------------------------------------------
//-----------------------fseek()---------------------------
$file=fopen("./Test.txt","r");
echo fread($file,6);
fseek($file,2); //将文件指针移到文件开头后两个
echo fread($file,6);
fclose($file);
//---------------------------------------------------------
//------------------------rewind()-------------------------
$file=fopen("./Test.txt","r");
echo ftell($file);
echo fread($file,6);
rewind($file); //将指针移到开头
echo ftell($file);
fclose($file);
//===========================文件锁============================
//------------------------------------------------------------
flock($file,LOCK_SH); //读文件锁
flock($file,LOCK_EX); //写文件锁
flock($file,LOCK_UN); //释放锁
//---------------------------------------------------------
//------------------------flock()--------------------------
//读文件加锁
if(flock($file,LOCK_SH)){ //加读文件锁
$str=fread($file,filesize($fileName));
flock($file,LOCK_UN); //开锁
}
//写文件加锁
if(flock($file,LOCK_EX)){ //加写文件锁
fwrite($file,$contents);
flock($file,LOCK_UN); //开锁
}
//============================================================
//------------------------目录的操作-------------------------
//目录遍历
opendir //打开目录
readdir //遍历目录
closedir //关闭目录
rewinddir //目录指针倒回
scandir //列出指定路径中的文件和目录
getcwd //取得当前工作目录
chdir //改变目录
chroot //改变根目录
//---------------------------------------------------------
//--------------------目录与文件遍历----------------------
//打开目录
$dir = opendir("./");
//循环目录
while ($fileName = readdir($dir)){
echo "filename: ".$fileName."<br/>"; //输出目录与文件
}
//关闭目录
closedir($dir);
//---------------------------------------------------------
//------------------判断是文件还是目录--------------------
$dirName="hello";
$dir = opendir($dirName);
while ($fileName = readdir($dir)){
$subDirName=$dirName."./".$fileName; //$file当前目录下的文件
if(is_dir($subDirName)){
echo "dirname: ".$fileName."<br>";
}else{
echo "filename: ".$fileName."<br>";
}
}
closedir($dir);
//---------------------------------------------------------
//-------------------统计目录大小-------------------------
/**
* 统计目录大小
* @param $dirName String 目录所在路径
* @return String 返回一个目录的大小
*/
function dirSize($dirName){
$dirSize=0;
//打开目录
$dir=opendir($dirName);
//遍历目录
while($fileName = readdir($dir)){
$subDirName=$dirName.'/'.$fileName;
if($fileName!="." && $fileName!=".."){
if(is_dir($subDirName)){
$dirSize+=dirSize($subDirName);//如果是文件夹则递归调用自己
}else{
$dirSize+=filesize($subDirName);//累加文件大小
}
}
}
closedir($dir);//关闭目录
return $dirSize;
}
//函数调用
echo dirSize("www");
//---------------------------------------------------------
//------------------------mkdir()--------------------------
//创建目录
mkdir("dirName","755");
//---------------------------------------------------------
//------------------------删除目录------------------------
/**
* 删除目录
* @param $dirName 目录所在路径
* @return boolean 删除是否成功
*/
function delDir($dirName){
//判断是否存在
if(file_exists($dirName)){
$dir=opendir($dirName);
//遍历目录
while($fileName=readdir($dir)){
if($fileName!="." && $fileName!=".."){
$subDirName=$dirName."/".$fileName;
if(is_dir($subDirName)){
delDir($subDirName);//递归
}else{
unlink($subDirName);//删除文件
}
}
}
closedir($dir);//关闭目录
$rmdir=rmdir($dirName);
}
return $rmdir;
}
//调用
delDir("hello");
//---------------------------------------------------------
//------------------------移动函数-------------------------
rename("hello","hello/Test");
//------------------------------------------------------------
//-----------------------复制目录函数------------------------
//参数:源目录,目标目录
/**
* 复制目录函数
* @param $dirSource 要拷贝的目录
* @param $dirDestination 将文件要拷贝到的目录
*/
function copyDir($dirSource,$dirDestination){
//目标是文件则停止复制
if(is_file($dirDestination)){
echo "It is not Directory";
return ;
}
//目标文件不存在则复制文件
if(!file_exists($dirDestination)){
mkdir($dirDestination);
}
//打开文件夹
$dir=opendir($dirSource);
//循环操作目录文件
while($fileName=readdir($dir)){
if($fileName!="." && $fileName!=".."){
//源文件夹的子文件夹
$subDirNameSource=$dirSource."/".$fileName;
//目标文件夹的子文件夹
$subDirNameDestination=$dirDestination."/".$fileName;
if(is_dir($subDirNameSource)){
copyDir($subDirNameSource,$subDirNameDestination);//递归
}else{
//如果是文件,则从源目录拷贝到目标目录
copy($subDirNameSource,$subDirNameDestination);
}
}
}
closedir($dir);
}
//调用函数
copyDir("hello","nihao");
//============================================================
//---------------------------文件下载-------------------------
/*
1.请求(顺序)
1.HTTP 1.1 协议 版本
2.头信息
3.表单信息
2.响应(顺序)
1.状态 200ok(正常) 或 404 (页面没找到)
2.响应头信息
3.数据发送
*/
//下载链接显示名
$fileName="hello.html";
//发送头信息
header('Content-Disposition: attachment; filename='.$fileName);
//读取文件并直接发送
readfile('hello.html');
//============================================================
//-------------------------文件上传---------------------------
//php.ini配置文件中上传相关的选项
//开启上传功能
file_uploads = on
//上传文件的最大值,勿超过内存大小
upload_max_filesize = 20M
//文件临时存储的位置,脚本执行完文件自动删除,一般不指定默认即可
upload_tmp_dir = c:/upload/...
//post所有值的最大尺寸,必须大于文件上传的值
post_max_size = 25M
//上传表单书写方式
//1.必须用post方法提交
//2.表单类型为type="file"
//3.表单数据的编码方式enctype="multipart/form-data"
//4.用$_FILES 接收表单信息
//5.多文件上传时将表单name名改为数组形式name="pic[]"
/*
<form action="" method="post" enctype="multipart/form-data" >
<input type="file" name="pic[]" />
<input type="file" name="pic[]" />
//上传文件超过指定值时的提示
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
</form>
*/
//$_FILES 数组中的信息
/*Array
(
[pic] => Array
(
[name] => Angelababy03.jpg
[type] => image/jpeg
[tmp_name] => C:\Windows\Temp\phpE9FF.tmp
[error] => 0
[size] => 78558
)
)*/
//------------------------------------------------------------
//--------------------------上传处理方法---------------------
//1.使用$_FILES['pic']['error']检查错误
if($_FILES["pic"]["error"] > 0){ //其值为 0,没有错误发生,文件上传成功
switch($_FILES["pic"]["error"]) {
case 1: echo "其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";break;
case 2: echo "其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";break;
case 3: echo "其值为3,文件只有部分被上传";break;
case 4: echo "其值为4,没有文件被上传";break;
case 6: echo "其值为6,找不到临时文件夹";break;
case 7: echo "其值为7,文件写入失败";break;
default: echo "末知错误";
}
exit;
}
//2.使用$_FILES['pic']['size']限制大小 单位字节 1M=1000 000(约)
if($_FILES["pic"]["size"] > $maxsize ) {
echo "上传的文件太大,不能超过{$maxsize}字节";
exit;
}
//3.判断文件类型
//使用$_FILES['pic']['type']或文件的扩展名限制类型
$types = ['jpg','jpeg','png','gif'];
$hz = pathinfo($_FILES['pic']['name'],PATHINFO_EXTENSION);
if(!in_array($hz,$types)){
echo "文件类型错误";
exit;
}
//4.让上传后的文件改名
$filepath="./uploads/";
$randname=date("YmdHis").uniqid().rand(100, 999).".".$hz;
//将临时位置的文件移动到指定的目录上即可
if(is_uploaded_file($_FILES["pic"]["tmp_name"])){
if(move_uploaded_file($_FILES["pic"]["tmp_name"], $filepath.$randname)){
echo "上传成功";
}else{
echo "上传失败";
}
}else{
echo "不是一个上传文件";
}
//============================================================
//------------------------------------------------------------
disk_free_space("url") //返回目录中的可用空间
disk_total_space("url") //返回一个目录的磁盘总大小
fscanf("$string","%s\t%s\t%s\n")//从文件中格式化输入
lstat(file) //返回文件属性等信息
tempnam() //建立一个具有唯一文件名的文件
symlink() //建立符号连接
fstat($file) //通过已打开的文件指针取得文件信息
linkinfo(url) //获取一个连接的信息
popen(command,mode) //打开进程文件指针
//command 命令
//mode r或w
//=============================================================
//-------------------------------------------------------------
//****************************读取文件**************
fgetcsv //从文件指针中读入一行并解析 CSV 字段
fgetss //从文件指针中读取一行并过滤掉 HTML 标记
//****************************文件操作**************
clearstatcache //清除文件状态缓存
//****************************输出******************
fpassthru //输出文件指针处的所有剩余数据
//****************************新建******************
tmpfile //建立一个临时文件
tempnam //建立一个具有唯一文件名的文件
//**************************文件名或路径名*********
pathinfo* //返回文件路径的信息
realpath //返回规范化的绝对路径名
glob //寻找与模式匹配的文件路径
readlink //返回符号连接指向的目标
//****************************文件中操作************
fscanf //从文件中格式化输入
fflush //将缓冲内容输出到文件
pclose //关闭进程文件指针
popen //打开进程文件指针
fputcsv //将行格式化为 CSV 并写入文件指针
ftruncate //将文件截断到给定的长度
//**************************取得文件信息************
fileinode //取得文件的 inode
fileperms //取得文件的权限
fstat* //通过已打开的文件指针取得文件信息
linkinfo //获取一个连接的信息
lstat //给出一个文件或符号连接的信息
parse_ini_file //解析一个配置文件
//**************************其他*********************
set_file_buffer //stream_set_write_buffer()的别名
fnmatch //用模式匹配文件名
link //建立一个硬连接
symlink //建立符号连接
//-------------------------------------------------------------
//=============================================================