3

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

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

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

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

4

3 回答 3

5

尝试另一件事:输出 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()etc,用作 $file 变量$_FILES[...]['tmp_name']

于 2013-04-11T20:53:00.487 回答
3

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

<?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" />

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

于 2013-04-11T20:55:50.643 回答
1

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

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

于 2013-04-11T20:57:06.693 回答