【问题标题】:php delete image from server after upload & displayphp上传和显示后从服务器删除图像
【发布时间】:2013-04-04 05:29:04
【问题描述】:

以我的 php 表单发送图像,它会保存到我的服务器和 action.php 页面显示出来。现在当我尝试:

echo '<div id="image"><img src="'.$target_path.'" width="280" height="280"></div>';

它工作得很好......但是如果我在我的 php 代码的末尾添加unlink($target_path); 它 即使在显示图像后被删除,也不会显示图像...

所以问题是,我怎样才能显示图像并同时删除它,这样我的服务器就不会被用户图片塞满?

【问题讨论】:

  • 您的图片在浏览器获取图片之前被删除。首先检索您的 HTML 页面,在浏览器能够获取图像之前,unlink 命令已经执行。

标签: php html image


【解决方案1】:

尝试另一件事:输出 base-64 编码的图像。

$contents = file_get_contents($file);
$base64 = base64_encode($contents);
echo '<div id="image"><img src="data:image/jpg;base64,'.$base64.'" width="280" height="280"></div>';

(代替move_uploaded_file()等,使用$_FILES[...]['tmp_name']作为$file变量)

【讨论】:

  • 那是相当昂贵的,它需要大量的带宽。
  • 是的(系数 8/5),但是这种方法没有问题和黑客攻击;)(8/5 这么多吗...?)
  • @MrMadMan 仅供参考:您可能需要将 image/jpg 更改为 image/png 等,具体取决于您使用的文件类型。
  • 如果我想支持尽可能多的类型(jpg、png、gif、jpeg 等)怎么办?
  • @MrMadMan 做一些切换:switch (strtolower($extension)) { case "jpg": case "jpeg": $mime = "image/jpg"; break; case "png": $mime = "image/png"; break; case "...": $mime = "..."; }
【解决方案2】:

您可以通过创建一个小脚本来获取图像文件名并在检索到它后将其删除来实现这一点:

<?php
$file = image_file_from_parameter($_GET['image']); 
headers_for_file($file);
readfile($file);
unlink($file);

然后在您的 HTML 输出中链接到该脚本:

<img src="path/to/image.php?image=893sudfD983D" />

如果你设置好的缓存头,用户不会注意到你的服务器只提供了一次文件。

【讨论】:

  • 如果我在页面顶部添加这个,它会加载一个空白页面
  • 最好自己定义函数image_file_from_parameterheaders_for_file...
  • @MrMadMan 你必须先检查是否设置了 $_GET['image'] 否则会抛出一些错误。并且函数 headers_for_file 和 image_file_from_parameter 不存在。你应该写它来实际设置正确的标题
【解决方案3】:

当您使用img src 回显图像的 url 时,您只是向浏览器发送图像的 url,而不是实际的图像数据。如果您希望通过这种方法查看图像,则该图像需要保留在服务器上。

您可以使用 bwoebi 的解决方案来传递实际的图像数据而不是链接,但更好的解决方案是将图像保留在服务器上并定期删除旧文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多