使用 PHP 从外部公共文件夹提供 css 图像
Posted
技术标签:
【中文标题】使用 PHP 从外部公共文件夹提供 css 图像【英文标题】:Serving css images with PHP from outside public folder 【发布时间】:2011-07-23 18:59:46 【问题描述】:我有一个链接到图像的 css 文件。
.test
background: url(http://site.com/dynamic/test.jpg) no-repeat;
然而,这些图像是动态的。它们每分钟都在变化,所以我必须生成它们并用 php 为它们提供服务。这意味着我不会将它们保存到公用文件夹中。我只是直接从 php 脚本中为它们提供服务。
问题是当我访问 php 脚本 (http://site.com/dynamic/test.jpg
) 时,它会正确生成图像并且我可以在浏览器中看到它,但是当我需要在 css 文件中使用相同的 url 时,css 可以'似乎无法访问图像。
我认为是因为图片没有保存在public文件夹中,是由php传递的,这意味着要直接调用生成图片,调用css文件并没有真正命中php脚本(图片网址)。
有人有解决这个问题的想法吗?
【问题讨论】:
图像是如何创建的并不重要,对 CSS 来说都是一样的。如果您安装了 firebug,请查看 netpanel 并查看在尝试加载图像时是否出现错误。 只是好奇,你为什么引用.jpg,如果一个php脚本正在生成它,它不会是test.php吗? (除非你有 php 编译器处理的 jpg 扩展名,这很奇怪) @mazzzzz:OP 可能正在解析$_SERVER[ 'REQUEST_URI' ]
或类似的东西以提取虚拟路径。或使用mod_rewrite
。有很多方法可以掩盖这一点。
【参考方案1】:
尝试使用php头函数返回Content-type
header("Content-type: application/force-download");
header('Content-Type: application/octet-stream');
header('Content-Type: image/jpeg'); // or png...
【讨论】:
缓存控制标头也不会受到伤害,因为这些图像每分钟更新一次。 header("Cache-Control: no-cache, must-revalidate"); 那么您是否建议我们创建一个响应标头包含这些语句的操作?可以发一些代码吗?【参考方案2】:首先,您应该询问自己的系统发生了什么,而不是那些不知道也无法访问您的网站的人。
使用一些 HTTP 嗅探器来查看究竟发送了哪些 HTTP 请求以及返回了哪些响应。 Firefox 的 LiveHTTPHeader 或 firebug 插件或任何类型的插件都可以使用。
然后将这些标头与您直接请求此图像的标头进行比较。 然后你可以在这里问你的问题,提供这些标题。
【讨论】:
以上是关于使用 PHP 从外部公共文件夹提供 css 图像的主要内容,如果未能解决你的问题,请参考以下文章
使用 react-router-dom 时如何从 css 文件访问公共文件夹中的图像?
如何从 React 中的公共文件夹设置背景图像(创建 React 应用程序)
如何将带有css样式的内联SVG从浏览器保存/导出到图像文件