使用 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从浏览器保存/导出到图像文件

在css背景图像中反应公共文件夹的路径

angular 2组件无法从外部css皮肤加载相对背景图像url

如何在不引用外部 CSS 文件的情况下在 WordPress PHP 文件中创建内联 CSS?