/*** 资源类型一定要记得关闭:fclose($file);** 文件一般处理函数* 1.打开文件函数* $file = fopen($filename,mode)* 第一个:目的文件名称* 已存在或者未存在;或者网络文件,* 读取远程文件只能读不能写模式* ftps/ftp/https/http* php.ini中的allow_url_fopen = on;* 第二个:打开模式(w、r、wb)* r: 只读方式,必须是已存在的;指针指向文件开头* r+: 以读写的方式;指针指向文件开头* w: 写文件,打开一个文件,并将文件内容情况* w+: 以读写的方式打开,指向开头* a: 以写入的模式,追加模式* x: 创建并以写入方式打开,如果文件存在会打开失败;如果不存在,则创建一个新的文件;只能打开本地文件* x+:创建并以读写的方式打开,如果文件存在会打开失败;如果不存在,则创建一个新的文件;只能打开本地文件* b: 只限于windows(会附加在上述模式的后面,标示打开的是二进制文件)* t: 只限于windows(会附加在上述模式的后面,将所有行结束符转化为\r\n)* 目录链接分隔符:DIRECTORY_SEPARATOR* 2.写入文件函数* fwrite($file,$string,$length)* 第一个:写入的资源* 第二个:写入的字符串* 第三个:写入的字符串长度,默认是将第二个参数全部写入* fputs* 3.读取文件:fread($file,$length)* 4.读取文件大小:filesize($filename)* 5.读取一行:fgets($file,$length)* 6.读取一个字符:fgetc($file)* 7.文件结尾判断函数:feof($file)!==false//用全不等来判断因为0* 8.按行读取文件* $array = file($filename);* 不用打开文件,直接就用file就可以读。然后直接遍历数组就可以了。* 9.读入一个文件并直接输出到对方缓存当中readfile($filename)* 10.判断文件是否存在file_exists($filename)** 11.读取文件,不用打开也不用关闭* $str = file_get_contents($filename);* 可以打开本地和远程文件* 12.写入文件,不用打开也不用关闭* file_put_contents($filename, $data);* 可以写入本地** 13.防止并发访问fopen的写入* flock($file, $operation);* 文件引用和访问权限;权限如下:* LOCK_SH : 共享锁定;读文件时使用* LOCK_EX : 独占锁定;写文件时使用* LOCK_UN : 释放锁定;释放上两个锁* LOCK_NB : 附加锁定;* 已经被锁定的文件再次被锁定的时候,会被挂起;* 为防止多人同时锁定可以用* if (!flock($fileR, LOCK_SH+LOCK_NB))* if (!flock($fileR, LOCK_UN+LOCK_NB))* 14.文件指针位置的函数* $curent = ftell($file)返回当前文件指针的位置* fseek($file,$movLength,$star)移动文件指针到指定位置* $star:* SEEK_SET:从文件开始;默认* SEEK_END:从文件末尾;距离可以为负数* SEEK_CUR:当前位置开始;* rewind($file)移动文件指针到文件开始处* 15.文件操作* copy($source, $dest)填写源文件路径和要拷贝到的位置* unlink($filename) 删除文件;成功返回真* rename($oldname, $newname)重命名;成功返回真* ftruncate($file, $size)截取文件;删除其他的字符* 16.文件属性* filectime($filename)文件创建时间* filemtime($filename)文件修改时间* fileatime($filename)文件最后访问时间* file_exists($filename)文件是否存在* filesize($filename)文件大小* filetyep($filename)文件类型* is_dir($filename)文件是否是目录* is_file($filename)文件是否是文件* is_link($filename)文件是否是链接* is_executable($filename)文件是否可执行* is_readable($filename)文件是否可读* is_writable($filename)文件是否可写* chmod rwx rwx rwx r=4 w=2 x=1 (拥有者,用户组,其他)* chmod($filename, 644);更改权限* chown($filename, $userID);501更改拥有者* chgrp($filename, $groupID);501更改组信息* fileowner($filename);获取拥有者** 17.目录操作* 遍历目录* $dir = opendir($path)* readdir($dir)返回目录引用句柄;每读一次返回一个文件;否则返回false* rewinddir($dir)重新将指针返回目录开始* closedir($dir)** 对象:* $dir = dir();* read* rewind* close* 路径是:$dir->path* 引用句柄:$dir->handle * $dir->read()* 检索目录* *代表任意多个任意字符* ?任何一个字符* {}* $array = glob($patten,GLOB_MARK);* GLOB_MARK* GLOB_NOSORT* GLOB_NOCHECK* GLOB_NOESCAPE* GLOB_BRACE* GLOB_ONLYDIR* GLOB_ERR* 建立目录* mkdir($pathname,[mode])* 文件路径;权限:0700* 删除目录(自己实现)* rmdir()不支持递归;* 自己写了一个见下面代码:function deleteDir ($pathname){if (file_exists($pathname)) {$dir = opendir($pathname);//前两次读取不输出;因为是当前文件夹和父文件夹readdir($dir);readdir($dir);while (($file = readdir($dir)) != null) {$file = $pathname . DIRECTORY_SEPARATOR . $file;if (is_dir($file)) {deleteDir($file);} else {unlink($file);}}if (rmdir($pathname)) {echo "删除目录".$pathname."成功
";} else {echo "删除目录".$pathname."失败
";}closedir($dir);}else{echo "指定目录并不存
";}}deleteDir($pathname);* 复制目录* copy("","")* 自己写了一个复制文件夹的递归,代码见下:function copyDir ($pathF,$pathT){if (file_exists($pathF)) {if (is_dir($pathF)){if (!file_exists($pathT)){mkdir($pathT);}$dir = opendir($pathF);//前两次读取不输出;因为是当前文件夹和父文件夹readdir($dir);readdir($dir);while (($file = readdir($dir)) != null) {$fileF = $pathF . DIRECTORY_SEPARATOR . $file;$fileT = $pathT . DIRECTORY_SEPARATOR . $file;if (is_dir($fileF)) {copyDir($fileF, $fileT);} else {copy($fileF, $fileT);}}closedir($dir);}else{if (!file_exists($pathT)){copy($pathF,$pathT);}else{echo "指定文件已存在
";}}}else{echo "拷贝的指定目录并不存
";}}**/
$str = "这是我的是啊啊啊 啊啊 \n";
$filename = "test.txt";
//写入文件
$file = fopen($filename, "w") or die("文件打开失败");
for ($i &#61; 0; $i <10; $i &#43;&#43;) {fwrite($file, $i . $str);
}
fclose($file) or die("文件关闭失败");
echo "
";
//读取文件
$file &#61; fopen($filename, "r") or die("文件打开失败");
$str &#61; fread($file, filesize($filename));
var_dump($str);
fclose($file) or die("文件关闭失败");
echo "
";
//写入文件
$str &#61; "sssssssssss";
$file &#61; fopen($filename, "r") or die("文件打开失败");
fputs($file, $str, 10);
var_dump($file);
fclose($file) or die("文件关闭失败");
echo "
";
//读取文件
$file &#61; fopen($filename, "r") or die("文件打开失败");
while (($line &#61; fgets($file)) !&#61; null) {$curent &#61; ftell($file);echo "get:" . $line . "
";
}
var_dump($file);
fclose($file) or die("文件关闭失败");
echo "
";
//直接读取文件
$array &#61; file($filename);
foreach ($array as $value)echo $value;
echo "
";
//直接输出
readfile($filename);
echo "
";
//一个简单的计数器
$filename &#61; "sum.txt";
if (! file_exists($filename)) {$file &#61; fopen($filename, "w");fwrite($file, 1);fclose($file);echo "你是1位访客";
} else {$num &#61; disp($filename);echo "你是" . $num . "位访客
";$file &#61; fopen($filename, "w");fwrite($file, $num);fclose($file);
}
function disp ($filename)
{$file &#61; fopen($filename, "r");$num &#61; fread($file, 8);$num &#43;&#61; 1;fclose($file);return $num;
}
//获取网站信息
echo "baidu";
$filename &#61; "http://www.baidu.com";
$file &#61; fopen($filename, "r");
$str &#61; "";
while (($line &#61; fgets($file)) !&#61; NULL) {$str .&#61; $line;
}
preg_match_all("/.&#43;?<\/a>/", $str, $array);
//var_dump($array);
foreach ($array[0] as $value)echo $value . "
";
fclose($file);
//锁实例
$filename &#61; "test.txt";
//读锁定
$fileR &#61; fopen($filename, "r");
if (! flock($fileR, LOCK_SH &#43; LOCK_NB))echo "无法读锁定文件";
echo fread($fileR, filesize($filename));
if (! flock($fileR, LOCK_UN &#43; LOCK_NB))echo "无法释放锁定文件";
fclose($fileR);
$fileW &#61; fopen($filename, "a");
//写锁定
if (! flock($fileW, LOCK_EX &#43; LOCK_NB))echo "无法写锁定文件";
echo fwrite($fileW, "wo xie d s a ");
if (! flock($fileW, LOCK_UN &#43; LOCK_NB))echo "无法释放锁定文件";
fclose($fileW);
//文件指针
$file &#61; fopen($filename, "r") or die("文件打开失败");
while (($line &#61; fgets($file)) !&#61; null) {$curent &#61; ftell($file);echo "get:" . $line . "
";echo "文件指针当前位置:" . $curent . "
";fseek($file, 12, SEEK_CUR);
}
fclose($file) or die("文件关闭失败");
echo "
";
//获取文件属性
echo "文件创建时间:" . date("Y年m月j日&#xff0c;h:i", filectime($filename)) . "
";
echo "文件修改时间:" . date("Y年m月j日&#xff0c;h:i", filemtime($filename)) . "
";
echo "文件最后访问时间:" . date("Y年m月j日&#xff0c;h:i", fileatime($filename)) . "
";
echo "文件是否存在:" . file_exists($filename) . "
";
echo "文件大小:" . filesize($filename) . "
";
echo "文件类型:" . filetype($filename) . "
";
echo "文件是否是目录:" . is_dir($filename) . "
";
echo "文件是否是文件:" . is_file($filename) . "
";
echo "文件是否是链接:" . is_link($filename) . "
";
echo "文件是否可执行:" . is_executable($filename) . "
";
echo "文件是否可读:" . is_readable($filename) . "
";
echo "文件是否可写:" . is_writable($filename) . "
";
//遍历目录内容
$path &#61; "../base";
function subDir ($path, $str)
{$dir &#61; opendir($path) or die("打目录不成功");echo $path . "下的内容&#xff1a;
";//前两次读取不输出&#xff1b;因为是当前文件夹和父文件夹readdir($dir);readdir($dir);while (($file &#61; readdir($dir)) !&#61; null) {$filePath &#61; $path . DIRECTORY_SEPARATOR . $file;if (is_dir($file)) {echo $str . $file . "是个目录
";$subStr &#61; $str &#43; "--";subDir($filePath, $subStr);} elseecho $str . $file . "
";}closedir($dir);
}
$path &#61; "../base";
$dir &#61; dir($path);
echo "路径是&#xff1a;" . $dir->path;
echo "引用句柄&#xff1a;" . $dir->handle;
//查询检索文件
echo "检索文件
";
$array &#61; glob("../base/{s,r,t}*", GLOB_BRACE);
foreach ($array as $value) {echo $value . "
";
}
subDir($path, "");//循环删除目录
$pathname &#61; "test";
/*** 删除目录* 删除后无法恢复* &#64;param unknown_type $pathname*/
function deleteDir ($pathname)
{if (file_exists($pathname)) {if (is_dir($pathname)){$dir &#61; opendir($pathname);//前两次读取不输出&#xff1b;因为是当前文件夹和父文件夹readdir($dir);readdir($dir);while (($file &#61; readdir($dir)) !&#61; null) {$file &#61; $pathname . DIRECTORY_SEPARATOR . $file;if (is_dir($file)) {deleteDir($file);} else {unlink($file);}}if (rmdir($pathname)) {echo "删除目录".$pathname."成功
";} else {echo "删除目录".$pathname."失败
";}closedir($dir);}else{if (unlink($pathname)){echo "指定文件已删除成功
";}}}else{echo "删除的指定目录并不存
";}
}
deleteDir($pathname);//拷贝目录
$pathF &#61; "../application";
$pathT &#61; "test";
/*** 拷贝目录* 拷贝后无法恢复* &#64;param unknown_type $pathname*/
function copyDir ($pathF,$pathT)
{if (file_exists($pathF)) {if (is_dir($pathF)){if (!file_exists($pathT)){mkdir($pathT);}$dir &#61; opendir($pathF);//前两次读取不输出&#xff1b;因为是当前文件夹和父文件夹readdir($dir);readdir($dir);while (($file &#61; readdir($dir)) !&#61; null) {$fileF &#61; $pathF . DIRECTORY_SEPARATOR . $file;$fileT &#61; $pathT . DIRECTORY_SEPARATOR . $file;if (is_dir($fileF)) {copyDir($fileF, $fileT);} else {copy($fileF, $fileT);}}closedir($dir);}else{if (!file_exists($pathT)){copy($pathF,$pathT);}else{echo "指定文件已存在
";}}}else{echo "拷贝的指定目录并不存
";}
}
copyDir($pathF,$pathT);