当前位置:文档之家› PHP文件及目录操作总结

PHP文件及目录操作总结

PHP文件及目录操作总结
PHP文件及目录操作总结

PHP文件及目录操作总结

在任何计算机设备中,文件是都是必须的对象,而在web编程中,文件的操作一直是web程序员的头疼的地方,而文件的操作在cms系统中这是必须的,非常有用的,我们经常遇到生成文

件目录,文件(夹)编辑等操作

一. 文件及目录操作的重要性

大型语言不可或缺

二. 文件及目录操作的用途及优势

计数器,生成静态网页,数据库配置文件,xml配置文件,输出execl文件等,速度快的优

三. 文件及目录操作的原理

封装成流

四. 常用文件及目录操作的函数介绍

常用目录操作函数介绍:

首先介绍的是一个从目录读取的函数,opendir(),readdir(),closedir(),使用的时候是先

打开文件句柄,而后迭代列出:

1.

2.$base_dir = "filelist/";

3.$fso = opendir($base_dir);

4.echo $base_dir."


" ;

5.while($flist=readdir($fso)){

6.echo $flist."
" ;

7.}

8.closedir($fso)

9.?>

复制代码

这是讲返回文件目录下面的文件已经目录的程序(0文件将返回false).

有时候需要知道目录的信息,可以使用dirname($path)和basename($path),分别返回路径的目录部分和文件名名称部分,可用disk_free_space($path)返回看空间空余空间.

创建命令:

mkdir($path,0777)

,0777是权限码,在非window下可用umask()函数设置.

rmdir($path)

将删除路径在$path的文件.

这是一个仿面向对象的类

文件的属性也非常重要,文件属性包括创建时间,最后修改时间,所有者,文件组,类型,大小

常用文件操作函数介绍:

fopen 打开文件函数

fopen (路径和文件名,打开方式);//R-只读 W-写入 A-读写

fread 读取文件内容

fread (打开的文件,结束位置);//字节为单位

filesize 读取文件大小,字节为计量单位

filesize (路径和文件名);

fwrite 写入文件内容

fwrite (路径和文件名,写入的内容);

fclose 关闭打开的文件

fclose (路径和文件名);

unlink() 删除文件函数

unlink(路径和文件名)

rmdir() 删除目录函数

rmdir(路径和目录名)

file(文件名);

返回一个数组,每一个元素是文件中的一行.

读文件

首先是一个文件看能不能读取(权限问题),或者存在不,我们可以用is_readable函数获取

信息.:

1.

2.$file = 'dirlist.php';

3.if (is_readable($file) == false) {

4. die('文件不存在或者无法读取');

5.} else {

6. echo '存在';

7.}

8.?>

复制代码

判断文件存在的函数还有file_exists(下面演示),但是这个显然无is_readable全面.,当

一个文件存在的话可以用

1.

2.$file = "filelist.php";

3.if (file_exists($file) == false) {

4. die('文件不存在');

5.}

6.$data = file_get_contents($file);

7.echo htmlentities($data);

8.?>

复制代码

但是file_get_contents函数在较低版本上不支持,可以先创建文件的一个句柄,然后用指

针读取全部:

1. $fso = fopen($cacheFile, 'r');

2. $data = fread($fso, filesize($cacheFile));

3. fclose($fso);

复制代码

还有一种方式,可以读取二进制的文件:

$data = implode('', file($file));

写文件

和读取文件的方式一样,先看看是不是能写:

1.

2.

3.$file = 'dirlist.php';

4.if (is_writable($file) == false) {

5. die("我是鸡毛,我不能");

6.}

7.?>

复制代码

能写了的话可以使用file_put_contents函数写入:

1.

2.$file = 'dirlist.php';

3.if (is_writable($file) == false) {

4. die('我是鸡毛,我不能');

5.}

6.$data = '我是可鄙,我想要';

7.file_put_contents ($file, $data);

8.?>

复制代码

file_put_contents函数在php5中新引进的函数(不知道存在的话用function_exists函数先判断一下)低版本的php无法使用,可以使用如下方式:

1.$f = fopen($file, 'w');

2.fwrite($f, $data);

3.fclose($f);

复制代码

替换之.

写文件的时候有时候需要锁定,然后写:

