php 目录与文件处理-郑阿奇(续)


Posted in PHP onJuly 04, 2011

1.文件目录操作
最顶层止录是磁盘根目录,用'/'或'//'
当前目录 ./
../表示apache的目录即htdocs目录
1.创建与删除目录 mkdir

<?php 
if(mkdir("./path",0700)) //在当前目录中创建path目录 
echo "创建成功"; 
?>

2.获取和更改当前目录
使用getcwd()函数可以取得当前的工作目录,该函数没有参数。成功则返回当前的工作目录,失败则返回FALSE
3.打开和关闭目录句柄
opendir($dir)
closed($dir_handle)
4.读取目录内容
readdir(),该参数是一个已经打开的目录句柄,与while循环可以实现对目录的遍历
5.获取指定路径中的目录与文件 。
array scandir(string $directory [, int $sorting_order [, resource $context ]])
说明:$directory为指定路径。参数$sorting_order默认是按字母升序排列,如果设为1表示按字母的降序排列。
$context是可选参数,是一个资源变量,可以用stream_context_create()函数生成,这个变量保存着与具体的操作对象有关的一些数据。
函数运行成功则返回一个包含指定路径下的所有目录和文件名的数组,失败则返回FALSE
2.操作文件的一般方法
3.文件的打开与关闭
1.打开文件
resource fopen(string $filename , string $mode [, bool $use_include_path [, resource $context ]])
●$filename参数。fopen()函数将$filename参数指定的名字资源绑定到一个流上
●$mode参数。$mode参数指定了fopen()函数访问文件的模式,取值见表4.5。
$mode
说 明
'r'
只读方式打开文件,从文件头开始读
'r+'
读写方式打开文件,从文件头开始读写
'w'
写入方式打开文件,将文件指针指向文件头。如果文件已经存在则删除已有内容,如果文件不存在则尝试创建它
'w+'
读写方式打开文件,将文件指针指向文件头。如果文件已经存在则删除已有内容,如果文件不存在则尝试创建它
'a'
写入方式打开文件,将文件指针指向文件末尾,如果文件已有内容将从文件末尾开始写。如果文件不存在则尝试创建它
'a+'
读写方式打开文件,将文件指针指向文件末尾。如果文件已有内容将从文件末尾开始读写。如果文件不存在则尝试创建它
'x'
创建并以写入方式打开文件,将文件指针指向文件头。如果文件已存在,则fopen()调用失败并返回FALSE,并生成一条E_WARNING级别的错误信息。如果文件不存在则尝试创建它。此选项被PH及以后的版本所支持,仅能用于本地文件
'x+'
创建并以读写方式打开文件,将文件指针指向文件头。如果文件已存在,则fopen()调用失败并返回FALSE,并生成一条E_WARNING级别的错误信息。如果文件不存在则尝试创建它。此选项被PH及以后的版本所支持,仅能用于本地文件
'b'
二进制模式,用于连接在其他模式后面。如果文件系统能够区分二进制文件和文本文件(Windows区分,而UNIX不区分),则需要使用到这个选项,推荐一直使用这个选项以便获得最大程度的可移植性

