19-FSO(1)

在前面几篇博文中,我们一起来学习了MySQL函数库和GD函数库的常规操作。当然这只需一些基础操作,我们会在后面的博文中通过一些具体的实例来让大家对它们有一个更全面的了解!

今天,我们来看一下FSO。其实FSO是ASP中的一个概念,其全称为FileSystemObject,在PHP中有两个函数库:Directory和File,所以,我自己套用了FSO的概念!

今天,我们来实现一个在线的目录浏览功能,所以先必须了解目录操作函数:opendir、readdir、closedir、filesize、filemtime

其实opendir、readdir、closedir三个函数往往是组合在一起使用的!因为,我们要实现看一下文件夹中具体包含的文件和/或子文件夹,就必须先打开文件夹(opendir),然后来查看一下文件夹中包含的文件和/或子文件夹(readdir),当查看完毕后,将文件夹关闭就可以了(closedir)

一、基础操作

我们先假设来读取一个固定的文件夹,其目录结构如下:
19-FSO(连载1)_第1张图片

WEB文件夹的目录结构如下:
 
19-FSO(连载1)_第2张图片
 
我们要通过程序来读取WEB文件夹包含的元素(文件和/或子文件夹)
 
程序代码如下:
 
$folderPath = "./WEB";
 
$folderHandle = opendir($folderPath);
 
while ( $folderItemName = readdir($folderHandle))
 
echo ( "

{ $folderItemName }

\n"
);
 
closedir( $folderHandle );
 
?>
 

运行结果如下:
 
19-FSO(连载1)_第3张图片

 
当运行完这个案例后,我们可以产生两个疑问:A、如何区分文件和文件夹B、.和..是什么意思

如果学习过DOS基础知识的话,那么对于.和..应该是非常清楚的。

.代表当前目录。

..代表当前目录的父目录

那么如何区分文件和文件夹呢?PHP提供了两个函数:is_file和is_dir,那么,我们将前面的程序来修改一下!
 
$folderPath = "./WEB";
 
$folderHandle = opendir($folderPath);
 
while ( $folderItemName = readdir($folderHandle))
 
{
 
if($folderItemName != "." && $folderItemName != "..")
 
{
 
 if(is_file($folderItemName))
           
{
    
$objType = " 文件 " ;
 
}
 
elseif (is_dir($folderItemName))
 
{
 
$objType = " 文件夹 " ;
 
}  
 
echo("

{$folderItemName}   {$objType}

\n"
);
 
}
 
}
 
closedir( $folderHandle );
 
?>
 
 
运行结果如下:
 
19-FSO(连载1)_第4张图片

 

唉,.和..是忽略了,但是为什么没有出现对象的类型标志呢?

请不要忘记文件/文件夹都是存储在文件夹内的!也就是01.chm是存储在web目录下的!所以…
 

运行结果如下:
 
 
$folderPath = "./WEB";
 
$folderHandle = opendir($folderPath);
 
while ( $folderItemName = readdir($folderHandle))
 
{
 
if($folderItemName != "." && $folderItemName != "..")
 
{
 
$folderItemPath = $folderPath . "/" . $folderItemName;
 
if(is_file($folderItemPath))
 
{
 
$objType = " 文件 " ;
 
}
 
elseif (is_dir($folderItemPath))
 
{
 
$objType = " 文件夹 " ;
 
}
 
 else
      
{
 
$bjType = "未知类型";
       
}
 
echo("

{$folderItemName}   {$objType}

\n"
);
 
}
 
}
 
closedir( $folderHandle );
 
?>
 
 
运行结图如下:
 
 
 
19-FSO(连载1)_第5张图片
 
 

这才是我们需要的结果呢!哈哈哈!