php7实践指南-ch13目录文件操作目录

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值