PHP高级特性二之文件处理,
PHP中的文件处理也是一个相当重要的模块,这一篇的主要内容就是PHP中文件系统的简介。
文件系统用途
1. 项目处理都离不开文件处理
2. 可以用文件长时间保存数据
3. 建立缓存,在服务器中进行文件操作
文件系统函数用法详述
1.基本的判断函数
<p>is_dir — 判断给定文件名是否是一个目录</p> <p>is_file — 判断给定文件名是否为一个文件</p> <p>is_executable — 判断给定文件名是否可执行</p> <p>is_link — 判断给定文件名是否为一个符号连接</p> <p>is_readable — 判断给定文件名是否可读</p> <p>is_uploaded_file — 判断文件是否是通过 HTTP POST 上传的</p> <p>is_writable — 判断给定的<span id="11_nwp">文件名是否可写</span></p> <p>is_writeable — is_writable 的别名</p>
2.文件相关信息获取
<p>file_exists — 检查文件或目录是否存在</p> <p>fileatime — 取得文件的上次访问时间</p> <p>filectime — 取得文件的 inode 修改时间</p> <p>filegroup — 取得文件的组</p> <p>fileinode — 取得文件的 inode</p> <p>filemtime — 取得文件修改时间</p> <p>fileowner — 取得文件的所有者</p> <p>fileperms — 取得文件的权限</p> <p>filesize — 取得文件大小</p> <p>filetype — 取得文件类型</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 “/”<br />windows “\”<br />不管是什么操作系统PHP的目录分割符号都支技 / (Linux)</p>
绝对路径:可以指的操作系统的根,也可以指的是存放网站的文档根目录
<p>如果是在服务器中执行(通过PHP文件处理<span id="9_nwp">函数执行)路径 则 “根”指的就是操作系统的根<br />如果程序是下载的客户端,再访问<span id="8_nwp">服务器中的文件时,只有通过Apache访问,“根”也就指的是文档根目录</span></span></p>
三个相关函数
<p>basename — 返回路径中的<span id="7_nwp">文件名部分</span></p> <p>dirname — 返回路径中的目录部分</p> <p>pathinfo — 返回文件路径的信息</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 — 创建一个文件</p> <p>unlink — 删除文件</p> <p>rename — 重命名一个文件或目录</p> <p>copy — <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 – 设定位置等于 offset 字节。</p> <p>SEEK_CUR – 设定位置为当前位置加上 offset。</p> <p>SEEK_END – 设定位置为文件尾加上 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); } ?> |

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

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

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

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

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

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

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

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


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 English version
Recommended: Win version, supports code prompts!

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Zend Studio 13.0.1
Powerful PHP integrated development environment

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),
