2010-05-20 90 views
2

我有以下。在Linux服务器上的/ tmp文件夹中临时创建映像的网站。之所以将它存储在这个文件夹中,是因为这些图像需要一段时间清除一次,并且使用tmpwatch清除tmp目录非常容易。现在我的问题是在我的浏览器中显示图像?显示来自tmp目录的图像

代码

<img src="/tmp/3d34636.png" alt="image" /> 

我运行的Centos与PHP

回答

1

麻烦这里,是这个img标签会被浏览器(客户端)进行处理。该客户端无权访问HTTP服务器的文件系统。

因此,您必须使用/ tmp /目录中的文件来定义/ tmp目录作为HTTP服务器的有效位置(但请注意,它将提供此目录中包含的任何其他文件,安全风险)。

或者您将这些生成的图像存储在HTTP服务器已经提供的子目录中。

也可以在服务器上定义这个/ tmp位置,以便分析包含图像文件名的URL的脚本。然后这个脚本将打开/ tmp /中的文件并提供它。

+0

+1在/ tmp中存储这个东西真的不是一个好主意;公众无法访问/ tmp。 – 2010-05-20 09:49:30

+0

或者,选项3,您可以拥有一个PHP脚本,用于从/ tmp目录提供文件,并根据需要进行过滤。 – psmears 2010-05-20 09:50:38

+0

@psmears是。但是构建过滤器可能比构建一段时间内清理过的脚本更麻烦。 – 2010-05-20 09:51:18

2

@Didier已经概述了这个问题和安全风险。即使您构建了接受文件名作为参数的PHP脚本,然后通过/tmp目录中的文件,您仍然可以将公共内容与可包含敏感数据的临时文件混合在一起。你必须保留你的脚本生成哪些文件的列表,并且可以显示哪些文件,哪些不是,否则就是安全漏洞。

我会说忘记/tmp尽管有这个优点,并将您的图像存储在他们自己的子目录。经常删除它们(例如,使用cron作业,或基于文件使用时间或“上次访问时间”)。

1

你可以得到tmpwatch通过创建运行命令cron作业清理另一个目录:

/usr/sbin/tmpwatch -umc 240 /path/to/directory 

240为小时,该文件没有被删除之前使用的数量(以这个案例10天)。有关完整的详细信息,请参阅man tmpwatch