搜索
首页php教程php手册PHP高级特性二之文件处理,
PHP高级特性二之文件处理,Jun 13, 2016 am 09:02 AM
php处理文件模块特性高级

PHP高级特性二之文件处理,

PHP中的文件处理也是一个相当重要的模块,这一篇的主要内容就是PHP中文件系统的简介。

文件系统用途

1. 项目处理都离不开文件处理

2. 可以用文件长时间保存数据

3. 建立缓存,在服务器中进行文件操作

文件系统函数用法详述

1.基本的判断函数

<p>is_dir &mdash; 判断给定文件名是否是一个目录</p>
<p>is_file &mdash; 判断给定文件名是否为一个文件</p>
<p>is_executable &mdash; 判断给定文件名是否可执行</p>
<p>is_link &mdash; 判断给定文件名是否为一个符号连接</p>
<p>is_readable &mdash; 判断给定文件名是否可读</p>
<p>is_uploaded_file &mdash; 判断文件是否是通过 HTTP POST 上传的</p>
<p>is_writable &mdash; 判断给定的<span id="11_nwp">文件名是否可写</span></p>
<p>is_writeable &mdash; is_writable 的别名</p>

2.文件相关信息获取

<p>file_exists &mdash; 检查文件或目录是否存在</p>
<p>fileatime &mdash; 取得文件的上次访问时间</p>
<p>filectime &mdash; 取得文件的 inode 修改时间</p>
<p>filegroup &mdash; 取得文件的组</p>
<p>fileinode &mdash; 取得文件的 inode</p>
<p>filemtime &mdash; 取得文件修改时间</p>
<p>fileowner &mdash; 取得文件的所有者</p>
<p>fileperms &mdash; 取得文件的权限</p>
<p>filesize &mdash; 取得文件大小</p>
<p>filetype &mdash; 取得文件类型</p>

下面我们写一个例子,传入文件名,打印它的详细信息。

 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63     function getFileInfo($filename){         if(!file_exists($filename)){             echo '文件'.($filename).'不存在';             return;         }           if(is_file($filename)){             echo $filename.'是一个文件';         }           if(is_dir($filename)){             echo $filename.'是一个目录';         }           if(is_executable($filename)){             echo $filename.'是可执行文件';         }else{             echo $filename.'不是可执行文件';         }           if(is_readable($filename)){             echo $filename.'是可读的';         }else{             echo $filename.'不是可读的';         }           if(is_writable($filename)){             echo $filename.'是可写入的';         }else{             echo $filename.'不是可写入的';         }           echo '文件'.$filename.'的大小是'.getFileSize(filesize($filename)).'';         echo '文件'.$filename.'的类型是'.filetype($filename).'';         echo '文件'.$filename.'的所有者是'.fileowner($filename).'';         echo '文件'.$filename.'的最后访问时间为'.getTime(fileatime($filename)).'';         echo '文件'.$filename.'的inode是'.fileinode($filename).'';         echo '文件'.$filename.'的修改时间是'.getTime(filemtime($filename)).'';         echo '文件'.$filename.'的权限是'.fileperms($filename).'';     }          function getTime($time){         return date('Y-m-d H:i:s',$time);     }       function getFileSize($size){         $dw = 'B';         if($size>=pow(2,40)){             $size=round($size/pow(2,40),2);             $dw = 'PB';         }else if($size>=pow(2,30)){             $size=round($size/pow(2,30),2);             $dw = 'TB';         }else if($size>=pow(2,20)){             $size=round($size/pow(2,20),2);             $dw = 'GB';         }else if($size>=pow(2,10)){             $size=round($size/pow(2,10),2);             $dw = 'MB';         }         return $size.$dw;     }     getFileInfo('1.php');

运行结果

<p>1.<span id="10_nwp">php是一个文件<br />1.php不是可执行文件<br />1.php是可读的<br />1.php不是可写入的<br />文件1.php的大小是2MB<br />文件1.php的类型是file<br />文件1.php的所有者是1000<br />文件1.php的最后访问时间为2015-03-04 12:58:33<br />文件1.php的inode是536185<br />文件1.php的修改时间是2015-03-04 12:58:32<br />文件1.php的权限是33204</span></p>

 3.文件路径相关函数

相对路径:相对于当前目录的上级和下级目录

<p>. 当前目录<br />.. 上一级目录</p>

路径分隔符号

<p>linux/Unix &ldquo;/&rdquo;<br />windows &ldquo;\&rdquo;<br />不管是什么操作系统PHP的目录分割符号都支技 / (Linux)</p>

绝对路径:可以指的操作系统的根,也可以指的是存放网站的文档根目录

<p>如果是在服务器中执行(通过PHP文件处理<span id="9_nwp">函数执行)路径 则 &ldquo;根&rdquo;指的就是操作系统的根<br />如果程序是下载的客户端,再访问<span id="8_nwp">服务器中的文件时,只有通过Apache访问,&ldquo;根&rdquo;也就指的是文档根目录</span></span></p>

