2012-04-24 80 views
1

我允许我的网站用户上传图像,然后使用PHP脚本提供图像。但是,这明显比静态链接慢。用PHP提供图像速度非常慢

我使用PHP来提供图像的原因是因为我试图阻止人们能够访问存储图像的文件夹。

我应该使用.htaccess文件吗?我也在考虑httpd中的ALIAS,但不知道如何使用它或者它是否合适 - 我可以使用这个参考根文件夹之外的文件夹吗?

任何帮助将不胜感激。

感谢

header("Content-type: " . filetype($file) . "\n"); header("Content-Disposition: inline; filename=\"{$image}\"\n"); header("Content-Length: ".(string)(filesize($file))); @readfile($file);

+0

慢多少?它不应该太慢。一个小技巧就是在开始的时候开始打开文件,在执行PHP时,硬盘给HDD一小部分时间将其移动到缓存中,导致更多文件在缓存中,并且更快读。 :) – DanRedux 2012-04-24 20:24:29

+0

发布您的代码。 “速度很慢”不足以帮助我们排除故障 – 2012-04-24 20:24:49

+0

绝对使用'readfile()'来读取文件,这有很大帮助。但是,是的,htaccess有很多帮助。如果你所做的只是直接将它传递给浏览器,就不要使用'file_get_contents'。 – 2012-04-24 20:24:50

回答

3

使用与单行.htaccess文件:

​​

然后,用户可以访问该文件夹,但不能看到任何东西。

另外,添加一个名为index.html文件,但留空(或包括“您可能没有查看此页”消息)

4

使用Options -Indexes一个Directory标签内禁用索引。但是,你应该走得比这更远一步。

对于安全性和一般的文件系统卫生,您应该将您的资产(图像等)保存在独立于代码的目录中。

然后,您可以添加到您的Apache配置:

<Directory /directory/where/assets/are> 
    Order Allow,Deny 
    Allow from all 
    Options None 
    AllowOverride None 
    <IfModule mod_php5.c> 
     RemoveHandler .php 
     RemoveType .php 
     php_flag engine off 
    </IfModule> 
</Directory> 

这将禁用任何类型的文件执行的在资产目录以及禁用文件列表的脚本,但允许任何人下载这些文件。以这种方式保护带有用户上传文件的目录很重要,因为它们可能会上传恶意PHP脚本,然后您可以托管它们。

+0

为此欢呼 - 我想我现在应该在四处阅读后提供静态图像,因为php太慢了。我将随机生成它们的文件名并存储在上面提到的这个目录中。你认为这会起作用吗? – tommyd456 2012-04-24 22:48:05