如何在PHP中操作临时文件

 更新时间:2021年05月14日 08:48:21   作者:硬核项目经理  
关于文件相关的操作,想必大家已经非常了解了,在将来我们刷到手册中相关的文件操作函数时也会进行详细的讲解。今天,我们先来了解一下在 PHP 中关于临时文件相关的一些内容。

获取 PHP 的默认临时创建文件目录

学习过 Linux 操作系统的都会知道有一个目录是 /tmp 目录( Windows 中一般是:C:\Windows\Temp\ ),它是用来存放系统的一些临时文件的,所以,这个目录也叫做临时文件目录。很多软件都会将一些临时保存的文件放在这个目录里面,包括一些缓存、一些临时生成的脚本之类的。PHP 在默认情况下也会将临时文件目录指向这个目录,包括 SESSION 文件之类的临时文件都会保存在这里。它可以在 php.ini 文件中通过 sys_tmp_dir 进行设置。

当然,在动态运行的 PHP 程序中,我们也可以通过一个函数来获得当前的临时文件目录。

print_r(sys_get_temp_dir());
// /tmp

创建一个临时文件

既然有了临时文件目录,PHP 当然也贴心的为我们准备好了直接去创建一个临时文件的函数。

$tmpFile = tmpfile();
fwrite($tmpFile, "I'm tmp file.");
// ll /tmp
// vim phpbnAjbE

sleep(10);

fclose($tmpFile);
// ll /tmp

tmpfile() 函数就是用来创建这个临时文件的,我们不需要为它指定文件名,也不需要为它指定路径,同时,它创建的文件是 w+ 类型的,也就是直接就是可读写的文件。当调用 fclose() 的时候,这个临时文件将自动删除掉。手册中说使用这个函数创建的文件在脚本运行结束后也会自动删除,但是在测试后发现脚本结束时文件并不会删除。

在调用函数并写入内容后,我们暂停了十秒。其实就是为了去 /tmp 目录里看一下这个文件是否生成成功。根据文件创建的时间,我们找到了生成的这个对应的文件。然后在十秒后执行了 fclose() 之后,再次到目录查看,就会发现文件已经被自动删除了。

根据目录状态创建一个唯一名称的临时文件

最后,PHP 还为我们提供了一个非常人性化的创建临时文件的函数。

$tmpFile = tempnam('/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202006/source', 'testtmp');
$f = fopen($tmpFile, "w");
fwrite($f, "I'm tmp file.");
// ll /tmp
// vim testtmpH7bptZ

// etc目录没有写权限
$tmpFile = tempnam('/etc', 'testtmp');
$f = fopen($tmpFile, "w");
fwrite($f, "I'm tmp file.");
// ll /etc
// ll /tmp
// vim testtmpTUNucM

tempnam() 函数,它会根据目录的状态去生成一个唯一名称的临时文件。什么叫根据目录状态呢?从上面的代码注释中可以看出,第二段的 /etc 目录一般是 root 权限的目录,没有 root 帐户权限的话我们是无法创建修改文件的。如果是这种没有权限的目录,或者是压根就不存在的目录,tempnam() 函数就会将文件生成到临时文件目录中去。如果目录是正常存在并且可以写的,就像第一段代码一样,文件就会正常在这个目录进行创建。

tempnam() 函数的第二个参数是指定生成文件名的前缀。tmpfile() 函数是无法指定文件名的,而这个函数则是可以给文件名一个固定的前缀,并保证前缀之后自动生成的文件名部分是唯一的。

总结

又发现了这几个非常好玩的函数,不管是做为临时缓存还是进行一些文件的创建,这两个临时文件操作的函数都非常有用。在日后的开发中我们可以多多尝试使用这样的函数,或许它们能够为我们带来不少的生产力提升。

测试代码:

github.com/zhangyue050…

以上就是如何在PHP中操作临时文件的详细内容,更多关于PHP操作临时文件的资料请关注脚本之家其它相关文章!

相关文章

  • PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)

    PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)

    下面小编就为大家带来一篇PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • PHP与MySQL开发中页面乱码的产生与解决

    PHP与MySQL开发中页面乱码的产生与解决

    一般来说,乱码的出现有2种原因,首先是由于编码(charset)设置错误,导致浏览器以错误的编码来解析,从而出现了满屏乱七八糟的“天书”,其次是文件被以错误的编码打开,然后保存,比如一个文本文件原先是GB2312编码的,却以UTF-8编码打开再保存。要解决上述乱码问题,首先需要知道开发中哪些环节涉及到了编码:
    2008-03-03
  • PHP插件PHPMailer发送邮件功能

    PHP插件PHPMailer发送邮件功能

    这篇文章主要为大家详细介绍了PHP发送邮件功能,一个PHPMailer插件轻松实现邮件发送功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Ajax请求PHP后台接口返回信息的实例代码

    Ajax请求PHP后台接口返回信息的实例代码

    今天小编就为大家分享一篇Ajax请求PHP后台接口返回信息的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • PHP实现加密的几种方式介绍

    PHP实现加密的几种方式介绍

    这篇文章主要介绍了PHP实现加密的几种方式,非常全面实用,都是项目中经常需要用到的,需要的朋友可以参考下
    2015-02-02
  • php 数组二分法查找函数代码

    php 数组二分法查找函数代码

    search函数 其中$array为数组,$k为要找的值,$low为查找范围的最小键值,$high为查找范围的最大键值
    2010-02-02
  • PHP实现的解汉诺塔问题算法示例

    PHP实现的解汉诺塔问题算法示例

    这篇文章主要介绍了PHP实现的解汉诺塔问题算法,简单描述了汉诺塔问题及相应的实现算法,并结合实例形式给出了PHP具体操作技巧,需要的朋友可以参考下
    2018-08-08
  • php中替换字符串函数strtr()和str_repalce()的用法与区别

    php中替换字符串函数strtr()和str_repalce()的用法与区别

    在php中替换函数主要有strtr(),str_repalce()这两个函数,下面这篇文中主要给大家介绍下这两者之间的区别和用法,文中通过示例代码介绍的很详细,有需要的朋友们可以参考借鉴,下面跟着小编一起来学习学习吧。
    2016-11-11
  • 关于php支持分块与断点续传文件下载功能代码

    关于php支持分块与断点续传文件下载功能代码

    一篇关于php流下载,就是可以支持分块与断点续传文件下载,有需要的朋友可以看看
    2014-05-05
  • PHP函数extension_loaded()用法实例

    PHP函数extension_loaded()用法实例

    这篇文章主要介绍了PHP函数extension_loaded()用法,实例分析了函数extension_loaded()检查一个扩展是否已经加载的具体用法,并补充说明了查看本机已加载php扩展的方法,需要的朋友可以参考下
    2015-01-01

最新评论