四PHP和文件系统的维护
PHP中有许多与文件系统有关的函数这些函数不仅可以打开文件还可以显示目录中的内容移动文件和其他一些功能许多人甚至用PHP开发基于互联网的文件资源管理器
关于文件路径的解释在Windows中可以在路径中使用/和符号而在其他的操作系统中只能使用/符号出于一致性的缘故我们统一使用/符号
下面的脚本样例可以显示一个目录清单注释已经包含在代码中
<? /*把要读取的目录的全路径名存入一个名字为$dir_name的变量中 */
$dir_name = /home/me/;
/* 创建一个句柄其值是打开一个给定目录的结果*/
$dir = opendir($dir_name);
/* 建立一个文字块用以放置列表元素(文件名字)*/
$file_list = <ul>;
/* 使用一个while语句读取已经打开的目录中的所有元素如果文件的名字不是或则显示列表中的名字*/
while ($file_name = readdir($dir)) {
if (($file_name != ) && ($file_name != )) {
$file_list = <li>$file_name;
}
}
$file_list = </ul>;
/*关闭打开的目录结束PHP模块*/
closedir($dir);
?>
<! Start your HTML >
<HTML>
<HEAD>
<TITLE>Directory Listing</TITLE>
</HEAD>
<BODY>
<! Use PHP to print the name of the directory you read >
<P>Files in: <? echo $dir_name; ?></p>
<! Use PHP to print the directory listing >
<? echo $file_list; ?>
</BODY>
</HTML>
好了我们已经得到了一个目录清单需要注意的是要读取一个文件(稍后我们将进行讲解)或目录的内容PHP运行的系统上的用户必须至少有读取文件的权限
下面是一个如何拷贝文件的例子
<? /*把你要拷贝的原文件的全路径赋给一个名字为$original的变量中把拷贝的文件的全路径赋予一个名字为$copied的变量中*/
$original = /home/me/mydatabasedump;
$copied = /archive/mydatabasedumo_;
/* 使用copy()函数拷贝原始文件如果拷贝没有完成则会显示一个错误信息*/
@copy($original $copied) or die(Couldnt copy file);
?>
这个例子是一个文件备份系统的原型在这段脚本运行时它把文件拷贝到一个不同的位置进行保存稍微修改一下守护程序就可以在一天中你指定的时刻执行它而无需用户的干预
假定你在系统上安装了Lynx可以创建一个守护程序的条目访问这个文件访问这个文件会运行这个脚本并建立一个拷贝文件下面的例子将在上午点钟运行这个脚本然后关闭Lynx
* * * [username] lynx dump >/dev/null >&
如果运行的是CGI版本的PHP可以跳过Lynx部分而直接调用二进制文件
* * * [username] php /path/to/copyfilephp >/dev/null >&
五丰富的数组函数
PHP 中新添加了个与组数有关的函数其中一些常见的函数可以判断一个数组中是否包含某个元素对一个数组中的元素进行计数添加或删除数组中的元素或者对数组中的元素进行排序
如果有一个很大的数组而你需要找出其中是否包含一个特定的元素就可以使用in_array()下面的例子将显示Not found in this array因为在一个名字为$namesArray的数组中查找Albert而在$namesArray数组中不存在这样一个元素
<? $namesArray = array(Joe Jane Bob Mary Paul Eddie John);
$lookingFor = Albert;
if (in_array($lookingFor $namesArray)) {
echo Youve found it!;
} else {
echo Not found in this array!;
}
?>
如果把$lookingFor的值改为Mary就会得到Youve found it!的信息因为Mary是$namesArray数组中的一个元素
如果要对一个数组中的元素个数进行计数只要简单地使用count()函数即可
<? $namesArray = array(Joe Jane Bob Mary Paul Eddie John);
$count = count($namesArray); ?>
返回的$count的值为
可以在一个数组的开头或结尾处添加元素还可以使用array_merge()来建立一个包含二个或更多数组中元素的新数组合并时元素的顺序会按指定的顺序排列如果原来的数组是被排过序的在合并后需要对它重新排序
我们可以首先利用array_push()在数组的结尾处添加一个元素
<? /* 建立一个数组 */
$fruitArray = array(apple orange banana kiwi pear);
/* 向数组中添加元素 */
array_push($fruitArray grape pineapple tomato);
/*显示每个元素及其序号*/
while (list($key$value) = each($fruitArray)) {
echo $key : $value<br>;
}
?>
运行上面的程序将得到下面的结果
: apple
: orange
: banana
: kiwi
: pear
: grape
: pineapple
: tomato
如果需要在数组的开头添加元素其代码与上面的代码差不多唯一的不同之处是需要用array_unshift()代替array_push()
<?
/* 建立一个数组*/
$fruitArray = array(apple orange banana kiwi pear);
/* 向数组中添加元素*/
array_unshift($fruitArray grape pineapple tomato);
/* 显示每个元素及其序号*/
while (list($key$value) = each($fruitArray)) {
echo $key : $value<br>;
}
?>
运行上面的程序将得到下面的结果
: grape
: pineapple
: tomato
: apple
: orange
: banana
: kiwi
: pear
array_merge()函数可以把二个或更多的数组合并为一个数组
<? /*建立第一个数组*/
$fruitArray = array(apple orange banana kiwi pear);
/*/建立第二个数组*/
$vegArray = array(carrot green beans asparagus artichoke corn);
/*把这二个数组合并为一个数组*/
$goodfoodArray = array_merge($fruitArray $vegArray);
/* 显示每个元素及其序号*/
while (list($key$value) = each($goodfoodArray)) {
echo $key : $value<br>;
}
?>
运行上面的脚本将得到下面的结果
: apple
: orange
: banana
: kiwi
: pear
: carrot
: green beans
: asparagus
: artichoke
: corn
现在我们已经掌握了如何添加元素和合并数组我们再来看看如何从一个数组中删除元素从一个数组的末尾删除一个元素可以使用array_pop()函数使用array_shift()函数可以从一个数组的开头删除一个元素尽管使用array_pop()或 array_shift()从数组中删除了一个元素你还可以把这个元素当作一个变量来使用
使用array_pop()从一个数组的末尾删除一个元素
<?
/*建立一个数组*/
$fruitArray = array(apple orange banana kiwi pear);
/* 从数组的末尾删除一个元素*/
$popped = array_pop($fruitArray);
/* 显示删除后数组的内容和你删除的元素*/
while (list($key$value) = each($fruitArray)) {
echo $key : $value<br>;
}
echo <br>and finally in $popped: $popped;
?>
运行上面的脚本会得到下面的结果
: apple
: orange
: banana
: kiwi
and finally in $popped: pear
我们再来讨论一个从一个数组的末尾删除元素的例子
<?
/* 建立一个数组*/
$fruitArray = array(apple orange banana kiwi pear);
/*从一个数组的开始删除一个元素*/
$shifted = array_shift($fruitArray);
/* 显示删除后数组的内容和你删除的元素*/
while (list($key$value) = each($fruitArray)) {
echo $key : $value<br>;
}
echo <br>and finally in $shifted: $shifted;
?>
运行上述脚本会得到如下的显示结果
: orange
: banana
: kiwi
: pear
and finally in $shifted: apple
另外还有几个函数可以对数组中的元素进行排序但在这里我们将只简要介绍基本的排序函数说明排序的过程
<? /*建立一个数组*/
$fruitArray = array(apple orange banana kiwi pear);
/* 对数组进行排序*/
sort($fruitArray);
/*显示每个元素及其序号*/
while (list($key$value) = each($fruitArray)) {
echo $key : $value<br>;<