Download the PHP package infrajs/env without Composer

On this page you can find all versions of the php package infrajs/env. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package env

Окружения посетителя сайта с поддержкой public кэширования

Установка через composer

Использование

Использование c infrajs

У первого слоя нужно указать свойство environment

Описание

Под окружением понимается набор параметров определённых для текущего посетителя сайта, например

По смыслу окружение похоже на локаль в php.

Расширение infrajs/env предоставляет интерфейс для определения окружения пользователя. Параметры окружения могут изменяться и изменять содержание страницы несмотря на заголовка Cache-control:public. Содержания, как бы динамическое, но при этом остаются все преимущества кэширования.

В подавляющем большинстве случаев пользователь попадает в правильное, определённое по умолчанию окружение и получает правильное содержание страницы. Если пользователь меняет окружение, то при получени старого кэша будет редирект. Для пользователя, изменение окружения сразу приведёт к изменению страницы, согласно установленным параметрам, без проблем с кэшем, что и требуется. То есть, кэшируемая страница может быть изменена пользователем без инструкций, как обновить кэш браузера и т.п.

Делать многоязычный сайт с помощью этого расширения или как-то по другому остаётся на выбор разработчика, сама возможность не обязывает в окружении сохранять всё.

При любом изменении дефолтных параметров окружения появляется новое имя окружения, которое записывается в cookie, что сделает кэш пользователя приватным Cache-control:private. Если этот пользователь сам получит кэш со старым окружением, то произойдёт переадресация на страницу с параметром ?-env=имя окружения - кэш такого адреса всегда соответствует указанному окружению.

Переадресация будет срабатывать до тех пор пока пользователь сразу не получит правильный ответ сервера, что зависит от времени кэша для динамики. Если динамика не кэшируется, то редирект никогда не потребуется, так как пользователь всегда будет получить ответ сервера в соответствии со своим окружением установленным в cookie -env.

location.reload(true) не используется. Такой вызов обновит кэш браузера, но не кэш на промежуточном сервере или CDN.

При первом посещении сайта пользователь может получить кэш промежуточного сервера и если у пользователя в cookie не установлено окружение, то полученный кэш будет считаться правильным, до тех пор пока пользователь реально не обратится к серверу или другому проежуточному кэш-серверу, который может определить иное окружение. Получится, что сайт определит регион пользователя Москва, тот обновит страницу и сайт покажет, что пользователь уже из Самары, хотя реально допустим пользователь из Тагила... неточности это нормально. Как только пользователь явно укажет своё окружение, которое запишется в cookie и неожиданные изменения прекратятся.

Имя окружения

Каждому набору параметров в окружении даётся какое-то сокращённое имя, обычно 2 или 3 символа.

Локальный кэш браузера содержит заголовок Etag содержащий имя окружения и при запросе сервер поймёт, что кэш устарел. Отдельные параметры из окружения указываются в условиях кэширования Access::cache, Cache::exec программистом в зависимых скриптах.

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

Имя окружения хранится в cookie. -env=bla Если его нет, определяется автоматически. Если есть, будет использоваться установленное.

Целесообразность хранения параметра в окружении

  1. Параметр не должен быть приватным. Всё что находится в окружении определяет содержание страницы, которая попадает в кэш, как пользователя, так и провайдера или прокси-серверов, тем самым обеспечивая быструю загрузку страницы.
  2. При первом посещении страницы может показаться кэш окружению другого пользователя, должна быть значительная вероятность, что этот кэш подходит и для нового пользователя. То есть имеет географическую зависимость или редко изменяется.
  3. Окружение определяется для всего сайта и не зависит от разделов или страниц сайта.
  4. Разрешить кэширование. Если страница зависит от параметра и этот параметр не будет хранится в окружении, то содержание страницы получается динамическим и кэшировать такую страницу нельзя, но если вынести этот параметр в окружение, public-кэш будет возможен.
  5. Редкое изменение. Параметр окружения для пользователя меняется лишь в исключительной ситуация, изменение требует неприятного редиректа на каждой странице, которая была посещена, и на которую пользователь зайдёт снова после изменения.
  6. После изменения параметров окружения будет запрещено использовать CDN для этого пользователя и кэш этого пользователя станет приватным. Но даже тут CDN возможен до изменений окружения, то есть хоть как-то возможность, а для динамических страниц такой возможности нет вовсе.
  7. Для каждого набора будет создаваться отдельное имя и умножение параметров приведёт к безграничному росту имён, так как для каждой комбинации генерируется своё имя, которое сохраняется с параметрами в папке и устанавливается в cookie.

