在服务器上复制和编辑文本文件,并允许使用PHP临时下载


Copying and editing a text file on server, and allowing a temporarily download with PHP?

我希望能够复制我的服务器上的文本文件,根据用户输入编辑它,并允许他们下载新文件,但在他们的会话完成后删除它,或一定数量的时间。

我知道如何复制和编辑文件,但我不知道如何制作临时文件或临时目录,或者如何动态命名它们…如果多人同时创建文件,我不想在创建两个同名文件时遇到问题。

我试过搜索,但我不确定该怎么表达。我在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()来获取关于文件的各种信息(例如修改日期)。