【问题标题】:When running a project without a .env file, bootstrap.php throws a fatal error when the DotEnv component attempts to read it当运行一个没有 .env 文件的项目时,当 DotEnv 组件尝试读取它时,bootstrap.php 会抛出一个致命错误
【发布时间】:2020-05-31 18:55:37
【问题描述】:

我尝试使用以下教程部署 Symfony 应用程序:https://medium.com/@runawaycoin/deploying-symfony-4-application-to-shared-hosting-with-just-ftp-access-e65d2c5e0e3d

在尝试加载网站时,我收到了 500 内部服务器错误。根据教程,我查看了托管错误日志并看到了很多关于 DotEnv 的内容。这是输出的第一部分:

PHP 致命错误:未捕获 Symfony\Component\Dotenv\Exception\PathException:无法读取 “/var/www/vhosts/137/332002/webspace/httpdocs/symfony_temp/.env” 环境文件。在 /var/www/vhosts/137/332002/webspace/httpdocs/symfony_temp/vendor/symfony/dotenv/Dotenv.php:484

本教程告诉我将环境变量存储在其他地方,例如 index.php。但是查看代码我看到bootstrap.php 立即调用DotEnv 并尝试从那里获取数据,我认为这最终会导致错误。

如何禁用 DotEnv,使 Symfony 不使用它,并且我可以简单地从其他地方获取我的 env 变量?它托管在属于客户的托管环境中,我认为 .htaccess 不允许访问 DotEnv,在这种情况下我无法更改它,因为我无权编辑该 .htaccess 文件甚至打开它。

【问题讨论】:

  • 不熟悉本教程,但 DotEnv 通常只用于开发环境,而不是生产环境。至少它应该检查 $_SERVER['APP_ENV'] 的存在。您也可以尝试“composer dump-env prod”来生成 .env.local.php 文件。

标签: php symfony


【解决方案1】:

bootstrap.php 属于你。如果你不喜欢它的行为,就改变它。

如果您不想使用DotEnv,只需将其删除并删除代码中对它的所有引用(例如前面提到的bootstrap.php)。

请注意,在 index.php 这样的代码中硬编码配置变量听起来是一个坏主意。即使您不使用环境变量,DotEnv 也会帮助您将配置数据集中在与您的应用程序逻辑无关的单个文件中。

为了获得最佳性能,请在开发时为生产设置配置环境变量,并使用composer dump-env prod,如here 所述。这将生成一个.env.local.php,您可以将其上传到生产环境,而默认的bootstrap.php 将阻止使用DotEnv。

【讨论】:

  • 默认情况下,DotEnv 组件并不打算在生产环境中使用。
  • DotEnv 可以在任何环境中使用。 “建议”不要在提到的同一句话中使用它,您可以在产品上使用它。这取决于每个用户和他们自己的要求。无论如何,对于在 PHP 文件中硬编码其凭据的人来说,DotEnv 是一个明显的改进,并且对性能的影响可以忽略不计。
  • 实际建议不要在生产环境中使用.env 文件并使用环境变量(不是OP 的选项),并且生成.env.local.php。这可能是 OP 的一个选项,但我只是在解决“boostrap.php 需要 DotEnv”。用户应该明白,这些文件是他们自己的,可以根据他们的内心内容进行修改,而不是黑盒。
  • 正确,不过我不需要这个解释,我知道如何部署 Symfony 应用程序 ;) 恕我直言,你应该把它放在答案中。这是一个赞成票。
猜你喜欢
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 2022-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多