●$use_include_path参数。如果需要在include_path(PHP的include路径,在PHP的配置文件设置)中搜寻文件,
可以将可选参数 $use_include_path的值设为1或TRUE,默认为FALSE。
●$context参数。可选的$context参数只有文件被远程打开时(如通过HTTP打开)才使用,它是一个资源变量,
其中保存着与fopen()函数具体的操作对象有关的一些数据。如果fopen()打开的是一个HTTP地址,
那么这个变量记录着HTTP请求的请求类型、HTTP版本及其他头信息;如果打开的是FTP地址,
记录的可能是FTP的被动/主动模式
2.关闭文件
bool fclose(resource $handle)
4.文件的写入
文件写入前需打开文件,不存在先创建它,一般用fopen()函数创建
●fwrite().文件打开后,向文件写入内容
int fwrite(resource $handle , string $string [, int $length ])
说明:参数$handle是写入的文件句柄,
$string是将要写入文件中的字符串数据,
$length是可选参数,如果指定了$length,则当写入了$string中的前$length个字节的数据后停止写入。
●file_put_contents()函数。PHP 5还引入了file_put_contents()函数。这个函数的功能与依次调用fopen()、fwrite()及fclose()函数的功能一样。语法格式如下:
int file_put_contents(string $filename , string $data [, int $flags [, resource $context ]])
说明:$filename是要写入数据的文件名。
$data是要写入的字符串,$data也可以是数组,但不能为多维数组。
在使用FTP或HTTP向远程文件写入数据时,可以使用可选参数$flags和$context,这里不具体介绍。
写入成功后函数返回写入的字节数,否则返回FALSE。
●fputcsv()函数。CSV是一种比较常用的文件格式,一般以.csv作为扩展名。CSV格式把文件的一行看做是一条记录,记录里的字段使用逗号分隔。
在PHP中使用 fputcsv()函数可以把指定的数组格式化为符合CSV文件格式的内容,并写入文件指针指向的当前行。语法格式如下:
int fputcsv(resource $handle [, array $fields [, string $delimiter [, string $enclosure ]]])
说明:参数$handle是要写入的文件句柄。
参数$fields是要格式化的数组。
可选的$delimiter参数用于设定字段分界符(只允许一个字符),默认为逗号。
可选的$enclosure参数设定字段环绕符(只允许一个字符),默认为双引号
5 文件的读取
1.读取任意长度
fread()函数可以用于读取文件的内容,语法格式如下:
string fread(int $handle, int $length)
说明:参数$handle是已经打开的文件指针,
$length是指定读取的最大字节数,$length的最大取值为8192。
如果读完$length个字节数之前遇到文件结尾标志(EOF),则返回所读取的字符,并停止读取操作。
如果读取成功则返回所读取的字符串,如果出错返回FALSE。
注意:在读取文件后显示文件内容时,文本中可能含有无法直接显示的字符,如HTML标记。
这时需要使用htmlspecialchars()函数将HTML标记转化为实体才能显示文件中的字符。
2.读取整个文件
●file()函数。file()函数用于将整个文件读取到一个数组中,语法格式如下:
array file(string $filename [, int $use_include_path [, resource $context ]])
说明:本函数的作用是将文件作为一个数组返回,数组中的每个单元都是文件中相应的一行,包括换行符在内,
如果失败则返回FALSE。参数$filename是读取的文件名,参数$use_inclue_path和$context的意义与之前介绍的相同
●readfile()函数。readfile()函数用于输出一个文件的内容到浏览器中,语法格式如下:
int readfile(string $filename [, bool $use_include_path [, resource $context ]])
●fpassthru()函数。fpassthru()函数可以将给定的文件指针从当前的位置读取到EOF,并把结果写到输出缓冲区。
要使用这个函数,必须先使用fopen()函数打开文件,然后将文件指针作为参数传递给fpassthru()函数,
fpassthru()函数把文件指针所指向的文件内容发送到标准输出。如果操作成功返回读取到的字节数,否则返回FALSE。
●file_get_contents()函数。file_get_contents()函数可以将整个或部分文件内容读取到一个字符串中,
功能与依次调用fopen()、fread()及fclose()函数的功能一样。语法格式如下:
string file_get_contents(string $filename [, int $offset [, int $maxlen ]])
说明:$filename是要读取的文件名,可选参数$offset可以指定从文件头开始的偏移量,
函数可以返回从$offset所指定的位置开始长度为$maxlen的内容。如果失败,函数将返回FALSE

3. 读取一行数据
●fgets()函数。fgets()函数可以从文件中读出一行文本,语法格式如下:
string fgets(int $handle [, int $length ])
说明:$handle是已经打开的文件句柄,可选参数$length指定了返回的最大字节数,考虑到行结束符,
最多可以返回length-1个字节的字符串。如果没有指定$length,默认为1024个字节
●fgetss()函数与fgets()基本相同,不过fgetss()函数会尝试从读取的文本中去掉任何html和php标记。
●fgetcsv()函数。fgetcsv()函数可以读取指定文件的当前行,使用CSV格式解析出字段,并返回一个包含这些字段的数组。
语法格式如下:
array fgetcsv(int $handle [, int $length [, string $delimiter [, string $enclosure ]]])
4. 读取一个字符
fgetc()函数。fgetc()函数可以从文件指针处读取一个字符,语法格式为:
string fgetc(resource $handle)
该函数返回$handle指针指向的文件中的一个字符,遇到EOF则返回FALSE
5. 使用指定格式读取文件
fscanf()函数。fscanf()函数可以读取文件中的数据,并根据指定的格式进行格式化,并返回一个数组。语法格式如下:
mixed fscanf(resource $handle , string $format [, mixed &$... ])
格式字符串中的任何空白会与输入流中的任何空白匹配。
这意味着甚至格式字符串中的制表符“\t”也会与输入流中的一个空格字符匹配。
6.文件的上传与下载
1.文件上传
文件上传可以通过提交html表单来实现。文件上传结束后,默认存储在临时目录中,这时必须从临时目录中删除或移动到其他地方
使用PHP的move_uploaded_file()将其移到其它位置上
move_uploaded_file()函数语法格式如下:
bool move_uploaded_file(string $filename , string $destination)
注意:在将文件移动之前需要检查文件是否是通过HTTP POST上传的,这可以用来确保恶意的用户无法欺骗脚本去访问本不能访问的文件,
这时需要使用is_uploaded_file()函数。该函数的参数为文件的临时文件名,若文件是通过HTTP POST上传的,则函数返回TRUE。
例4.5 将由HTML表单上传的GIF图片文件移动到html目录中