Хранение темы сайта в окружении

Если динамика сайта заканчивается изменением темы, или если остальная динамика будет подтягиваться с AJAX, то чтобы разрешить public кэширование основного содержания тему можно и нужно вынести в окружение, как и остальные параметры мешающие включить кэширование, согласно описанию целесообразности.

Флаг - nostore

Для варианта, когда обновление кэша привязано к дате посещения сайта администратором. Пользователю-администратору нужна возможность игнорировать кэш своего браузера. Даже если, те же страницы, после авторизации уже не будут выставлять заголовок Cache-control: Public, браузер может и не узнать об этом и будет продолжать использовать свой локальный кэш, согласно старым правилам. Установленный флаг в окружении будет приводить к редиректу и сделанные администратором изменения, несмотря на public кэш будут сразу применяться. Такое обновление также бдет сбросывать кэш у динамически подключаемых расширений если администртивный режим будет всем запросам автоматически добавлять нужный ключ запрещающий кэширование динамики в браузере.

Обновление локального кэша

При посещении страницы, содержание которой берётся из локального кэша, скрипт сравнивает имя окружения собранной страницы с именем окружения хранящегося в cookie и если они разные выполняется . Если посетитель перейдёт на новую страницу и снова обновит страницу и получит локальный старый кэш, переход сработает снова. При обновлении страницы со старым Etag c сервера придёт новый Etag и новый ответ попадёт в локальный кэш. Повторный заход пользователя на страницу не потребует перехода, так как cookie окружения совпадёт с окружением сгенерированой страницы. Подробней про Etag

Обновление локального кэша ресурсов

Параметры окружения, от которых зависит содержание ресурсов должны явно передаваться в адресе. php скрипты не могут использовать имя из кукиса для получения параметров, так как это приведёт к ошибкам в кэше по адресу. Если содержание меняется значит должен быть новый адрес, это обязывает передавать параметры в GET аргументах.

Интерфейс доступа к параметрам окружения по имени окружения используется только в шаблонах html в контроллере и шаблонах адресов до данных изменения адреса изменяет кэш слоя. ,

Значение окружения должно передаваться явно параметром до файла-php с данными.

Использование nostore

Так как для скриптов явно не указывается зависимость от этого параметра, система должна автоматически подставлять что-то в каждый AJAX запрос результат которого может поменяться от действий администратора. В infrajs всё нужное есть в админке все запросы с параметром -nostore=true возвращают заголовок Cache-control:no-store благодаря расширению infrajs/nostore.

Параметры окружения

Параметры окружения определяются по логике infrajs/mark по адресу /-env/?mark=sdw:lang=eng. Так как проверка устанавливаемых значений происходит на сервере, клиент не может полагаться, что значение установится.

установит параметр окружения lang значение en. Будет сгенерировано имя окружения и установлен cookie

сбросить параметры окружения на значения по умолчанию. cookie будет удалён.

На клиенте при переходе без полной перезагрузки страницы изменения также применятся. Запускается Controller.check(); И в зависимых слоях Env.get(name) вернёт новое значение и слои перепарсятся использовов уже актуальные значение параметров окружения.

Для определения нового параметра

Нужно определить функцию определения значения по умолчанию. Например, новый параметр region и вот функция, которая его определяет.

Для всех новых параметров создаются отедльные расширения. Например, infrajs/lang, infrajs/region.

CDN

Теоретически использование CDN не исключается, из расчёта что сервер-CDN находится в том же регионе и именно раздающий сервер делает запрос за содержанием для CDN. Окружение определённое для местного сервера подойдёт и большинству посетителей и CDN будет, тем самым проксирующим public сервером.

Пример для демонстрации

http://kvant63.ru


All versions of env with dependencies

PHP Build Version
Package Version
Requires infrajs/mark Version ~1
infrajs/ans Version ~1
infrajs/nostore Version ~1
infrajs/path Version ~1
infrajs/load Version ~1
infrajs/template Version ~1
infrajs/event Version ~1
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package infrajs/env contains the following files

Loading the files please wait ....