我希望能够复制我的服务器上的文本文件,根据用户输入编辑它,并允许他们下载新文件,但在他们的会话完成后删除它,或一定数量的时间。
我知道如何复制和编辑文件,但我不知道如何制作临时文件或临时目录,或者如何动态命名它们…如果多人同时创建文件,我不想在创建两个同名文件时遇到问题。
我试过搜索,但我不确定该怎么表达。我在PHP站点上遇到过一些关于PHP停止运行后立即删除临时文件的页面,但这并不允许用户下载该文件。
我到底想知道什么:
-如何动态命名在一定时间后自动删除的服务器文件副本。
对不起,我知道这可能是一个网站的问题比PHP,但我是新的。你可以使用tempnam()
来创建一个唯一的文件名:http://www.php.net/manual/en/function.tempnam.php
还有tmpfile()
,它做同样的事情,除了它a)也创建文件并返回一个文件句柄而不是文件名和b)在fclose()
或脚本结束时自动删除文件。
如果您想复制一个文件,那么tempnam()
可能是最适合的。
您可以在脚本结束时手动删除这些文件,或者在超过一天的时间内使用cronjob删除它们。如果不能设置cronjob,可以创建一个"adminpage",每天通过cronjob(或计划任务)从其他机器获取。
回答"如何删除旧文件":
首先,您可能希望将tempnam()
的$prefix
参数设置为"单独"目录。默认情况下,它通常使用/tmp/
保存许多其他内容。使用/tmp/mydir/
(确保在写入之前检查它是否存在!)或主目录中的其他内容。
之后,您有两个方法来查找和清理文件。
第一个是使用find
,这是一个强大的命令行工具,正如您可能猜到的,它可以查找文件。作为命令填充:
find /tmp/mydir/ -type f -and -mtime -1d -delete
简单解释:-type f
表示它只匹配文件(而不是目录),-mtime -1d
表示它只匹配修改日期为- 1天前的文件。最后,-delete
将删除该文件。
find
是非常强大和有用的,但也可能有点令人生畏。
另一种方法是编写自己的(PHP)脚本来搜索文件并调用它。您可以使用scandir()
来获取目录内容的列表,使用stat()
来获取关于文件的各种信息(例如修改日期)。