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 相关文章推荐
模拟flock实现文件锁定
Feb 14 PHP
php实现jQuery扩展函数
Oct 30 PHP
PHP调用Twitter的RSS的实现代码
Mar 10 PHP
php接口和抽象类使用示例详解
Mar 02 PHP
修改ThinkPHP缓存为Memcache的方法
Jun 25 PHP
php 使用file_get_contents读取大文件的方法
Nov 13 PHP
简单谈谈php中的unicode和utf8编码
Jun 10 PHP
PHP基于文件存储实现缓存的方法
Jul 20 PHP
Yii2框架使用计划任务的方法
May 25 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
Jan 21 PHP
PHP实现Redis单据锁以及防止并发重复写入
Apr 10 PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 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学习资料汇总与网址
2007/03/16 PHP
php高级编程-函数-郑阿奇
2011/07/04 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
php使用正则表达式获取图片url的方法
2015/01/16 PHP
PHP内存使用情况如何获取
2015/10/10 PHP
PHP面向对象程序设计组合模式与装饰模式详解
2016/12/02 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
2017/03/04 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
Jquery AJAX 用于计算点击率(统计)
2010/06/30 Javascript
jQuery前台数据获取实现代码
2011/03/16 Javascript
DIV外区域Click后关闭DIV的实现代码
2011/12/21 Javascript
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
JavaScript字符串常用的方法
2016/03/10 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
Pyramid添加Middleware的方法实例
2013/11/27 Python
理解python多线程(python多线程简明教程)
2014/06/09 Python
Python中文竖排显示的方法
2015/07/28 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
Python 实现数组相减示例
2019/12/27 Python
python中setuptools的作用是什么
2020/06/19 Python
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
失业者真诚求职信范文
2013/12/25 职场文书
法警的竞聘演讲稿
2014/01/02 职场文书
大学生家政服务项目创业计划书
2014/01/30 职场文书
团委书记的竞聘演讲稿
2014/04/24 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
想创业成功,需要掌握这些要点
2019/12/06 职场文书
Python Pandas数据分析之iloc和loc的用法详解
2021/11/11 Python
linux下安装redis图文详细步骤
2021/12/04 Redis