<form enctype="multipart/form-data" action="" method="post"> 
<input type="file" name="myFile"> 
<input type="submit" name="up" value="上传文件"> 
</form> 
<!-- HTML表单 --> 
<?php 
if(isset($_POST['up'])) 
{ 
if($_FILES['myFile']['type']=="image/gif") //判断文件格式是否为GIF 
{ 
if($_FILES['myFile']['error']>0) //判断上传是否出错 
echo "错误:".$_FILES['myFile']['error']; //输出错误信息 
else 
{ 
$tmp_filename=$_FILES['myFile']['tmp_name']; //临时文件名 
$filename=$_FILES['myFile']['name']; //上传的文件名 
$dir="html/"; 
if(is_uploaded_file($tmp_filename)) //判断是否通过HTTP POST上传 
{ 
if(move_uploaded_file($tmp_filename,$dir.$filename)) //上传并移动文件 
{ 
echo "文件上传成功!"; 
//输出文件大小 
echo "文件大小为:". ($_FILES['myFile']['size']/1024)."kb"; 
} 
else 
echo "上传文件失败!"; 
} 
} 
} 
else 
{ 
echo "文件格式非GIF图片!"; 
} 
} 
?>

2.文件下载
header()函数的作用是向浏览器发送正确的HTTP报头,报头指定了网页内容的类型、页面的属性等信息。
header()函数的功能很多,这里只列出以下几点:
●页面跳转。如果header()函数的参数为“Location: xxx”,页面就会自动跳转到“xxx”指向的URL地址。例如:
header("Location: http://www.baidu.com"); //跳转到百度页面
header("Location: first.php"); //跳转到工作目录的first.php页面
●指定网页内容。例如,同样的一个XML格式的文件,如果header()函数的参数指定为“Content-type: application/xml”,
浏览器会将其按照XML文件格式来解析。但如果是“Content-type: text/xml”,浏览器就会将其看做文本解析。
header()函数结合readfile()函数可以下载将要浏览的文件
7.其他常用文件函数
1.计算文件大小
filesize()函数用于计算文件的大小,以字节为单位
filesize()函数结合fread()函数可以实现一次读取整个文件
2.判断文件是否存在
file_exits()
is_dir()函数用于判断给定文件名是否是目录
is_file()函数用于判断给定文件名是否是文件。
is_readable()函数用于判断给定文件是否可读。
is_writeable()用于判断给定的文件是否可写
3.删除文件
unlink()
4.复制文件
bool copy(string $source,string $dest),如果目示文件已存在,则将被覆盖
5.移动、重命名文件
除了move_uploaded_file()函数,还有一个rename()函数也可以移动文件。
语法格式如下:
bool rename ( string $oldname , string $newname [, resource $context ] )
说明:rename()函数主要用于对一个文件进行重命名,$oldname是文件的旧名,$newname为新的文件名。
当然,如果$oldname与$newname的路径不相同,就实现了移动该文件的功能
6.文件指针操作
PHP中有很多操作文件指针的函数,如rewind()、ftell()、fseek()函数等。之前用过的feof()函数用于测试文件指针是否处于文件尾部,
也属于文件指针操作函数。
rewind()函数。用于重置文件的指针位置,使指针返回到文件头。它的参数只有一个,就是已经打开的指定文件的文件句柄。
ftell()函数。可以以字节为单位,报告文件中指针的位置,也就是文件流中的偏移量。它的参数也是已经打开的文件句柄。
fseek()函数。可以用于移动文件指针,语法格式如下:
int fseek ( resource $handle , int $offset [, int $whence ] )
例4.8 投票统计
<form enctype="multipart/form-data" action="" method="post"> 
<table border="0"> 
<tr><td bgcolor="#CCCCCC"> 
<font size=4 color=blue>当前最流行的Web开发语言:</font> 
</td></tr> 
<tr><td><input type="radio" name="vote" value="PHP">PHP</td></tr> 
<tr><td><input type="radio" name="vote" value="ASP">ASP</td></tr> 
<tr><td><input type="radio" name="vote" value="JSP">JSP</td></tr> 
<tr><td><input type="submit" name="sub" value="请投票"> </td></tr> 
</table> 
</form> 
<?php 
$votefile="EX4_6_vote.txt"; //用于计数的文本文件$votefile 
if(!file_exists($votefile)) //判断文件是否存在 
{ 
$handle=fopen($votefile,"w+"); //不存在则创建该文件 
fwrite($handle,"0|0|0"); //将文件内容初始化 
fclose($handle); 
} 
if(isset($_POST['sub'])) 
{ 
if(isset($_POST['vote'])) //判断用户是否投票 
{ 
$vote=$_POST['vote']; //接收投票值 
$handle=fopen($votefile,"r+"); 
$votestr=fread($handle,filesize($votefile)); //读取文件内容到字符串$votestr 
fclose($handle); 
$votearray=explode("|", $votestr); //将$votestr根据“|”分割 
echo "<h3>投票完毕!</h3>"; 
if($vote=='PHP') 
$votearray[0]++; //如果选择PHP,则数组第1个值加1 
echo "目前PHP的票数为:<font size=5 color=red>".$votearray[0]."</font><br>"; 
if($vote=='ASP') 
$votearray[1]++; //如果选择ASP,则数组第2个值加1 
echo "目前ASP的票数为:<font size=5 color=red>".$votearray[1]."</font><br>"; 
if($vote=='JSP') 
$votearray[2]++; //如果选择JSP,则数组第3个值加1 
echo "目前JSP的票数为:<font size=5 color=red>".$votearray[2]."</font><br>"; 
//计算总票数 
$sum=$votearray[0]+$votearray[1]+$votearray[2]; 
echo "总票数为:<font size=5 color=red>".$sum."</font><br>"; 
$votestr2=implode("|",$votearray); //将投票后的新数组用“|”连接成字符串$votestr2 
$handle=fopen($votefile,"w+"); 
fwrite($handle,$votestr2); //将新字符串写入文件$votefile 
fclose($handle); 
} 
else 
{ 
echo "<script>alert('未选择投票选项!')</script>"; 
} 
} 
?>
PHP 相关文章推荐
php GD绘制24小时柱状图
Jun 28 PHP
php单例模式实现(对象只被创建一次)
Dec 05 PHP
php求正负数数组中连续元素最大值示例
Apr 11 PHP
PHP静态文件生成类实例
Nov 29 PHP
PHP跨平台获取服务器IP地址自定义函数分享
Dec 29 PHP
php输出指定时间以前时间格式的方法
Mar 21 PHP
WordPress中查询文章的循环Loop结构及用法分析
Dec 17 PHP
YII Framework框架教程之安全方案详解
Mar 14 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
thinkPHP框架实现的无限回复评论功能示例
Jun 09 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 09 PHP
第4章 数据处理-php正则表达式-郑阿奇(续)
Jul 04 #PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
Jul 04 #PHP
第4章 数据处理-php数组的处理-郑阿奇
Jul 04 #PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
Jul 03 #PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
Jul 03 #PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
Jul 03 #PHP
PHP的范围解析操作符(::)的含义分析说明
Jul 03 #PHP
You might like
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
2016/05/21 PHP
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
JQuery跨Iframe选择实现代码
2010/08/19 Javascript
Js基础学习资料
2010/11/23 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
2015/11/26 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
如何让一个json文件显示在表格里【实现代码】
2016/05/09 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
2018/07/05 Javascript
vue-router传参用法详解
2019/01/19 Javascript
layui2.0使用table+laypage实现真分页
2019/07/27 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
vue el-table实现自定义表头
2019/12/11 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
JavaScript编码小技巧分享
2020/09/17 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
Django rest framework jwt的使用方法详解
2019/08/08 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
彪马美国官网:PUMA美国
2017/03/09 全球购物
美国女性奢华品牌精品店:INTERMIX
2017/10/12 全球购物
Ray-Ban雷朋瑞典官方网站:全球领先的太阳眼镜品牌
2019/08/22 全球购物
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
办护照工作证明范本
2014/01/14 职场文书
中层干部竞聘演讲稿
2014/05/15 职场文书
会计电算化实训报告
2014/11/04 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
2016年九九重阳节活动总结
2016/04/01 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书
ROS系统将python包编译为可执行文件的简单步骤
2021/07/25 Python
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers