【问题标题】:php - session temp folderphp - 会话临时文件夹
【发布时间】:2011-10-28 20:28:41
【问题描述】:

想法是这样的:

  1. 用户上传某个“临时”文件夹中的文件,该文件夹仅存在于当前会话中。
  2. 用户注册
  3. “临时”文件夹中的文件被移动到永久文件夹,即存储。

我可以这样做:

mkdir('tempfiles/'.session_id(), 777)

并上传文件:

if (move_uploaded_file($_FILES['my_files']['tmp_name'], 'tempfiles/'.session_id().'/')) {
  // echo "success";
}

当用户注册时,文件被移动到一些其他文件夹,临时文件夹被删除如下:

/* some function to empty dir */
rmdir('tempfiles/'.session_id())

问题是: 如果上传后的用户没有注册怎么办?如何删除临时文件夹?

使用tempnam 功能,我可以创建一个“将自行删除”的文件夹.. 但在 Windows 服务器中我无法创建例如 tempnam('/tmp/test', '');,只需设置 3 个字符前缀:C:\Windows\Temp\pre569E.tmp

我唯一的想法是写入临时文件夹的数据库路径。

欢迎任何帮助。

【问题讨论】:

    标签: php mkdir temp


    【解决方案1】:

    如果用户没有注册,您必须手动进入并清理这些文件。如果您单独留下原始临时文件,PHP 只会自动清理上传。由于您已明确将其移出上传临时目录,这意味着完全由您来清理。

    您不能 rmdir 非空目录。您必须先删除该目录中的所有文件。最简单的方法是做

    $files = glob('tempfiles/' . session_id());
    foreach($files as $file) {
       unlink($file);
    }
    

    更简单的是不为每个用户创建一个子目录。将文件移出上传临时目录(因此 PHP 不会自动清理它)并将其存储在另一个以 session_id() 作为文件名的单个中间目录中。这将每个未注册用户限制为一个暂时保存的文件,但这可能是一件好事。所有用户的文件都将混合在一起,但由于每个文件都有一个唯一的基于会话的名称,因此不会发生冲突。

    您仍然需要清理那些选择不注册的用户的孤立文件,但这很简单,只需检查这些临时文件中的每一个是否没有匹配的会话文件 - 如果没有会话文件,然后用户放弃了会话,PHP 已经删除了陈旧的会话文件。所以你可以有一个定时的工作来做这个交叉检查并删除任何没有匹配会话的文件。

    【讨论】:

    • 感谢您的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    相关资源
    最近更新 更多