【问题标题】:Serving css images with PHP from outside public folder使用 PHP 从外部公共文件夹提供 css 图像
【发布时间】: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。有很多方法可以掩盖这一点。

标签: php css image


【解决方案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 插件或任何类型的插件都可以使用。

然后将这些标头与您直接请求此图像的标头进行比较。
然后你可以在这里问你的问题,提供这些标题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 2022-07-28
    相关资源
    最近更新 更多