好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php文件目录操作函数学习笔记 - php文件操作

php文件目录操作函数学习笔记

在php中文件操作无非就是文件的读写操作,删除操作,判断操作,权限操作以及一些文件查找等等,下面我来把我学习到的php文件操作函数给大家贴出来吧。

文件操作函数

1、获取文件名:basename();

2、获取文件所在的目录:dirname();

3、pathinfo()获取文件信息,返回结果为一个array,包括路径、文件全名、文件名和扩展名,实例代码如下:

$file  =  '/com/netingcn/error.log' ;  print_r( pathinfo ( $file ));  /*   结果为:   Array(       [dirname] => /com/netingcn       [basename] => error.log       [extension] => log       [filename] => error   )   */  

4、判断文件是否存在:is_file();

5、判断目录是否存在:is_dir();

6、判断文件或目录是否存在:file_exists();

7、读取文件所有内容:file()或file_get_contents(),其中file()返回的是一个一行为元素的array,file_get_contents()把文件全部内容作为一个String返回;

8、写文件fwrite,实例代码如下:

$handler  =  fopen ( $file ,  'w' );  // w 会冲掉以前的内容、a 是追加   fwrite( $handler ,  'content' );  fclose( $handler );  //记得关闭打开的文件句柄  

9、文件读取操作有很多,下面简单介绍几个,实例代码如下:

