图像文件在显示后被删除,而不是之前被删除。
我使用 Perl 的文件上传功能上传了一个文件。上传工作正常,它是预期的上传目录。在同一个脚本中,我显示文件(它是一个图像文件),并且工作正常。我想要做的是在显示文件后删除它,但是当我这样做时,我得到了一个断开的链接,并且图像(当然)从目录中删除了。尝试了睡眠功能,但无济于事。
print "<img src=\"path_to\image\">
#sleep (5);
unlink "path\to\image\";
图像文件在显示后被删除,而不是之前被删除。
我使用 Perl 的文件上传功能上传了一个文件。上传工作正常,它是预期的上传目录。在同一个脚本中,我显示文件(它是一个图像文件),并且工作正常。我想要做的是在显示文件后删除它,但是当我这样做时,我得到了一个断开的链接,并且图像(当然)从目录中删除了。尝试了睡眠功能,但无济于事。
print "<img src=\"path_to\image\">
#sleep (5);
unlink "path\to\image\";
首先,您没有刷新输出。[1]直到睡眠和取消链接之后才会发送。
此外,服务器可能在响应完成之前不会将响应发送给客户端。这完全取决于服务器。
这两个事实都会阻止客户端在您取消链接文件之前收到响应。
发送响应和接收图像请求之间也存在多个延迟原因。
解决方案
您可以使用独立的定期运行的作业,如果文件超过一定年龄,则删除它们。
或者您可以使用 url 嵌入图像
data:
以避免所有这些问题。这将禁用缓冲:
或者,您可以使用以下命令在打印后刷新缓冲区:
当您打开
print
网页并将其发送到客户端时,这可能需要几秒钟,特别是如果您在链接后发送了更多内容。但您的代码只是删除了文件,因此当浏览器呈现页面并尝试显示图像时,它已经消失了。您
sleep
也会减慢页面渲染速度,因此这实际上可能对您有帮助,也可能没有帮助,这取决于缓冲,它可能会使整个页面的加载速度变慢。真正的解决方案是使用另一种机制来清理此类图像文件,例如,在午夜删除所有文件,或者每小时检查一次并删除 x 分钟前创建的每个文件。
谢谢。是的,它需要另一种机制。我发现 sleep() 会刷新页面,因此图像会在睡眠延迟后消失。我不太优雅的解决方案是使用一个 iframe 来调用另一个脚本,其中只有 unlink。它有效。