对于文件相关的操作,想必大家已经很了解了,我们在以后参考手册中的相关文件操作函数的时候会详细讲解。今天,我们就来看看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'mtmpfile.");//ll/tmp//vimphpbnAjbEsleep(10);fclose($tmpFile);//ll/tmptmpfile()函数是要创建这个临时文件,我们不需要为其指定文件名或路径。同时,它创建的文件是w+类型的,即直接可读可写。当调用fclose()时,这个临时文件将被自动删除。手册上说使用该函数创建的文件在脚本运行后也会自动删除,但经过测试发现脚本结束时并不会删除文件。在调用函数并写了一些东西之后,我们暂停了十秒钟。其实就是去/tmp目录下看文件是否生成成功。根据文件的创建时间,我们找到对应的生成文件。然后十秒后执行fclose()后,再去目录下查看,会发现文件已经被自动删除了。根据目录的状态创建具有唯一名称的临时文件最后,PHP还为我们提供了一个非常人性化的创建临时文件的功能。$tmpFile=tempnam('/Users/zhangyue/MyDoc/blogarticle/dev-blog/php/202006/source','testtmp');$f=fopen($tmpFile,"w");fwrite($f,"I'mtmpfile.");//ll/tmp//vimtesttmpH7bptZ//etc目录没有写权限$tmpFile=tempnam('/etc','testtmp');$f=fopen($tmpFile,"w");fwrite($f,"I'mtmpfile.");//ll/etc//ll/tmp//vimtesttmpTUNucMtempnam()函数,它将生成一个临时文件根据目录文档的状态的唯一名称。什么基于目录状态?从上面的代码注释可以看出,第二段的/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.phphttps://www.php.net/manual/zh/function.tmpfile.phphttps://www.php.net/manual/zh/function.tempnam.php===========各媒体平台均可搜索【硬核项目经理】