1.function cache_page($pageurl,$pagedata){

2.if(!$fso=fopen($pageurl,'w')){

3. $this->warns('无法打开缓存文件.');//trigger_error

4. return false;

5.}

6.if(!flock($fso,LOCK_EX)){//LOCK_NB,排它型锁定

7. $this->warns('无法锁定缓存文件.');//trigger_error

8. return false;

9.}

10.if(!fwrite($fso,$pagedata)){//写入字节流,serialize写入其他格式

11. $this->warns('无法写入缓存文件.');//trigger_error

12. return false;

13.}

14.flock($fso,LOCK_UN);//释放锁定

15.fclose($fso);

16.return true;

17.}

复制代码

复制,删除文件

php删除文件非常easy,用unlink函数简单操作:

1.

2.$file = 'dirlist.php';

3.$result = @unlink ($file);

4.if ($result == false) {

5. echo '蚊子赶走了';

6.} else {

7. echo '无法赶走';

8.}

9.?>

复制代码

即可.

复制文件也很容易:

1.

2.$file = 'yang.t xt';

3.$newfile = 'ji.txt'; # 这个文件父文件夹必须能写

4.if (file_exists($file) == false) {

5. die ('小样没上线,无法复制');

6.}

7.$result = copy($file, $newfile);

8.if ($result == false) {

9. echo '复制记忆ok';

10.}

11.?>

复制代码

可以使用rename()函数重命名一个文件夹.其他操作都是这几个函数组合一下就能实现的.

获取文件属性

我说几个常见的函数:

获取最近修改时间:

1.

2.$file = 'test.txt';

3.echo date('r', filemtime($file));

4.?>

复制代码

返回的说unix的时间戳,这在缓存技术常用.

相关的还有获取上次被访问的时间fileatime(),filectime()当文件的权限,所有者,所有组或其它 inode 中的元数据被更新时间,fileowner()函数返回文件所有者

$owner = posix_getpwuid(fileowner($file));

(非window系统),ileperms()获取文件的权限,

1.

2.$file = 'dirlist.php';

3.$perms = substr(sprintf('%o', fileperms($file)), -4);

4.echo $perms;

5.?>

复制代码

filesize()返回文件大小的字节数:

1.

2.

3.// 输出类似:somefile.txt: 1024 bytes

4.

5.$filename = 'somefile.t xt';

6.echo $filename . ': ' . filesize($filename) . ' bytes';

7.

8.?>

复制代码

获取文件的全部信息有个返回数组的函数stat()函数:

1.

2.$file = 'dirlist.php';

3.$perms = stat($file);

4.var_dump($perms);

5.?>

复制代码

问:如何新建一个文件?

答:1、使用fopen("要建立的文件名","参数"),参数可选 w,w+,a,a+

2、使用exec("echo '' > 要建立的文件名");这样是使用系统方式建立这个文件,你还可

以使用touch这个linux命令来建立

问:为什么我无法建立文件?

答:1、如果你使用了fopen建立文件,是否正确的使用了参数

2、系统权限问题,请询问你的WEBMASTER你的FTP目录是否有写的权限

3、FTP权限问题,你要确认你的PHP文件所要写文件所在目录要有写的权限,也就是你的

FTP软件登陆后other组要有写这个权限,

如果没有请修改权限后尝试

问:如何将文件读入数组?

答:使用file

问:如何将文件全部读出?

答:1、使用fread($fp);

2、如果你的PHP版本>=4.3.0的话可以使用file_get_contents();

问:如何判断文件是否存在?

答:使用file_exists();为什么不使用fopen()来判断呢?原因是有时候是因为权限问题导

致fopen返回的数据引导我们错误的判断

问:为什么当我读取一个WEB页面的时候出错?

答:1、可能是你的传递参数错,当读取WEB页面的时候你只可以使用r方式读取页面

2、确保你要读取的WEB页面可以访问

问:我如何才能获得文件的相关属性?

答:PHP提供了一组获得文件属性的方法,例如

filemtime(),fileowner(),filegroup(),filectime(),fileatime()...详细的使用

请参阅手册。

问:PHP打开文件后是否可以象C一样进行文件“游标”的定位呢?

答:可以的,使用fseek();

问:我想在访问文件的时候不允许其他人也访问此文件,怎么办?

答:1、你可以采用其他方面程序限制用户接入文件操作的页面

2、使用flock();详细的参数以及使用方法请参阅手册

问:如何删除文件内第一行,或指定一行数据?

