一、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()函数删除空目录
代码如下:

<?php
/* 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

php中的unlink(),unset(),rmdir()删除函数相关推荐

  1. Delphi中使用API将目录删除函数

    2019独角兽企业重金招聘Python工程师标准>>> 以往删除目录时,都是用递归删干净目录下的文件和子文件夹,如果文件数量大,则删除速度会很慢 在此直接使用使用API将目录删除 f ...

  2. php unset函数_PHP | 使用unset()函数从数组中删除元素

    php unset函数 Given an array and we have to remove an element from the array. 给定一个数组,我们必须从数组中删除一个元素. u ...

  3. PHP中unset,array_splice删除数组中元素的区别

    php中删除数组元素是非常的简单的,但有时删除数组需要对索引进行一些排序要求我们会使用到相关的函数,这里我们来介绍使用unset,array_splice删除数组中的元素区别吧 如果要在某个数组中删除 ...

  4. C语言试题五十七之假定输入的字符串中只包含字母和*号。请编写函数function,它的功能是:删除字符串中所有*号。在编写函数时,不得使用c语言提供的字符串函数。

    1. 题目 假定输入的字符串中只包含字母和*号.请编写函数function,它的功能是:删除字符串中所有*号.在编写函数时,不得使用c语言提供的字符串函数. 2 .温馨提示 C语言试题汇总里可用于计算 ...

  5. C语言试题七之将函数字符串中的前导*号全部删除,中间和尾部的*号不删除。

    1. 题目 规定输入字符串中只包含字母和*号.请编写函数fun,它的功能是:将函数字符串中的前导*号全部删除,中间和尾部的*号不删除. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试 ...

  6. 使用node中fs模块创建和删除文件夹

    创建文件夹 假如我们要创建这样一个文件夹'a/d/c/d/e' 同步创建文件夹 let fs = require('fs'); function makep(dir) {let paths = dir ...

  7. php 递归删除函数

    2019独角兽企业重金招聘Python工程师标准>>> 递归函数为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函 ...

  8. php删除session中的值,php如何删除session中数据

    php删除session中数据,我们可以通过PHP中的特定函数session_destroy()等函数来实现删除操作. 首先大家要简单了解下http无状态协议是什么? HTTP无状态协议,是指协议对于 ...

  9. php递归删除,php 递归删除函数

    递归函数为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行. 我们来看一个经 ...

最新文章

  1. 精密空调与普通空调区别及故障解析
  2. 为工厂分配用于公司间Invoice的销售范围
  3. java每秒执行一次_Java性能权威指南
  4. laradoc mysql acccess_安装之后,启动mysql容器失败
  5. [Golang] 用interface{}实现泛型出现的问题
  6. python接口自动化(四)--接口测试工具介绍(详解)
  7. 史上最大规模的 PPS DDoS 攻击现身,欧洲某大型银行遭殃
  8. 教你快速运行谷歌EfficientDet目标检测
  9. 语言判断一个整数是奇数还是偶数_一个变量“存储”任意多的数 从“康托配对函数”聊开去...
  10. sum of digits
  11. Java的三大特性(基本特征)
  12. 农村三资管理平台app_农村三资管理系统功能
  13. 2018 年寒假/春节,来蓝鲸玩吧!
  14. css设置背景图片透明度
  15. 网络拓扑绘制软件亿图图示安装以及使用攻略
  16. 浅谈FPGA的乒乓操作
  17. 淘宝宝贝的标题,到底要如何优化,不妨进来看看,也许对你有帮助
  18. 在Visio中快速的画一个虚线框
  19. 光栅尺位移传感器---莫尔条纹
  20. Your account has been blocked. git更新代码时报错

热门文章

  1. linux脚本或关系表达,Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等...
  2. 不存在类型或空间名称ConfigurationManager解决办法
  3. python logsumexp示例
  4. 轻量级人脸属性Slim-CNN
  5. insightface scrfd人脸检测测试
  6. Mxnet TensorRT
  7. 北京大学 AdaMod优化器 孙栩
  8. sqlalchemy.orm 多条件查询更新
  9. 人脸关键点 HRNet-Facial-Landmark-Detection
  10. python ftp 550错误: