3

我们正在扩展一个网站,我们想为未来做计划,我们可能希望在子域中托管我们的图像(或者甚至可能完全是一个单独的域,例如CDN)。我们目前使用以下 HTML 在我们的 HTML/PHP 代码中引用图像:

<img src="/images/ourlogo.jpg" alt="Our Logo" />

我正在考虑开始一个公司大会以转移到:

<img src="<?php echo STAT_IMG;?>ourlogo.jpg" alt="Our Logo" />

其中 STAT_IMG 是一个全局 PHP 常量,最初定义为与当前情况相同,即

define('STAT_IMG', '/images/');

但以后可以更改为:

define('STAT_IMG', 'http://www.superfastcdn.com/');

我这样做会遇到任何问题吗?

我已经想到的事情:

  • 我可以看到代码库中会有更多的字符串附加 - 但我不认为它在性能方面会很明显。
  • 它使代码更丑陋(尤其是在我的 PHP 和 HTML 混合的示例中)。
  • 一个问题是,有时您需要为图像显式使用 https(或副版本)。例如,如果您将图像放入电子邮件中,许多客户端(例如 gmail)使用 https 协议,因此引用 http(即未加密协议)的资源会在某些浏览器(例如 IE)中生成混合内容警告。这篇来自 encosia的文章通过定义STAT_IMG为“无协议”来解决这个问题,例如define('STAT_IMG', '//www.superfastcdn.com/');. 我希望他们的想法能奏效。
    • 除了之前的非绝对版本 ( ) 之外define('STAT_IMGS', 'https://www.example.com/images/');,我们可能还需要一些其他常量来显式定义协议。define('STAT_IMGNS', 'http://www.example.com/images/');define('STAT_IMG', '/images/');
  • 我需要将相同的策略应用于其他静态资源,例如 javascript 和 CSS 样式表。
4

1 回答 1

2

听起来您需要的是一个函数——这就是在 Rails、Symfony 和 Django 等框架中倾向于处理的方式。一般来说,封装逻辑是一个好主意,因此您不会发现自己需要为给定的设计更改更新更多内容。

对于初学者,您可以将其放在所有模板通用的位置:

<?

$my_domain = "something.com";

function static_url($relative_path, $SSL=false) {
  $prefix = $SSL ? 'https' : 'http';
  return "{$prefix}://{$my_domain}{$relative_path}";
}

然后,你可以把它作为你的模板:

<img src="<?=static_url('images/ourlogo.jpg'); ?>" />

或者,如果您需要 https:

<img src="<?=static_url('images/ourlogo.jpg', true); ?>" />
于 2011-01-25T07:26:00.310 回答