2010-09-04 156 views
2

我一直在以通常的方式上传图像文件,例如将文件从/ tmp文件夹移动到网站的首选文件夹。php在移动到另一个文件夹之前从tmp文件夹操作上传的图像/文件

现在我想通过将它们保存在临时文件夹中来操作图像,并且一旦我完成了它,然后我想将它移动到首选文件夹。

什么,我试图做的是...

  1. 显示一个非常简单的自定义文件上传对话框。
  2. 选择一个图像,然后点击上传。
  3. 表单被提交给一个iframe,所以我可以显示一个进度条。
  4. php脚本会回显javascript代码,它将调用iframe中的父窗口函数来通知图像已上传。
  5. 我想显示另一个对话框,它将显示来自tmp文件夹的图像,以便用户可以调整大小和裁剪。
  6. 当用户选择图像上的区域进行裁剪时,我会将坐标发送到服务器,并将操纵tmp文件夹中的图像。
  7. 当图像操作完成后,我希望最终的图像被移动到我的目标文件夹。

这里是我的疑惑。

  1. 临时图像在tmp文件夹中会有多长时间。
  2. 如何在我的对话框的临时文件夹中显示图像,因为我只有它的物理路径。
  3. 我想我可以像<img src='fetchfromtmp.php?filename>那样做。不是吗?
  4. 在php脚本中,我可以像readfile('tmp/tmpfile')那样读取文件的图像文件。

    那么,最后,将操作从临时文件夹保持良好?它会有效/暗示吗?可能是什么并发症?如果有的话。

    我想为我的想法提供建议和替代方案。 谢谢。

回答

1

我不认为你应该使用像这样的临时文件夹,不幸的是,你将不得不创建自己的(或使用数据库来存储图像)。原因是你的观点1 & 2:

  1. 图像只保证保持在临时文件夹,直到上传它的脚本完成运行。这意味着表单提交它的任何脚本都应将其移动到某个安全的位置
  2. 通常,此临时文件夹将位于用户不可见的地方。你可以破解你建议的东西,但是你必须非常确定你在做什么以避免造成任何安全漏洞。
+1

关于删除tmp中的文件:@TimFountain说实际上可能是真实的(我从未检查过),但这不是理论上应该发生的事情。从PHP手册:“该文件将在请求结束时从临时目录中删除,如果该文件未被移走或重命名。” – 2010-09-04 11:51:08

+0

是的。我正在试验它。所以我稍后会评论你。 – 2010-09-04 12:31:31

+0

tim为什么提到文件不会被删除。当我在本地主机上实验时,我可以看到脚本终止后文件被删除。可能他是在谈论在ini中设置为默认上传文件夹时的自定义文件夹,因为它位于用户范围内,所以文件不会被删除。这些文件可以使用cron删除。我对吗? – 2010-09-04 14:03:20

1

简而言之,这不是一个好主意。 tmp文件夹中的文件可以在您不需要干预的情况下删除,因此将它们移动到您自己的应用程序中的临时文件夹中,在那里处理它,一旦完成,将它移动到其最终位置。

+0

是的。这将是我已经解释过的默认行为。但我想知道幕后。这个我一直在想很久,今天我问过。谢谢。 – 2010-09-04 12:33:11

+1

这里真的没有幕后的东西。这个问题很简单,你可以根据自己的计划做很多事情,但是最大的问题是,如果在通过操作系统或预定作业或类似的东西处理文件时清除了tmp文件夹?承担这种风险毫无意义。 – 2010-09-04 12:35:50

+0

是的。我同意。谢谢你的一拳。只有在提出这个问题之后,我才让自己更加意识到这个问题,我说这就是我提出这个问题的原因。所以我会考虑这个。 – 2010-09-04 13:08:45

1
  • 图像将在tmp文件夹中,直到它被删除。有可能你的主机经常清除掉,但可能不会,所以它会一直存在,除非你删除它。
  • 为了显示来自tmp文件夹的图像,您必须使用脚本读取它并提供它(或使用X-Sendfile)。
  • PHP可以从tmp目录中没有任何问题

但是阅读,你可以通过图片上传后,只需移动到tmp目录应用程序内解决所有这些问题。这样您就知道它不会被删除,您可以轻松地将其提供给用户,并且您知道您将能够读取该文件。

或者,如果您有权访问您的php.ini文件,则可以更改upload_tmp_dir,并首先将图像上传到应用程序中的tmp目录。

+0

您不应该依赖未记录的功能。只要移动该死的文件,或者您的程序在不同的设置下会表现出不一致的行为。 – 2010-09-04 12:21:22

+0

我正在试验答复。所以,我稍后会评论你。 – 2010-09-04 12:32:15

+0

我也会跟着这个。现在我将移动该文件。首先,我对你开始使用term的方式感到困惑,temp中的文件不会被删除。然后我通过在ini文件中设置一个tmp文件夹来说明你的答案,以便上传的文件将成为用户控制中的文件夹,以便我们可以使用cron删除旧文件。我希望你以这种方式提到。谢谢。除此之外,我还做了一些小练习,这让我清楚,脚本终止时上传的文件将被删除。我检查了localhost。谢谢。 – 2010-09-04 14:01:01

1

docs是这个

该文件将从临时目录在请求结束时,如果它没有被移走或重命名删除相当清楚。

所以你的想法将无法正常工作。另一方面,在大多数操作系统中重命名文件是非常便宜的操作,所以没有很好的理由不要立即移动临时文件。

+0

是的。我正在试验它。所以我稍后会评论你。 – 2010-09-04 12:30:37

+0

我喜欢你的答案'重命名文件不会花费太多资源'...是的,我同意。除了...我问这个问题的原因是我不想在数据库中保留文件名,直到它被用户剪切。无论如何,所有的答案都是有用的。 – 2010-09-04 13:54:11

1
I think i can do it like <img src='fetchfromtmp.php?filename>. isn't it? 

这会给您的服务器带来一个漏洞。不要忘记临时文件夹默认保存会话文件。

+0

这是我为管理员用户做的。无论如何,不​​跟随这将是更有利的你说...是的,我同意。 – 2010-09-04 12:30:13

相关问题