Filter by tag: PHP
Как правило, наибольшего успеха добивается тот, кто располагает лучшей информацией
Бенджамин Дизраэли

Лишь совсем простые приложения могут обойтись без файла конфигурации. У остальных всегда найдется, что хранить в конфиге: настройки окружения, настройки логики, часто меняющиеся фрагменты текста, etc. Словом, вопроса «что хранить в конфигурации» обычно не возникает: кандидатов достаточно. А вот вопрос «как хранить конфигурацию» возникает часто и еще чаще решается не самыми оптимальными способами. В этой статье я хотел бы рассмотреть варианты хранения конфигурации приложения, их плюсы и минусы.


В жизни каждого разработчика есть такие задачи, которыми невозможно гордиться, а упоминать их немного стыдно — потому что всё, абсолютно всё, связанное с такими задачами плохо. Поговорим, например, о Wordpress: он хранит данные в сериализованных массивах в базе данных, не умеет в миграции данных, нарушает все мыслимые и немыслимые, гласные и негласные правила написания хорошего кода... Но зато используется в продакшене, приносит бизнесу деньги, а значит — должен поддерживаться, развиваться... а, ну еще вам может понадобиться перенести всю медиа-библиотеку на S3 (на самом деле, это может быть любой CDN).

Примерный план действий такой:

  1. Установить плагин для работы с S3
  2. Найти все изображения
  3. Залить их на S3
  4. Изменить пути до изображений в постах
  5. По возможности сохранить рассудок

Чтобы было веселее — все эти действия должны произойти в автоматическом режиме, без нажимания кнопочек в админке, изменения конфигов, т.к. установка предполагается в AWS Elastic Beanstalk. И лучше не спрашивайте меня почему.


Если вы используете Docker, скорее всего, вы активно используете и переменные окружения (environment variables). В php-cli или mod_php прекрасно работает стандартный метод их получения:


# ~/envapp/read.php
<?php
$env = getenv("foo");
echo $env;

$ php read.php
bar

Однако, в php-fpm так сделать не получится: дело в настройке «clear_env» (по-умолчанию «true»). Если она активна, прочитать можно будет только те переменные окружения, что указаны в специальном белом списке. Решения, соответственно, два: либо отключить опцию «clear_env», либо добавить необходимые переменные в белый список. В разных обстоятельствах могут понадобиться оба решения:

Отключение clear_env


echo "clear_env = no" >> /etc/php5/fpm/pool.d/www.conf

Белый список


echo "env[foo] = bar" >> /etc/php5/fpm/pool.d/www.conf

PHP

Url Balancer

Пакет предназначен для балансировки запросов статических файлов (если, вдруг, они у вас не на CDN). Такая техника позволяет параллельно загружать статику, обходя ограничения на количество одновременных потоков до одного домена.

  • Поддержка Composer (через packagist)
  • Поддержка Silex
  • Расширяемость стратегий балансировки

Установка

Рекомендуется установка через Composer:


{
    "require": {
        "astartsky/url-balancer": "1.1.2"
    }
}

Пример использования


$urlBalancer = new \Astartsky\UrlBalancer\UrlBalancer();
$urlBalancer->setStrategy(new \Astartsky\UrlBalancer\Strategy\HashStrategy())
$urlBalancer->addBucket(new \Astartsky\UrlBalancer\Domain("s1.myawesomesite.com"));
$urlBalancer->addBucket(new \Astartsky\UrlBalancer\Domain("s2.myawesomesite.com"));
$urlBalancer->addBucket(new \Astartsky\UrlBalancer\Domain("s3.myawesomesite.com"));

$url = $urlBalancer->getUrl("/images/my_impressive_content.png");

Ссылки

На Packagist.org: пакет

На Bitbucket.org: репозитарий


PHP