A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小鲁哥哥 于 2017-12-13 11:40 编辑

【黑马程序员济南】PHP模块讲解之文件操作部分


在日常的开发工作中少不了要跟文件打交道,今天我们就来简单的介绍一下如何跟文件打交道

PHP 中提供给我们多种函数让我们可以对文件进行创建、读取、上传以及编辑文件等工作
首先先来接触创建目录函数mkdir()
       mkdir(目录地址, 权限模式,是否递归创建)
       默认不能递归创建
[PHP] 纯文本查看 复制代码
<?php
/*黑马程序员济南中心出品*/

$path = './some/path/'; //some和path这两个文件夹都不存在
$result = mkdir($path);

var_dump($result);
结果:
会提示警告错误,告诉我们不能没有这样的文件或目录

第三个参数设置为true,表示,递归创建:

[PHP] 纯文本查看 复制代码
<?php
/*黑马程序员济南中心出品*/

$path = './some/path/'; //some和path这两个文件夹都不存在
$result = mkdir($path,0755,true);//0755这个是在Linux系统下的权限问题,我们在Windows开发可以忽略这些问题

var_dump($result);

这样的话结果就为true


删除,rmdir()

       rmdir(目录地址)
[PHP] 纯文本查看 复制代码
<?php
/*黑马程序员济南中心出品*/

$path = './some/path/'; //some和path这两个文件夹都存在
$result = rmdir($path);

var_dump($result);

结果为true

注意:不能删除非空目录!
[PHP] 纯文本查看 复制代码
<?php
/*黑马程序员济南中心出品*/

$path = './some/path/'; //若path这个文件夹中还存在其他文件
$result = rmdir($path);

var_dump($result);

结果为:
会提示我们目录非空  删除失败

接下来是获得目录内容,opendir(),readdir(),closedir()
获取目录中存在哪些文件。
       句柄 = opendir(目录地址),打开一个目录句柄。
       句柄,handle,一种程序与文件系统通讯的资源。
       文件名 = readdir(句柄),读取目录中的一个文件名。
       执行一次,仅可以读取一个文件名。同时向前移动目录指针!
配合循环结构:
       readdir,如果读取不到,则返回false,直接使用while即可:
       通常,将 ., .. 处理掉!
       即将while循环从新写一遍
[PHP] 纯文本查看 复制代码
<?php
/*黑马程序员济南中心出品*/

while($basename = readdir($handle)){
        //过滤掉.  ..
        if($basename == '.'|| $basename == '..') continue;
        
        echo $basename,'<br />';
}

代码写到这里还是有BUG的,当我的文件夹的名字为0的时候,while判断为false,会跳过这个文件夹
而实际的情况是0这个文件夹是要出现在最终结果的。

所以我们还要继续优化代码
[PHP] 纯文本查看 复制代码
<?php
/*黑马程序员济南中心出品*/

while(false !==$basename = readdir($handle)){
        //过滤掉.  ..
        if($basename == '.'|| $basename == '..') continue;
        
        echo $basename,'<br />';
}

代码写到这里,我们所需要的结果就会都出来了,但是作为一个严谨的程序员来说,我们还缺少一步
就是代码运行到这里我们的结果已经获取到了,但是打开的这个句柄还是在开启状态,资源还是占用的,还会继续浪费资源
所以我们还要优化:使用closedir(句柄)关闭目录句柄
最终的代码为:
[PHP] 纯文本查看 复制代码
<?php
/*黑马程序员济南中心出品*/

$path = 'a/b/c';
$handle = opendir($path);
while(false !==$basename = readdir($handle)){
        //过滤掉.  ..
        if($basename == '.'|| $basename == '..') continue;
        
        echo $basename,'<br />';
}
closedir($handle);
到这里,我们的代码就结束了。
不知道大家对今天的讲的文件的操作理解的怎么样啊?
如果你想了解更多黑马课程请点击这里,如果你想加入黑马这个大家庭学习先进技术,广交天下好友!
黑马程序员济南中心联系电话:0531-55696830



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马