php 删除文件函数,php中的unlink(),unset(),rmdir()删除函数

一、unset()函数

1、这是php手册中的解释:http://www.php.net/manual/zh/function.unset.php  用法:

$a = 1;

unset($a);

PHP的unset()函数用来清除、销毁变量,不用的变量,我们可以用unset()将它销毁。但是手册中也明确说了,unset()函数不能销毁全局变量。

2、关于释放内存

这里大家可以看一下:  https://www.cnblogs.com/ellisonDon/archive/2012/11/19/2777453.html  unset()函数并不能直接的释放变量,只是变量计数器减1,,当计数器为0的时候会触发回收。特别是当变量被引用的时候,只会销毁变量,但不会释放内存。

如果要释放内存的话,不如用:

//先清空变量

$a = null;

unset($a);

3、关于释放内存的原理  参考链接:http://blog.csdn.net/chanya/article/details/49251025  真的是很棒的一篇博文,已经深入php的源码部分了。

4、unset使用场景

在很多情况下,可以让 PHP 自动管理变量而无需考虑 unset() 变量。只有在特定的,需要某个变量必须为空的时候才使用到。如:用户退出登录时,为了确保信息的安全性,可以用 unset() 清空 session 的内容。

二、unlink()

1、函数的定义  unlink() 函数用于删除文件。若成功,则返回 true,失败则返回false.

//删除文件

$to_link = 'C:\Users\Administrator\Desktop\cut.jpg';

@unlink($to_link);

2、@unlink()

有时候会看到用@unlink()来删除文件。这个@是php中的错误抑制符。比如当你要删除不存在的文件,正常使用unlink()是要报错的。但是使用@unlink() 的话,则不会报错。

3、@错误抑制符

@是可以屏蔽函数执行过程中遇到问题而产生的一些错误、警告信息,这样用户就看不到程序的出错信息。这样除了用户界面会友好一些外,更重要的是安全性,因为屏蔽了出错文件的路径等信息。

三、rmdir()

1、定义  rmdir() 函数删除空的目录。  若成功,则该函数返回 true。若失败,则返回 false。

2、rmdir()使用背景  一般来说,这个函数都是为了删除空目录的。有时候我们需要删除非空目录。那么我们就需要先进入目录中,使用unlink()循环删除文件,然后再用rmdir()函数删除空目录  代码如下:

/* by http://www.manongjc.com/article/27.html*/

function delDir($directory){//自定义函数递归的函数整个目录

if(file_exists($directory)){//判断目录是否存在,如果不存在rmdir()函数会出错

if($dir_handle=@opendir($directory)){//打开目录返回目录资源,并判断是否成功

while($filename=readdir($dir_handle)){//遍历目录,读出目录中的文件或文件夹

if($filename!='.' && $filename!='..'){//一定要排除两个特殊的目录

$subFile=$directory."/".$filename;//将目录下的文件与当前目录相连

if(is_dir($subFile)){//如果是目录条件则成了

delDir($subFile);//递归调用自己删除子目录

}

if(is_file($subFile)){//如果是文件条件则成立

unlink($subFile);//直接删除这个文件

}

}

}

closedir($dir_handle);//关闭目录资源

rmdir($directory);//删除空目录

}

}

}

delDir("mydir");//调用delDir函数

?>

处理递归删除非空目录外,我们也可以使用操作系统命令“rm -rf”删除非空的目录,但也要从安全和跨平台方面考虑尽量不要去使用。

参考链接:http://blog.csdn.net/github_34457546/article/details/78552569

四、句柄        我们在php手册时候应该也发现了,总是会说句柄这个词,那么句柄的定义到底是什么呢,这边我也是百度了一下,算是给自己科普科普

1.定义:

你的应用程序往往要对对象(数据文件, 自定义的数据结构等)做一些操作, 而句柄可以简单地理解为是指向这些对象的一个指针. 在你的程序启动之后, 这些对象在内存中并非是一成不变的, 一方面由于处理器调度等原因, 另一方面现在的操作系统大多基于虚拟内存空间, 在这种情况下, 内存管理器会经常来回移动对象, 以此来满足当前运行的需要, 那如果说我们寻找对象的方式仅仅是依靠一个指针 —- 指向了一个固定的内存地址, 那么显然是没办法应对不断变化的实际内存, 所以, 句柄可以说是一个指向指针的指针, 它本身虽然没有直接指向对象, 但是可以通过它来获知对象在内存上的变动情况, 然后间接地获取对象

也就是说, 实际对象在内存里的地址通常是不固定的, 而固定的句柄则描述了相应对象在内存里的位置

句柄是指向指针的指针,有一个解释非常好:

“对象就比如你对象,句柄就好比你对象的手机号码,你不必时时刻刻关心你对象在哪里干嘛,你只要有需要的时候打ta电话就能找到,连释放的时候都可以一个电话说:我们分手了。”

具体的请参考链接:https://segmentfault.com/q/1010000005944829  http://blog.csdn.net/yipiankongbai/article/details/17404247

ok,以上就是对于php的unset()函数,unlink()函数,rmdir()函数的总结。一句话一来,unset()用于销毁变量,unlink()用于删除文件。rmdir()用于删除空目录。

end

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值