一:引论0 W( L* W0 [4 C7 s% |( d
/ w6 ^4 o1 M! W$ Q3 ?8 N! ?' `
在任何计算机设备中,文件是都是必须的对象,而在web编程中,文件的操作一直是web程序员的头疼的地方,而,文件的操作在cms系统中这是必须的,非常有用的,我们经常遇到生成文件目录,文件(夹)编辑等操作,现在我把php中的这些函数做一详细总结并实例示范如何使用.,关于对应的函数详细介绍,请查阅php手册.此处只总结重点.和需要注意的地方.(这在php手册是没有的.)3 ^. ^/ d! E+ X. h$ ~
' j, v4 U! m; T& u9 b6 _- X! D
二:目录操作1 J8 ]3 V0 \1 Q0 y- k5 x& V- L
! \- U }1 A+ T: D8 b% h
首先介绍的是一个从目录读取的函数,opendir(),readdir(),closedir(),使用的时候是先打开文件句柄,而后迭代列出:0 M$ p. l! Q/ D' ^+ ]1 i+ k. X
<?php
$base_dir = "filelist/";
$fso = opendir($base_dir);
echo $base_dir."<hr/>" ;
while($flist=readdir($fso)){
echo $flist."<br/>" ;
}
closedir($fso)
?>
复制代码
( ^) n3 E Z) {; w, o- |2 l$ k这是讲返回文件目录下面的文件已经目录的程序(0文件将返回false). 7 M+ |0 I& G1 C- u ' Y3 @3 a3 m1 d有时候需要知道目录的信息,可以使用dirname($path)和basename($path),分别返回路径的目录部分和文件名名称部分,可用disk_free_space($path)返回看空间空余空间.& Y+ G+ M5 }5 _0 I, _
, S' ]+ @% c; b3 ]
创建命令: - z( A( {. _8 ]& r3 f( H d- ^
mkdir($path,0777)
复制代码
% z( g/ k; O {# T: y" l. `& l5 ^
,0777是权限码,在非window下可用umask()函数设置. |5 C2 H: q& e
rmdir($path)
复制代码
0 p" F, t* j! S( M# x0 G) ^
将删除路径在$path的文件. # U0 x! V" U( m6 s/ Y- U; U# [ - u+ p" ~% X6 u, {$ P8 t/ g& [" pdir -- directory 类也是操作文件目录的重要类,有3个方法,read,rewind,close,这是一个仿面向对象的类,它先使用的是打开文件句柄,然后用指针的方式读取的.,这里看php手册: ' y N' R0 S' b) T) @( k
<?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();
?>
复制代码
9 |, B. p* v9 ~# t& g输出:! ~% W9 h I- v# ~1 I3 |6 H, a/ l
Handle: Resource id #2
Path: /etc/php5
.
..
apache
cgi
cli
复制代码
5 v+ Q& r2 O' |" @
文件的属性也非常重要,文件属性包括创建时间,最后修改时间,所有者,文件组,类型,大小等( Z+ r# T- r# _8 j3 A j. _
- J7 N Z- E# {下面我们重点谈文件操作. ) y7 t: j2 j: m* L; Q ) t2 W! E4 D* U9 t1 u三:文件操作 1 V+ h7 ?/ T* D7 i5 Y) p# f& |! J/ ]% ?% u1 I
● 读文件 0 E! B# u* l( K. U $ C3 _, r. ^1 z9 ]1 A, v首先是一个文件看能不能读取(权限问题),或者存在不,我们可以用is_readable函数获取信息.: - Q/ v8 v. ?+ P. l- B0 p V
<?php
$file = 'dirlist.php';
if (is_readable($file) == false) {
die('文件不存在或者无法读取');
} else {
echo '存在';
}
?>
复制代码
( h: T3 c7 X$ K, C5 ]1 b
4 s: m# J1 h/ P1 Z: j& M) }判断文件存在的函数还有file_exists(下面演示),但是这个显然无is_readable全面.,当一个文件存在的话可以用! z8 _$ M2 x& y
$ |* z- Q: ?- j% v
<?php
$file = "filelist.php";
if (file_exists($file) == false) {
die('文件不存在');
}
$data = file_get_contents($file);
echo htmlentities($data);
?>
复制代码
+ P& G @ `8 E0 o( m; T9 x, I$ n
但是file_get_contents函数在较低版本上不支持,可以先创建文件的一个句柄,然后用指针读取全部:: R2 \8 {6 f' f' k' q( _& X" n
- |' K) q* p9 r+ k: P
$fso = fopen($cacheFile, 'r');
$data = fread($fso, filesize($cacheFile));
fclose($fso);
复制代码
4 U+ M# j+ [% ~% Q& k. q还有一种方式,可以读取二进制的文件:8 s* P( M# _$ O: `- _+ d
$data = implode('', file($file));
复制代码
8 K) o: _+ V' t$ F9 ]+ w
● 写文件 . { X' k$ h: X+ s' M% g, j; b5 a! N% Z8 {3 u9 x4 l" G) @4 l
和读取文件的方式一样,先看看是不是能写: : A) a! s6 C- J# ` * z6 M* B( U; O7 D4 Y1 B
<?php
$file = 'dirlist.php';
if (is_writable($file) == false) {
die("我是鸡毛,我不能");
}
?>
复制代码
2 F, Z4 w$ K7 R, s, z 5 M3 S' D& V7 G能写了的话可以使用file_put_contents函数写入:( s8 A7 C; J" o o- t
<?php
$file = 'dirlist.php';
if (is_writable($file) == false) {
die('我是鸡毛,我不能');
}
$data = '我是可鄙,我想要';
file_put_contents ($file, $data);
?>
复制代码
9 l. F S' @6 n; O# j+ k D0 R4 T
file_put_contents函数在php5中新引进的函数(不知道存在的话用function_exists函数先判断一下)低版本的php无法使用,可以使用如下方式:- S. n& G7 c6 U" N" ]# _
A9 N( I& N& V3 l" H" \$ a
$f = fopen($file, 'w');
fwrite($f, $data);
fclose($f);
复制代码
8 l H, s# R$ i% G7 X6 ^$ \ 6 \$ o( t; V' |. |+ W4 p替换之.. {* |% d7 J6 Z$ E* M' R
0 W. h3 F# A. z* J$ b0 P8 S
写文件的时候有时候需要锁定,然后写: . ?" i7 h! }% s# X' M, Y" q9 G