三个相关函数

<p>basename &mdash; 返回路径中的<span id="7_nwp">文件名部分</span></p>
<p>dirname &mdash; 返回路径中的目录部分</p>
<p>pathinfo &mdash; 返回文件路径的信息</p>

例如下面的例子

 
1 2 3 4 5 6 7 8     $url1="./aaa/bbb/index.php";     $url2="../www/yyy/login.rar";     $url3="c:/appserv/www/demo.html";     $url4="http://localhost/yyy/www.gif";     echo basename($url1);     echo basename($url2);     echo basename($url3);     echo basename($url4);

运行结果

<p>index.<span id="6_nwp">php<br />login.rar<br />demo.html<br />www.gif</span></p>

可以看出,basename这个函数返回的是文件的名,也就是最后一个项目。
下面我们看一下dirname的用法

 
1 2 3 4 5 6 7 8     $url1="./aaa/bbb/index.php";     $url2="../www/yyy/login.rar";     $url3="c:/appserv/www/demo.html";     $url4="http://localhost/yyy/www.gif";     echo dirname(dirname($url1));     echo dirname($url2);     echo dirname($url3);     echo dirname($url4);

运行结果

<p>./aaa<br />../www/yyy<br />c:/appserv/www<br />http://localhost/yyy</p>

可以发现,dirname这个函数可以多层嵌套使用,返回的就是它所在的路径,即除了最后一项之外所有的项。

另外 pathinfo的以上所有信息都可以获取到,另外还包括了文件名和扩展名

比如下面的结果

<p>Array ( [dirname] => ../www/yyy [basename] => login.rar [extension] => rar [filename] => login )</p>

4. 文件的创建删除修改

<p>touch &mdash; 创建一个文件</p>
<p>unlink &mdash; 删除文件</p>
<p>rename &mdash; 重命名一个文件或目录</p>
<p>copy &mdash; <span id="5_nwp">拷贝文件</span></p>

例如下面的例子

 
1 2 3 4 5 touch("./php.apahce"); //创建文件 unlink("C:/AppServ/www/xsphp/apache.php");  //删除文件 rename("./test.txt", "d:/test2.txt");    //重命名文件 copy("cache.txt", "./cache5.txt");   //复制文件 chmod("a.txt",755);   //设置文件权限

权限相关内容

<p>rwx 表这个文件的拥有者 r读 w写 x执行<br />rwx 表这个文件的拥有者所在的组 r读 w写 x执行<br />rwx 其它用户对这个为文件的权限 r读 w写 x执行</p>

文件读写

1. file_get_contents(string)

传入文件名,直接得到文件中的文本信息,返回的内容即为文件中的文本。

例如

 
1 2 3 4 $str = file_get_contents("1.txt"); echo $str; ?>

则直接打开了 1.txt 文件中的内容,并返回文件中的文本信息。

如果文件不存在,那么会提示

<p><strong>Warning</strong>: file_get_contents(2.txt): failed to open stream: No such file or directory</p>

同样,文件还可以是远程文件,例如,参数传入 http://www.qq.com

即可以呈现腾讯网的首页内容。

缺点:不能读取指定部分的内容,一次性全部读取。

2. file_put_contents(filename,content)

写入文件,filename是写入文件的文件名,content是写入内容,返回值是成功写入的字符长度。

 
1 2 3 echo file_put_contents("2.txt",'abcd'); ?>

2.txt 文件如果不存在,那么则会创建这个文件并写入 abcd 这个字符串,返回 4 ,为字符串的长度。 如果文件存在,则会将文件清空,然后写入字符串,返回写入长度。

缺点:不能以追加的方式写入文件。

3.file(filename)

file是直接打开某一个文件,返回的结果是一个数组,每一行是数组的一个元素。也就是说,获取行数只需要输出数组的大小即可。例如

 
1 2 3 4 5 $str = file("1.txt"); var_dump($str); echo count($str); ?>

即可得到数组形式的行内容,而且输出了行数。

缺点:不能读取指定部分的内容。

4.fopen(filename,mode)

filename是文件名,可以是路径加名,也可以是远程服务器文件。

mode是打开文件的方式

<p>r,以只读模式打开文件<br />r+,除了读,还可以写入。<br />w, 以只写的方式打开,如果文件不存在,则创建这个文件,并写放内容,如果文件存在,并原来有内容,则会清除原文件中所有内容,再写入(打开已有的重要文件)<br />w+,除了可以写用fwrite, 还可以读fread<br />a,以只写的方式打开,如果文件不存在,则创建这个文件,并写放内容,如果文件存在,并原来有内容,则不清除原有文件内容,再原有文件内容的最后写入新内容,(追加)<br />a+,除了可以写用fwrite, 还可以读fread<br />b,以二进制模式打开文件(图,电影)<br />t,以文本模式打开文件</p>

