代码之家  ›  专栏  ›  技术社区  ›  Chris

php apache和临时文件

  •  0
  • Chris  · 技术社区  · 14 年前

    我有一个基于Web的应用程序,通过与SOAP服务器交互,将服务器的内容发送给经过身份验证的用户。SOAP服务器有用户需要下载的文件。

    为用户提供这些文件的最佳方式是什么?当用户请求一个文件时,我的服务器将对SOAP服务器进行SOAP调用以提取该文件,然后它将通过引用指向该文件的链接为用户提供服务。

    问题是这些临时文件在某个时候需要清理,我的第一个想法是这是一个基于Linux的系统,将它们存储在/tmp/中,让系统负责清理。

    Is it possible to store these files in /tmp and have apache serve them 
    to the user?  
    

    如果Apache不能访问/tmp,因为它在web根目录之外,那么我有可能在web根目录内创建一个指向/tmp/filename的符号链接?(这需要在某个时候清理符号链接。)

    对管理这些临时文件的最佳方式的建议/意见表示赞赏?

    I am aware that I could write a script and have it executed as a cron job on 
    regular intervals but was wondering if there was a way similar to presented 
    above to do this and not have to handle deleting the files? 
    
    1 回复  |  直到 12 年前
        1
  •  2
  •   Community uzul    7 年前

    Apache很有可能读取tmp目录,但这种方法闻起来很糟糕。我的方法是让PHP读取文件并将其发送给用户。基本上,您发送适当的HTTP头来指示要发送的内容类型和文件使用的名称,然后用echo输出文件(例如)。

    在另一个问题中似乎有一个很好的讨论:

    HTTP Headers for File Downloads

    这种方法的另一个好处是,它使您完全可以控制,因为在用户和文件之间有PHP。这意味着您可以添加额外的安全措施(例如,一天中的时间控制),从不同的地方提取文件以分发带宽使用情况,等等。

    [附加材料]

    抱歉没有直接回答你的问题。如果您使用PHP来服务这些文件,那么它们不需要驻留在ApacheWeb根目录中,Apache/PHP就可以在这里对它们进行文件系统读取访问。因此,您确实可以简单地将它们存储在/tmp中,并让操作系统为您清理它们。但是,您可能需要调整这些清理的频率,以使音量保持在您想要的水平。

    如果您希望确保在一段时间或一定数量的下载后访问被可靠拒绝,您可以将跟踪信息存储在数据库中(例如,用户上的标志表示他们已下载该文件),然后使用下载脚本检查该信息,并可能拒绝下载。这有效地将访问的安全性与清理的频率分离开来,这是您可能希望独立调整的两件事情。

    希望这更有用……