如何在PHP中返回静态文件?

时间:2013-11-03 13:11:24

标签: php httprequest assets static-files server-response

我使用.htaccess文件将所有请求重定向到同一index.php。从那里,我根据传入请求的URL决定做什么。

现在,我将请求网址映射到相对于source文件夹的目录结构,以便example.com/user/create映射到source/user/create/index.php。位于那里的文件可以根据需要处理请求,并生成HTML输出。

但这对静态资产不起作用,浏览器可能会请求。所以我的想法是找出请求URL是否以文件扩展名结尾,并将其映射到相对于assets文件夹的目录结构,以便example.com/css/default.css映射到assets/css/default.css。但我不知道如何使用静态文件而不是PHP中的HTML代码进行响应。

通常,这可以使用额外的.htaccess规则来完成,但我想在代码中动态更改资源文件夹。

如何将服务器硬盘上给出的静态文件发送到PHP中的浏览器客户端?

2 个答案:

答案 0 :(得分:3)

关于htacess

#Expections
RewriteCond %{REQUEST_URI} ^/assets.*$
RewriteRule ^(.*)$ - [L,NC]

#You redirect to index
...

在文件路径的开头放一个/

/assets/path/to/file

答案 1 :(得分:2)

好吧,如果你真的想,你可以使用readfile()。但是,如果可以的话,让Web服务器处理静态文件会更好;它比启动PHP只是为了把文件扔出去更有效。

此外,使用PHP方法,您可能必须为每个文件设置适当的Content-Type标头,这可能很烦人。您的Web服务器将在直接提供文件时为您执行此操作。

此外,您可能需要考虑的其他一些“免费”内容 - 如果您想要压缩页面,请使用ob_gzhandler,这可能已经完成了例如,Apache的静态文件。

所以,尽管有可能,而且我可以看到为什么它有时是可取的原因,我可能会尝试使这种处理异常而不是通常不动态的文件的规则......