PHP:如果失败则上传图片

时间:2010-10-29 16:27:48

标签: php

我正在上传图像系统。

您上传图片,然后裁剪并按保存。

如果在上传图像后取消此步骤,图像将保留在服务器上。

因此我尝试在db中创建名为“failImage”的列,因此当您上传图像时,它会在列中存储文件名,例如1111.jpg。

所以稍后如果您通过关闭网站或其他内容取消此过程,下次访问时,我会创建一个函数来检查failImage是否为空。

如果不是,则删除(取消链接)failImage中的值(在此示例中为1111.jpg)并清空failImage列。

这很好用。

但是......如果你有我的网站的两个窗口,并在1)st上传一个图像,然后在第二个你刷新窗口(f5)我做的功能,取消链接值在failImage运行时,当你尝试裁剪并保存它时会发生前一个窗口的错误,因为它没有这样的文件或目录,因为第二个窗口删除了你正在使用的图像。 / p>

我已经考虑过一段时间的解决方案了,有什么方法可以解决这个问题吗?

5 个答案:

答案 0 :(得分:1)

如果将其拆分为两个步骤,则可以使此过程更简单,更少出现错误。

  1. 步骤:用户上传图片,该图片保存在用户帐户中。

  2. 步骤:用户可以选择已上传的图像并裁剪它们。

  3. 您将两个步骤严格分开,但为了保持良好的可用性,您不向用户显示这两个步骤。如果步骤1成功完成,则会自动调用步骤2.

    优点:

    • 如果第2步失败,用户可以随时手动调用它。
    • 当您描述涉及数据库的内容时,不需要复杂的错误启动机制。

答案 1 :(得分:0)

我相信dnagirl的解决方案是正确的,虽然我不确定文件在上传后会在临时目录中存在多长时间。一个可能的替代方法是实现自己的临时目录,并运行一个cron作业,以便在几个小时之后自动清理它。基本上是:

  1. 用户上传文件
  2. 将文件从OS Temp移至Custom Temp
  3. 提示他们裁剪并保存
  4. 在保存时,将其移至永久目录
    • 当cronjob运行时,它应该检查文件的年龄(参见filemtime());如果它比截止时间早,则将其删除。
  5. 如果您不想做所有这些,那么我会说将时间戳编码到failimage列中。

答案 2 :(得分:0)

让我看看我是否理解正确:

  1. 上传图片。
  2. 编辑图像。
  3. 要求:

    • 浏览器中的多个实例不应取消链接图像。
    • 如果用户选择,用户可以稍后返回该图像。

    为用户提供数据库中图像的文件名或ID的Cookie。在图像上放置一个时间戳(在数据库中),每隔一段时间检查一次数据库并删除过期的图像。如果用户返回并仍然拥有cookie,则让他们完成编辑图像。由于您不能按照指定使用cron,请执行其他用户所说的操作。根据您拥有的流量以及您想要验证图像“新鲜度”的频率,检查数据库的概率。

    如果用户在浏览器中打开新选项卡或窗口,他们将获得已打开的窗口的副本。

    这听起来像是可行的吗?

    此外,您可以查看IP地址。

答案 3 :(得分:0)

正如您所提到的,当用户使用2个窗口时,它会失败。

即使用户使用2个窗口,如果他们有像userid这样的id,并且图像与该id有一些关系。 您可以检查用户是否已登录。如果用户会话在那里,则删除图像。

检查会话结束时间以查找用户ID和失败图像的状态。

应该工作......

答案 4 :(得分:0)

只有一个1:M表,允许用户拥有多个加载的图像。然后当你第一次上传,直到你保存它进入该目录。跟踪上次登录的时间,并在此1:M表上保留第三个字段,用于跟踪文件上传的时间(或转到磁盘并获取时间),然后如果上次登录的时间超过1天前,或某事,删除文件...你真的需要有一个非常明确的工作流程,你不介意你的用户做什么和什么是绝对禁止