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 が混在している私の例では)。
  • 1 つの問題は、画像 (またはその逆バージョン) に明示的に 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 に答える