Home >Backend Development >PHP Tutorial >PHP Advanced Features 2: File Processing, _PHP Tutorial

PHP Advanced Features 2: File Processing, _PHP Tutorial

WBOY
WBOYOriginal
2016-07-13 09:52:13943browse

PHP Advanced Features 2: File Processing,

File processing in PHP is also a very important module. The main content of this article is an introduction to the file system in PHP.

File system purpose

1. Project processing is inseparable from file processing

2. You can use files to save data for a long time

3. Establish cache and perform file operations in the server

Detailed description of file system function usage

1. Basic judgment function

<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. Obtain file related information

<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>

Let’s write an example below, passing in the file name and printing its details.

 
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.' is readable';  }else{         echo $filename.' is not readable';  } if(is_writable($filename)){        echo $filename.' is writable';  }else{         echo $filename.' is not writable';  } echo The size of the file '.$filename.' is '.getFileSize(filesize($filename)).'';  echo The type of 'file'.$filename.' is '.filetype($filename).'';  echo The owner of the file '.$filename.' is '.fileowner($filename).'';  echo The last access time of 'file'.$filename.' is '.getTime (fileatime($filename)).'';  echo The inode of 'file'.$filename.' is '.fileinode($filename).'';  echo The modification time of 'file'.$filename.' is '.getTime(filemtime($filename)).'';  echo The permissions of the file '.$filename.' are '.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 84cdbe9e42b370de4aff94fafa5fe7ba

则直接打开了 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 ca13f3e6f76668d6663b431e80f3f102

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

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

3.file(filename)

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

 
1 2 3 4 5 3638ee7a20c2a68bdcef8ff81d2e894d

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

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

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 da527853a94bd96b3167cf656d9228a4

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

6. fread(file,size)

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

例如

 
1 2 3 4 5 0ad2c4c6508fe1fe88d671d35c73e270

However, the above filesize method can only obtain the local file size, and a different method is needed to read remote files.

For example

1 2 3 4 5 6 7 8 c9941dbe5ec5e4707cf02d30a38b29fa

7.fgets(file)

file is a file resource, reading one line at a time. For example, we read how many lines there are in Tencent's homepage.

1 2 3 4 5 6 7 8 9 10  927ba48fb2989a94ea86a4c88887480d

The result 8893 will be output. We can check the source file to see how many lines it has in total and verify it.

7.fgetc(file)

Very similar to the fgets method, file is a file resource and reads characters each time. For example, we read how many characters there are in the Tencent homepage.

1 2 3 4 5 6 7 8 9 10 d21d67d2c2ea7e3b1f9854f9e6b3b929

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

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 513e70797e6210ffd8bc9b07e8678888"; //Output the pointer position before reading echo fread($file,10)."0c6dc11e160d3b678d68754cc175188a"; //Read 10 characters, move the pointer 10 units echo ftell($file)."0c6dc11e160d3b678d68754cc175188a"; //Output the current pointer position after reading fseek($file,20,SEEK_CUR); //Current pointer Move forward 20 units echo ftell($file)."0c6dc11e160d3b678d68754cc175188a"; //Output the position of the pointer after movement echo fread($file,10)."0c6dc11e160d3b678d68754cc175188a"; //Output the 10 characters read echo ftell($file)."0c6dc11e160d3b678d68754cc175188a"; //Output the position of the pointer after reading 10 characters fseek($file,-20,SEEK_END); //The pointer moves to the first 20 characters at the end of the file echo ftell($file)."0c6dc11e160d3b678d68754cc175188a"; //Output the position of the pointer after movement echo fread($file,10)."0c6dc11e160d3b678d68754cc175188a"; //输出文件末尾20个字符 echo ftell($file)."0c6dc11e160d3b678d68754cc175188a"; //输出读完10个字符之后指针的位置 rewind($file); //回到文件头部 echo ftell($file)."0c6dc11e160d3b678d68754cc175188a"; //输出移动之后指针的位置 ?>

运行结果:

<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 9409e55c24d578fac4de0cf6f7f10301

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1011002.htmlTechArticlePHP高级特性二之文件处理, PHP中的文件处理也是一个相当重要的模块,这一篇的主要内容就是PHP中文件系统的简介。 文件系统用途 1. 项目...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn