Идея .env
заключается в том, что его следует использовать в основном в средах разработки и тестирования , потому что в других средах, таких как производственный или промежуточный веб-сервер, вы должны иметь возможность устанавливать эти переменныевнешне.Например, Nginx позволяет вам использовать директиву env
в ваших файлах конфигурации для установки переменных, которые приложение сможет подобрать.
Я думаю, почему Symfony выбралОбрабатывать .env
таким образом, это то, что он позволяет вам унифицировать способ, которым переменные для любой среды выполнения может иметь разработчик.Также помните, что в производственных развертываниях переменные среды являются первоклассными и довольно распространенными и не меняются довольно часто.
Другое дело здесь: безопасность: конфигурации сервера должны быть более безопасными, чем исходный код приложения Symfony.Например, как пользователь, имеющий доступ к файловой системе к корню приложения на вашем сервере prod, вы можете украсть учетные данные базы данных, если они просто хранятся в .env
, но вы не сможете получить к ним доступ, если они надежно хранятся где-то на сервере.config, вне корня приложения.
В любом случае, если вы готовы рискнуть, предоставив свою конфигурацию на рабочей машине всем, кто имеет доступ к .env
, вы все равно сможете включить .env
в вашей постановочной или производственной среде.Для этого вы должны удалить или закомментировать эти строки в index.php
:
// Comment out the if statement so the code gets run every time:
// if (!isset($_SERVER['APP_ENV'])) {
(new Dotenv())->load(__DIR__.'/../.env');
// }
Также вам нужно переместить зависимость DotEnv
из require-dev
deps в require
разделваш composer.json
:
{
"type": "project",
"license": "proprietary",
"require": {
...
"symfony/dotenv": "^4.0",
...
}