$handler  =  fopen ( $file ,  'r' );  while (! feof ( $handler )) {       $datas [] =  fgets ( $handler );   //读取一行内容   }  while (! feof ( $handler )) {       $datas [] =  fgetss ( $handler );  //读取一行内容并过来html标记   }  while (! feof ( $handler )) {       $datas [] =  fgetcsv ( $handler );  //读取一行内容并解析csv字段   }  $content  =  fread ( $handler ,  $strLength );  //读取指定长读的字符   fclose( $handler ); 

php读取文件操作函数

1.用fread()获取,实例代码如下:

<?php  $file  =  "phpddt.txt" ;  $fp  =  fopen ( $file , "r" );  if  ( $fp ){    while (! feof ( $fp )){     //第二个参数为读取的长度      $data  =  fread ( $fp , 1000);   }   fclose( $fp );  }  echo   $data ;  ?>  //运行结果:关注php开发,提供专业php教程!  

2.fseek (resource handle,int offset[, int whence]),将指针偏移到偏移量offset处,php.txt内容是【Welcome to www.phpfensi.com】,运行下面php代码后:

<?php  $file  =  "php.txt" ;  $fp  =  fopen ( $file , "r" );  //将文件指针跳转到第8个字节之后   fseek ( $fp ,8);  //读取数据   $data  =  fgets ( $fp ,4096);  echo   $data ;  ?>  //结果为:   //to www.phpfensi.com  

对whence参数说明如下:

SEEK_SET - 设定位置等于 offset 字节。

SEEK_CUR - 设定位置为当前位置加上 offset。

SEEK_END - 设定位置为文件尾加上 offset。(赋值)

如果没有指定 whence,默认为 SEEK_SET。

3.ftell()函数用于获取指针位置的偏移量,php演示代码如下:

<?php  $file  =  "phpddt.txt" ;  $fp  =  fopen ( $file , "r" );  //将文件指针跳转到第8个字节之后   fseek ( $fp ,8);  //获取指针位置的偏移量   echo   ftell ( $fp );  ?>  //运行结果:8  

4.rewind()函数将文件指针移至指定位置

5.parse_ini_file()函数,解析.ini文件,轻松解析多维数组。看下面php教程就了解了!

首先保存phpddt.ini文件,文件的内容如下:

[web1]  url=  "www.phpfensi.com"   name = php教程  [web2]  url=  "www.baidu.com"   name = 百度搜索 

编写如下php代码,代码如下:

<?php  $file_arr  =  parse_ini_file ( "phpddt.ini" ,true);  print_r( $file_arr );  ?>  /*运行结果如下:   Array   (       [web1] => Array           (               [url] => www.phpfensi.com               [name] => php教程           )       [web2] => Array           (               [url] => www.baidu.com               [name] => 百度搜索           )   )*/  

目录操作

首先介绍的是一个从目录读取的函数,opendir(),readdir(),closedir(),使用的时候是先打开文件句柄,而后迭代列出,实例代码如下:

<?php  $base_dir  =  "filelist/" ;  $fso    = opendir( $base_dir );  echo   $base_dir . "<hr/>"    ;  while ( $flist =readdir( $fso )){  echo   $flist . "<br/>"  ;  }  closedir ( $fso )  ?> 

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

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

创建命令, 代码如下:mkdir($path,0777),0777是权限码,在非window下可用umask()函数设置.

rmdir($path),将删除路径在$path的文件.

dir -- directory 类也是操作文件目录的重要类,有3个方法,read,rewind,close,这是一个仿面向对象的类,它先使用的是打开文件句柄,然后用指针的方式读取的,这里看php手册,代码如下:

<?php  $d  = dir( "/etc/php5" );  echo   "Handle: "  .  $d ->handle .  "n" ;  echo   "Path: "  .  $d ->path .  "n" ;  while  (false !== ( $entry  =  $d ->read())) {       echo   $entry . "n" ;  }  $d ->close();  ?>  /*   输出:   Handle: Resource id #2   Path: /etc/php5   .   ..   apache   cgi   cli   */  

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

下面我们重点谈文件操作.

三、文件操作

● 读文件

首先是一个文件看能不能读取(权限问题),或者存在不,我们可以用is_readable函数获取信息,实例代码如下:

<?php  $file  =  'dirlist.php' ;  if  ( is_readable ( $file ) == false) {            die ( '文件不存在或者无法读取' );  }  else  {            echo   '存在' ;  }  ?> 

判断文件存在的函数还有file_exists(下面演示),但是这个显然无is_readable全面,当一个文件存在的话可以用如下代码:

<?php  $file  =  "filelist.php" ;  if  ( file_exists ( $file ) == false) {            die ( '文件不存在' );  }  $data  =  file_get_contents ( $file );  echo  htmlentities( $data );  ?> 

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

$fso  =  fopen ( $cacheFile ,  'r' );  $data  =  fread ( $fso ,  filesize ( $cacheFile ));  fclose( $fso ); 

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

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

● 写文件

和读取文件的方式一样,先看看是不是能写,实例代码如下:

<?php  $file  =  'dirlist.php' ;  if  ( is_writable ( $file ) == false) {            die ( "我是鸡毛,我不能" );  }  ?> 

能写了的话可以使用file_put_contents函数写入,实例代码如下:

<?php  $file  =  'dirlist.php' ;  if  ( is_writable ( $file ) == false) {            die ( '我是鸡毛,我不能' );  }  $data  =  '我是可鄙,我想要' ;  file_put_contents  ( $file ,  $data );  ?> 

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

$f  =  fopen ( $file ,  'w' );  fwrite( $f ,  $data );  fclose( $f ); 

替换之.

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

function  cache_page( $pageurl , $pagedata ){  if (! $fso = fopen ( $pageurl , 'w' )){      $this ->warns( '无法打开缓存文件.' ); //trigger_error       return  false;  }  if (! flock ( $fso ,LOCK_EX)){ //LOCK_NB,排它型锁定       $this ->warns( '无法锁定缓存文件.' ); //trigger_error       return  false;  }  if (!fwrite( $fso , $pagedata )){ //写入字节流,serialize写入其他格式       $this ->warns( '无法写入缓存文件.' ); //trigger_error       return  false;  }  flock ( $fso ,LOCK_UN); //释放锁定   fclose( $fso );  return  true;  } 

● 复制,删除文件

php删除文件非常easy,用unlink函数简单操作,实例代码如下:

<?php  $file  =  'dirlist.php' ;  $result  = @unlink ( $file );  if  ( $result  == false) {            echo   '蚊子赶走了' ;  }  else  {            echo   '无法赶走' ;  }  ?> 

复制文件也很容易,实例代码如下:

<?php  $file  =  'yang.txt' ;  $newfile  =  'ji.txt' ; # 这个文件父文件夹必须能写  if  ( file_exists ( $file ) == false) {            die  ( '小样没上线,无法复制' );  }  $result  =  copy ( $file ,  $newfile );  if  ( $result  == false) {            echo   '复制记忆ok' ;  }  ?> 

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

● 获取文件属性

我说几个常见的函数:

获取最近修改时间:

<?php  $file  =  'test.txt' ;  echo   date ( 'r' ,  filemtime ( $file ));  ?> 

返回的说unix的时间戳,这在缓存技术常用,相关的还有获取上次被访问的时间fileatime(),filectime()当文件的权限,所有者,所有组或其它 inode 中的元数据被更新时间,fileowner()函数返回文件所有者

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

(非window系统),ileperms()获取文件的权限,代码如下:

<?php  $file  =  'dirlist.php' ;  $perms  =  substr (sprintf( '%o' ,  fileperms ( $file )), -4);  echo   $perms ;  ?> 

filesize()返回文件大小的字节数,实例代码如下:

<?php  // 输出类似:somefile.txt: 1024 bytes   $filename  =  'somefile.txt' ;  echo   $filename  .  ': '  .  filesize ( $filename ) .  ' bytes' ;  ?> 

获取文件的全部信息有个返回数组的函数stat()函数,实例代码如下:

<?php  $file  =  'dirlist.php' ;  $perms  = stat( $file );  var_dump( $perms );  ?> 

查看更多关于php文件目录操作函数学习笔记 - php文件操作的详细内容...

  阅读:58次