注意:

<p>r+具有读写属性,从文件头开始写,保留原文件中没有被覆盖的内容;</p>
<p>w+具有读写属性,写的时候如果文件存在,会被清空,从头开始写。</p>

返回的是一个文件资源

5.fwrite(file,content)

文件写入功能,file是文件资源,用fopen函数获取来的,content是写入内容。同 fputs 函数。

例如

 
1 2 3 4 5 6 7 8 9 php $file = fopen("1.txt","r+"); $result = fwrite($file,"xx"); if($result){ echo "Success"; }else echo "Failed"; } ?>

则从头开始写入资源,即把前两个字符设为 xx

6. fread(file,size)

读取文件指定部分的长度,file是文件资源,由fopen返回的对象,size是读取字符的长度。

例如

 
1 2 3 4 5 $file = fopen("1.txt","r"); $content = fread($file,filesize("1.txt")); echo $content; ?>

不过,上述的 filesize 方法只能获取本地文件大小,对于远程文件的读取就要换一种方法了。

例如

 
1 2 3 4 5 6 7 8 $file = fopen("http://www.qq.com","r"); $str = ""; while(!feof($file)){  //判断时候到了文件结尾 $str.=fread($file,1024); } echo $str; ?>

 

7.fgets(file)

file是文件资源,每次读取一行。例如我们读取出腾讯首页一共有多少行。

 
1 2 3 4 5 6 7 8 9 10   $file = fopen("http://www.qq.com","r"); $str = ""; $count = 0; while(!feof($file)){ $str .= fgets($file); $count ++; } echo $count; ?>

会输出结果 8893,我们可以查看源文件,看看它一共有多少行,验证一下即可。

7.fgetc(file)

与fgets方法很相似,file是文件资源,每次读取个字符。例如我们读取出腾讯首页一共有多少个字符。

 
1 2 3 4 5 6 7 8 9 10 $file = fopen("http://www.qq.com","r"); $str = ""; $count = 0; while(!feof($file)){ $str .= fgetc($file); $count ++; } echo $count; ?>

上述代码便会输出所有的字符数量。

8.ftell(file)

ftell 是返回当前读文件的指针位置,file 是文件资源,是由 fopen 返回的对象。

9.fseek(file,offset,whence)

file

文件系统指针,是典型地由 fopen() 创建的 resource(资源)。

offset

偏移量。

要移动到文件尾之前的位置,需要给 offset 传递一个负值,并设置 whence 为 SEEK_END。

whence

<p>SEEK_SET &ndash; 设定位置等于 offset 字节。</p>
<p>SEEK_CUR &ndash; 设定位置为当前位置加上 offset。</p>
<p>SEEK_END &ndash; 设定位置为文件尾加上 offset。</p>

10.rewind($file)

回到文件头部,file是文件资源

例如

 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 php $file = fopen("1.txt","r"); echo ftell($file)."
"; //输出读取前的指针位置
echo fread($file,10)."
"; //读取10个字符,指针移动10个单位
echo ftell($file)."
"; //输出读取完之后当前指针位置
fseek($file,20,SEEK_CUR); //当前指针前移20单位 echo ftell($file)."
"; //输出移动之后指针的位置
echo fread($file,10)."
"; //输出读取的10个字符
echo ftell($file)."
"; //输出读完10个字符之后指针的位置
fseek($file,-20,SEEK_END); //指针移动到文件末尾前20个字符 echo ftell($file)."
"; //输出移动之后指针的位置
echo fread($file,10)."
"; //输出文件末尾20个字符
echo ftell($file)."
"; //输出读完10个字符之后指针的位置
rewind($file); //回到文件头部 echo ftell($file)."
"; //输出移动之后指针的位置
?>

运行结果:

<p>0<br />cuiqingcai<br />10<br />30<br />uiqingcai.<br />40<br />374<br />i.comcuiqi<br />384<br />0</p>

11.flock(file,operation[,wouldblock])

file

文件资源指针,是典型地由 fopen() 创建的 resource(资源)。

operation

operation 可以是以下值之一:

<p>LOCK_SH取得共享锁定(读取的程序)。</p>
<p>LOCK_EX 取得独占锁定(写入的程序。</p>
<p>LOCK_UN 释放锁定(无论共享或独占)。</p>

如果不希望 flock() 在锁定时堵塞,则是 LOCK_NB(Windows 上还不支持)。

wouldblock

如果锁定会堵塞的话(EWOULDBLOCK 错误码情况下),可选的第三个参数会被设置为 TRUE。(Windows 上不支持)

例如

 
1 2 3 4 5 6 7 php $file = fopen("1.txt","a"); if(flock($file,LOCK_EX)){ fwrite($file,"xxx"); flock($file,LOCK_UN); } ?>
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么设置implode没有分隔符php怎么设置implode没有分隔符Apr 18, 2022 pm 05:39 PM

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具