一:引论 9 E# R. v# e. j0 X % d( b0 Z! \; f. C) T/ W 在任何计算机设备中,文件是都是必须的对象,而在web编程中,文件的操作一直是web程序员的头疼的地方,而,文件的操作在cms系统中这是必须的,非常有用的,我们经常遇到生成文件目录,文件(夹)编辑等操作,现在我把php中的这些函数做一详细总结并实例示范如何使用.,关于对应的函数详细介绍,请查阅php手册.此处只总结重点.和需要注意的地方.(这在php手册是没有的.)- @" s, ~6 `& A& ?7 T6 w E+ P
7 A( \+ s+ L' ?9 e
二:目录操作 9 C1 [$ X! V1 j- r9 l% f8 W" a" [ p! o* F: g3 N
首先介绍的是一个从目录读取的函数,opendir(),readdir(),closedir(),使用的时候是先打开文件句柄,而后迭代列出: , G$ N( T: W Z
$ I& J. d* u4 e# c! ^( N3 b& f
,0777是权限码,在非window下可用umask()函数设置. # O% Z# {$ b9 E; J8 M6 c
rmdir($path)
复制代码
; a+ ], F+ `& A+ w! n
将删除路径在$path的文件. ) r3 X9 O p$ j9 W& }4 A' A, B' N) l. S3 ^
dir -- directory 类也是操作文件目录的重要类,有3个方法,read,rewind,close,这是一个仿面向对象的类,它先使用的是打开文件句柄,然后用指针的方式读取的.,这里看php手册: & \5 ~# G& s4 ]/ n1 g; V; I
<?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();
?>
复制代码
* O9 B0 M4 g& u# h2 g4 D4 A
输出:. T4 f: u# ]+ `0 @4 t1 b* X
Handle: Resource id #2
Path: /etc/php5
.
..
apache
cgi
cli
复制代码
! u* `; N1 V! j8 H文件的属性也非常重要,文件属性包括创建时间,最后修改时间,所有者,文件组,类型,大小等 # t3 u! O5 e, }- d ) u: K2 j! R' [+ ~. B下面我们重点谈文件操作. % b+ E/ d% n, d8 c9 j9 c: N K! M4 ]" Y
三:文件操作 d" k/ S% i! Q- S& ~1 c! J& X( E: M0 X$ i
● 读文件 - `& Z" ?! w# W4 i, c( ^ - B# K. o6 T$ z+ m7 q' m首先是一个文件看能不能读取(权限问题),或者存在不,我们可以用is_readable函数获取信息.: $ f# [* f, R4 b/ \! R _# I3 c" N
<?php
$file = 'dirlist.php';
if (is_readable($file) == false) {
die('文件不存在或者无法读取');
} else {
echo '存在';
}
?>
复制代码
, a& k; j. h. @: `% a * Q. R) R z4 u8 L5 {; e判断文件存在的函数还有file_exists(下面演示),但是这个显然无is_readable全面.,当一个文件存在的话可以用% I: k" u3 J1 h0 e. D9 Z, f. Q t
. ]% J7 U0 q. R M. N% k
<?php
$file = "filelist.php";
if (file_exists($file) == false) {
die('文件不存在');
}
$data = file_get_contents($file);
echo htmlentities($data);
?>
复制代码
j t6 T Q6 S' D# O但是file_get_contents函数在较低版本上不支持,可以先创建文件的一个句柄,然后用指针读取全部: 7 q, l- [# W/ Z1 I2 k4 j ; q/ K( `5 ^; \# J
$fso = fopen($cacheFile, 'r');
$data = fread($fso, filesize($cacheFile));
fclose($fso);
复制代码
7 d5 D/ v0 m- f( N' T" j
还有一种方式,可以读取二进制的文件: / [5 {2 b6 k2 ~. }/ B6 T
$data = implode('', file($file));
复制代码
1 P- K, y( z# y+ b# _/ T8 ~
● 写文件 2 ^0 S4 H n* ~6 m) X* l ?$ w
7 ~ W" h8 r4 ]; T1 k6 e
和读取文件的方式一样,先看看是不是能写:& E$ V. X2 P# _, W' }8 w