答:PHP并没有提供这样的操作方法,不过我们可以通过组合使用,以下代码演示我们将删除文件"test.dat"中的第三行数据(test.datw

文件中数据不止三行)

1.

2.$filename="test.dat";//定义操作文件

3.$delline=3; //要删除的行数

4.if(!file_exsits($filename)){

5.die("指定文件未发现!操作中断!");

6.}

7.$farray=file($filename);//读取文件数据到数组中

8.for($tmpa=0;$Tmpa

9.if(strcmp($Tmpa+1,$delline)==0){

10.//判断删除的行

11.continue;

12.}

13.//重新整理后的数据

14.$newfp.=$farray[$Tmpa]."\r\n";

15.}

16.$fp=@fopen($filename,"a") or die("写方式打开文件$filename 失败");//我们以写的方式打开文件

17.@fputs($fp,$newfp) or die("文件写入失败");

18.@fclose($fp);

19.?>

复制代码

以上代码演示的是删除一行文件,不过你如果仔细的看的话,其实也给你提供了其他的文件

操作的相关提醒~

问:当我试图打开一个不存在的文件的时候,我如何不让错误显示出来以避免我的路径泄

露!!

答:在你要打开文件的方法前增加@符号用来屏蔽错误,@是PHP提供的错误信息屏蔽的专用

符号

或您可以在这个要操作的步骤前增加(通常是在页首)error_reporting(0);用来屏蔽页面

内所有错误信息的显示

一个不推荐的方法就是去修改php.ini(ISP除外)

问:我使用的是虚拟主机,我如何防止其他用户窃取我的数据?

答:建议ISP修改php.ini中的open_basedir进行限制,

不推荐的ISP设置是将fopen,file等文件操作加入disable_function中。

问:为什么我用PHP建立文件后我FTP登陆要删除这些文件无法删除??

答:主要是因为PHP建立的文件归属WEB用户组,也就是建立的文件,并非是你FTP用户的!!!

这个问题的解决就是,使用PHP程序的chmod,unlink等方式进行处理,建议用户在使用PHP

建立文件的时候

记得chmod文件权限,建议为777

问:如何使用文本文件作为数据仓库?有的留言本,论坛之类的都是使用这个的啊!答:其实这个主要还是使用了file,结合explode进行数据读取与分割的典型范例而已。

问:如何更改文件名?

答:rename();

问:如何删除文件?

答:unlink(); exec("del(rm -vf) filename");注:rm -vf为linux下使用

问:如何清空文件?

答:使用fopen(filename,"w");或exec("echo '' > filename");

问:如何编辑文件内容?

答:我记得我以前回答过一个删除文件内容的,其实编辑内容在删除内容的基础上,进行变

量替换就可以了。

希望你可以向上找找,将我上面的continue修改为替换变量数据就可以了

文件及目录操作的程序例子

1.计数器

<?php

/*以只读方式打开计数器文件counter.txt,并将它读到变理$num*/

$fp=fopen("counter.txt","r");

$num=fgets($fp,5);

fclose($fp);

/*变量的值加1并将新值存入计数器文件*/

$num++;

$fp=fopen("counter.txt","w");

fputs($fp,$num);

fclose($fp);

?>

2.遍历目录

1.

2. $dir = 'dirname'; //要遍历的目录名

3. function view_dir($directory)

4. { $handle = opendir( $directory ); //打开目录

5. while ( $file = readdir($handle) ) //如果READDIR函数读到文件或目

录则执行while

6. {

7. $bdir = $directory . '/' .$file;//定义目录下的文件名

8. if ($file <> '.' && $file <> '..' && is_dir($bdir))//如果不是.和 ..

并且$bdir是个目录

9. {

10. view_dir( $directory .'/'. $file);//再次调用view_dir方法

11. }

12. else if( $file <> '.' && $file <> '..') //否则输出文件名并换行

13. {

14. echo $directory .'/'. $file . '
';

15. }

16. }

17. closedir( $handle );//关闭目录

18. }

19. view_dir($dir);//调用view_dir方法使程序执行

20. ?>

3.生成execl文件

1.

2.header("Content-type:application/vnd.ms-excel");

3.header("Content-Disposition:filename=test.xls");

4.echo "test1";

5.echo "test2";

6.echo "test1";

7.echo "test2";

8.?>

复制代码

相关主题
文本预览
相关文档 最新文档