13.1 目录
查看文件时一定会涉及目录操作,本节介绍与目录操作有关的函数。
13.1.1 判断文件类型
可使用filetype确定文件的类型,语法格式如下:
function filetype ($filename) false|string
说明:filename表示文件的路径,该函数返回文件的类型,可能的值有fifo、char、dir、block、link、file和unknown。如果出错,就返回false。如果调用失败或者文件类型未知,filetype()还会产生一个E_NOTICE消息。
filetype()使用示例如下:
<?php
echo filetype('1.jpg');
echo filetype('filetype.php');
echo filetype('test');
var_dump(filetype('test1'));
执行以上代码的输出结果为:
filefiledirbool(false)
除filetype()外,还可以使用is_dir判断文件名是否是一个目录,如果是就返回布尔值true,否则返回false,使用is_file()判断文件名是否为一个正常的文件。示例如下:
<?php
var_dump(is_dir('test'));
var_dump(is_file('1.jpg'));
var_dump(is_dir('3.png'));
执行以上程序的结果为:
bool(true) bool(true) bool(false)
13.1.2 创建和删除目录
1.创建目录
在PHP中使用mkdir创建目录,语法如下:
function mkdir ($pathname, $mode = 0777, $recursive = false, $context = null) bool
此函数将尝试创建一个由pathname指定的目录。默认的mode是0777,意味着最大可能的访问权。recursive为true时表示允许递归地创建目录。创建目录成功时返回true,或者在失败时返回false。
该函数的使用示例如下:
<?php
$structure='./depth1/depth2/depth3';
if(! mkdir($structure,0777,true)){
die('Failed to create folders...');
}else{
echo "crate successfuly";
}
执行以上代码,在浏览器中的输出结果为:
crate successfuly
在当前目录下递归地创建/depth1/depth2/depth3/目录。
2.删除目录
在PHP中使用rmdir删除目录,语法如下:
function rmdir ($dirname, $context = null) bool
尝试删除dirname所指定的目录。该目录必须是空的,而且要有相应的权限。失败时会产生一个E_WARNING级别的错误。
使用示例如下:
<?php
$structure='./depth1/depth2/depth3';
if(! rmdir($structure)){
die('Failed to delete folders...');
}else{
echo "delete successfuly";
}
执行以上代码将会删除我们刚才创建的depth3目录,并在浏览器中显示结果:
delete successfuly
13.1.3 打开读取和关闭目录
在PHP中使用opendir()打开目录,语法如下:
function opendir ($path, $context = null) false|resource
如果成功就返回目录句柄的resource,失败则返回false。如果path不是一个合法的目录或者因为权限限制或文件系统错误而不能打开目录,opendir()返回false并产生一个E_WARNING级别的PHP错误信息。可以在opendir()前面加上“@”符号来抑制错误信息的输出。
使用readdir()从目录句柄中读取条目,语法如下:
function readdir ($dir_handle = null) false|string
返回目录中下一个文件的文件名,文件名以在文件系统中的排序返回。
使用closedir()关闭目录句柄,语法如下:
function closedir ($dir_handle = null) void
该函数将关闭由dir_handle指定的目录流,且目录流必须之前被opendir()所打开。
以上3个函数的使用示例如下:
<?php
$dir='../ch13_file_dir/';
if(is_dir($dir)){
if($dh=opendir($dir)){
while(($file=readdir($dh))!==false){
echo "filename:$file :filetype:".filetype($dir.$file) ."</br>";
}
closedir($dh);
}
}
?>
执行以上程序的结果如下:
filename:. :filetype:dir
filename:.. :filetype:dir
filename:1.jpg :filetype:file
filename:2.jpg :filetype:file
filename:3.png :filetype:file
filename:depth1 :filetype:dir
filename:filetype.php :filetype:file
filename:is_dir.php :filetype:file
filename:makedir.php :filetype:file
filename:opendir.php :filetype:file
filename:rmdir.php :filetype:file
filename:test :filetype:dir
在PHP中使用scandir()列出指定路径中的文件和目录,语法如下:
function scandir ($directory, $sorting_order = null, $context = null) array|false
该函数将返回一个包含有directory中的文件和目录的数组。directory是要被浏览的目录。sorting_order默认的排序顺序是按字母升序排列。如果使用了可选参数sorting_order(设为1),那么排序顺序是按字母降序排列。
scandir()使用示例如下:
<?php
$dir='../ch13_file_dir/';
$files1 = scandir($dir);
$file2 = scandir($dir,1);
echo "<pre>";
print_r($files1);
print_r($file2);
执行以上代码的结果为:
Array ( [0] => . [1] => .. [2] => 1.jpg [3] => 2.jpg [4] => 3.png [5] => depth1 [6] => filetype.php [7] => is_dir.php [8] => makedir.php [9] => opendir.php [10] => rmdir.php [11] => scandir.php [12] => test ) Array ( [0] => test [1] => scandir.php [2] => rmdir.php [3] => opendir.php [4] => makedir.php [5] => is_dir.php [6] => filetype.php [7] => depth1 [8] => 3.png [9] => 2.jpg [10] => 1.jpg [11] => .. [12] => . )
13.1.4 获得路径中目录部分
使用dirname()返回路径中的目录部分,语法如下:
function dirname ($path, $levels = 1) string
给出一个包含有指向一个文件的全路径字符串,本函数将返回去掉文件名后的目录名,即path的父目录,如果在path中没有斜线,就返回一个点('.'),表示当前目录;否则返回的是把path中结尾的/component(最后一个斜线以及后面部分)去掉之后的字符串。
在Windows中,斜线(/)和反斜线(\)都可以用作目录分隔符,在其他环境下是斜线(/)。
使用示例如下:
<?php
echo dirname('is_dir.php')."</br>";
echo dirname('./depth1/depth2/');
执行以上代码,在浏览器中的输出结果为:
.
./depth1
13.1.5 目录磁盘空间
在PHP中可使用以下两个函数查看磁盘空间:
(1)float disk_free_space ( string $directory ) 给出一个包含有一个目录的字符串。本函数将根据相应的文件系统或磁盘分区返回可用的字节数,在失败时返回false。
(2)float disk_total_space ( string $directory ) 给出一个包含有一个目录的字符串。本函数将根据相应的文件系统或磁盘分区返回所有的字节数,或者在失败时返回false。本函数返回的是该目录所在的磁盘分区的总大小,因此将同一个磁盘分区的不同目录作为参数所得到的结果完全相同。在UNIX和Windows 200x/XP中都支持将一个磁盘分区加载为一个子目录。
使用示例如下:
<?php
$dir='../ch13_file_dir/';
echo disk_free_space('d:');
echo "</br>";
echo disk_total_space("d:");
执行以上程序的输出结果为:
90764582912
161061269504