共计 1908 个字符,预计需要花费 5 分钟才能阅读完成。
对于文件相干的操作,想必大家曾经十分理解了,在未来咱们刷到手册中相干的文件操作函数时也会进行具体的解说。明天,咱们先来理解一下在 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() 函数是无奈指定文件名的,而这个函数则是能够给文件名一个固定的前缀,并保障前缀之后主动生成的文件名局部是惟一的。
总结
又发现了这几个十分好玩的函数,不论是做为长期缓存还是进行一些文件的创立,这两个临时文件操作的函数都十分有用。在日后的开发中咱们能够多多尝试应用这样的函数,或者它们可能为咱们带来不少的生产力晋升。
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E5%9C%A8PHP%E4%B8%AD%E6%93%8D%E4%BD%9C%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6.php
参考文档:
https://www.php.net/manual/zh/function.sys-get-temp-dir.php
https://www.php.net/manual/zh/function.tmpfile.php
https://www.php.net/manual/zh/function.tempnam.php
===========
各自媒体平台均可搜寻【硬核项目经理】