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





推荐阅读
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 集合的遍历方式及其局限性
    本文介绍了Java中集合的遍历方式,重点介绍了for-each语句的用法和优势。同时指出了for-each语句无法引用数组或集合的索引的局限性。通过示例代码展示了for-each语句的使用方法,并提供了改写为for语句版本的方法。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
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社区 版权所有