一:引论8 o6 ^ g) S9 L6 ~2 u
0 y, c1 G- f3 h+ g/ |" y, D' e$ [
在任何计算机设备中,文件是都是必须的对象,而在web编程中,文件的操作一直是web程序员的头疼的地方,而,文件的操作在cms系统中这是必须的,非常有用的,我们经常遇到生成文件目录,文件(夹)编辑等操作,现在我把php中的这些函数做一详细总结并实例示范如何使用.,关于对应的函数详细介绍,请查阅php手册.此处只总结重点.和需要注意的地方.(这在php手册是没有的.) 8 M+ b) z0 M* t ) G6 M) ^7 I4 Z- R% w { 二:目录操作# ?* K$ @4 f, k# u$ U
7 ^# J% R3 r5 |; z4 d6 d 首先介绍的是一个从目录读取的函数,opendir(),readdir(),closedir(),使用的时候是先打开文件句柄,而后迭代列出: ( ?4 B' r( N7 X3 n9 N( _$ q
<?php
$base_dir = "filelist/";
$fso = opendir($base_dir);
echo $base_dir."<hr/>" ;
while($flist=readdir($fso)){
echo $flist."<br/>" ;
}
closedir($fso)
?>
复制代码
0 x" l7 Y' ]4 O9 V这是讲返回文件目录下面的文件已经目录的程序(0文件将返回false).2 t! x9 G' e5 C$ Y2 H$ E
+ ^( v3 E k2 C" N5 m
有时候需要知道目录的信息,可以使用dirname($path)和basename($path),分别返回路径的目录部分和文件名名称部分,可用disk_free_space($path)返回看空间空余空间. : e8 Z. z$ _2 Z* n' q" ]$ R5 x" g& M# }! G7 I/ E
创建命令:% Z6 f8 {) F. k" f9 s4 x2 C6 F
mkdir($path,0777)
复制代码
4 {! r3 T z u& U: m* S( H
,0777是权限码,在非window下可用umask()函数设置.7 I! D* _, }- ^
rmdir($path)
复制代码
) T1 U# m& z" Z$ j g将删除路径在$path的文件. 8 a5 h( r8 M) p' d& @$ \1 h3 y 8 Z! S! ]' U; _. _8 Cdir -- directory 类也是操作文件目录的重要类,有3个方法,read,rewind,close,这是一个仿面向对象的类,它先使用的是打开文件句柄,然后用指针的方式读取的.,这里看php手册: / g1 z" D/ h( A' L7 N. [$ g
<?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();
?>
复制代码
8 h+ ^ Q0 ~" A/ W S5 C9 L输出:5 u. \) K/ D( M: o" h5 o) w! w& _7 G
. S% j4 J9 e! r8 u- t● 读文件 8 Z2 ?1 K- c2 e# M6 }4 `
, B/ e. L6 v; J. L
首先是一个文件看能不能读取(权限问题),或者存在不,我们可以用is_readable函数获取信息.: 6 F# {9 p& X1 ~" j4 B
<?php
$file = 'dirlist.php';
if (is_readable($file) == false) {
die('文件不存在或者无法读取');
} else {
echo '存在';
}
?>
复制代码
) Y* [# \/ k' a2 p: ~% O/ G) b( }0 @' P6 R' m. ^$ N8 m ~
判断文件存在的函数还有file_exists(下面演示),但是这个显然无is_readable全面.,当一个文件存在的话可以用" L# _1 G& u, v j* g
3 D7 W2 M m2 Y
<?php
$file = "filelist.php";
if (file_exists($file) == false) {
die('文件不存在');
}
$data = file_get_contents($file);
echo htmlentities($data);
?>
复制代码
" D! n8 I9 J" Z% M. {9 g2 g! d但是file_get_contents函数在较低版本上不支持,可以先创建文件的一个句柄,然后用指针读取全部: 6 {8 o7 Q, X- U0 e+ | N9 Y+ r/ Z3 o8 W8 c1 z" H
$fso = fopen($cacheFile, 'r');
$data = fread($fso, filesize($cacheFile));
fclose($fso);
复制代码
8 U$ K8 D: x" ^- r0 W7 d( H# r
还有一种方式,可以读取二进制的文件:- J6 H- h: U e
$data = implode('', file($file));
复制代码
/ o! [/ [( y# ^9 v# o
● 写文件 9 F; x0 v `/ u' H* \% J2 r
9 @8 A9 u; N3 B" n( I, s
和读取文件的方式一样,先看看是不是能写: ( H8 P5 s; s6 E1 S' I' }# y! _8 O8 @
<?php
$file = 'dirlist.php';
if (is_writable($file) == false) {
die("我是鸡毛,我不能");
}
?>
复制代码
3 p! H1 h! P+ j. a$ I5 R1 p/ o( ]' U' [( o" M, K$ u2 F
能写了的话可以使用file_put_contents函数写入: : Q* f" @% D# H: t+ t
<?php
$file = 'dirlist.php';
if (is_writable($file) == false) {
die('我是鸡毛,我不能');
}
$data = '我是可鄙,我想要';
file_put_contents ($file, $data);
?>
复制代码
: s0 B v j, h, ]; R5 E
file_put_contents函数在php5中新引进的函数(不知道存在的话用function_exists函数先判断一下)低版本的php无法使用,可以使用如下方式: & l, ^3 B+ b3 j0 U6 i% i& S8 U m' a& y5 w+ ] t