热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php学习笔记(九)文件相关的处理操作

***资源类型一定要记得关闭:fclose($file);**文件一般处理函数*1.打开文件函数*$filefopen($filename,mode)*第一个:目的文

/*** 资源类型一定要记得关闭: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);





推荐阅读
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
author-avatar
lajallan608
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有