Какова будет хорошая стратегия для переменной для префикса статического ресурса? - PullRequest
3 голосов
/ 25 января 2011

Мы масштабируем веб-сайт, и мы хотели бы планировать будущее, в котором мы можем разместить наши изображения в поддомене (или, возможно, даже в отдельном домене, например, CDN ).В настоящее время мы ссылаемся на изображения в нашем HTML / PHP-коде, используя следующий HTML-код:

<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.

1 Ответ

2 голосов
/ 25 января 2011

Звучит так, будто вам нужна функция - вот как это обычно обрабатывается в таких фреймворках, как 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); ?>" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...