热门标签 | 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);





推荐阅读
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 2022年7月20日:关键数据与市场动态分析
    2022年7月20日,本文对当日的关键数据和市场动态进行了深入分析。主要内容包括:1. 关键数据的解读与趋势分析;2. 市场动态的变化及其对投资策略的影响;3. 相关经济指标的评估。通过这些分析,帮助读者更好地理解当前市场环境,为决策提供参考。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 在本文中,我们将详细介绍如何构建一个用于自动回复消息的XML类。当微信服务器接收到用户消息时,该类将生成相应的自动回复消息。以下是具体的代码实现:```phpclass We_Xml { // 代码内容}```通过这个类,开发者可以轻松地处理各种消息类型,并实现高效的自动回复功能。我们将深入探讨类的各个方法和属性,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 在安装并配置了Elasticsearch后,我在尝试通过GET /_nodes请求获取节点信息时遇到了问题,收到了错误消息。为了确保请求的正确性和安全性,我需要进一步排查配置和网络设置,以确保Elasticsearch集群能够正常响应。此外,还需要检查安全设置,如防火墙规则和认证机制,以防止未经授权的访问。 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • 本文介绍了一种利用PHP cURL库高效提取Sohu邮箱联系人列表的方法。通过设置错误报告级别、定义Cookie文件路径等关键步骤,确保了代码的稳定性和可靠性。经过实际测试,该方法在2012年3月24日被验证为有效,能够快速准确地获取联系人信息。此外,文章还提供了详细的代码示例和注意事项,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在IIS上运行的WebApi应用程序在开发环境中能够正常进行文件的读写操作。然而,在尝试通过FTP访问实时服务器上的文件列表时,遇到了无法显示的问题,尽管服务器配置与开发环境相同。这可能涉及权限设置、FTP服务配置或网络连接等方面的问题。 ... [详细]
  • 在网络故障排查中,tcpdump 是一款强大的工具,尤其在 Linux 环境下。尽管开发环境中问题较少,但在测试或生产环境中,往往会遇到各种难以预料的异常情况。通过在问题发生的环境中启用 tcpdump 进行抓包,并重现问题,可以获取到宝贵的原始数据,为问题的诊断提供关键线索。本文将详细介绍如何使用 tcpdump 进行实战操作,帮助读者掌握这一技能。 ... [详细]
  • 华为AP3010DNAGN从胖AP转换为瘦AP的过程及版本升级详细记录
    华为AP3010DNAGN从胖AP模式转换为瘦AP模式的过程及其版本升级的详细记录如下:首先,需要了解胖AP与瘦AP的区别。瘦AP(FIT)模式下,设备无法独立运行Wi-Fi功能,必须与AC控制器配合使用,适用于企业多AP的集中管理场景。本文将详细介绍转换步骤和版本升级的具体操作,帮助用户顺利完成配置。 ... [详细]
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社区 版权所有