【问题标题】:Artisan unable to access environment variables from $_ENVArtisan 无法从 $_ENV 访问环境变量
【发布时间】:2014-07-29 01:27:51
【问题描述】:

我在命令行中输入的任何工匠命令都会引发此错误:

$ php artisan
<?
return array(
    'DB_HOSTNAME'   => 'localhost',
    'DB_USERNAME'   => 'root',
    'DB_NAME'       => 'pc_booking',
    'DB_PASSWORD'   => 'secret',
);
PHP Warning:  Invalid argument supplied for foreach() in /home/martin/code/www/pc_backend/vendor/laravel/framework/src/Illuminate/Config/EnvironmentVariables.php on line 35
{"error":{"type":"ErrorException","message":"Undefined index: DB_HOSTNAME","file":"\/home\/martin\/code\/www\/pc_backend\/app\/config\/database.php","line":57}}

这仅在我最近安装了 apache 和 php 的本地开发系统上。在我的共享主机上的生产系统上,artisan 命令工作得很好。 prod 系统有它自己的 .env.php,但除此之外,代码应该是相同的。

相关文件:

.env.local.php

<?
return array(
    'DB_HOSTNAME'   => 'localhost',
    'DB_USERNAME'   => 'root',
    'DB_NAME'       => 'pc_booking',
    'DB_PASSWORD'   => 'secret',
);

app/config/database.php

<?php

return array(

'fetch' => PDO::FETCH_CLASS,

'default' => 'mysql',

'connections' => array(

    'mysql' => array(
        'driver'    => 'mysql',
        'host'      => $_ENV['DB_HOSTNAME'],
        'database'  => $_ENV['DB_NAME'],
        'username'  => $_ENV['DB_USERNAME'],
        'password'  => $_ENV['DB_PASSWORD'],
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),
),

'migrations' => 'migrations',

),

);

$_ENV 数组在网站上按预期填充 - 问题似乎仅限于工匠。

【问题讨论】:

  • 看起来 Laravel 不知道你想要 local 环境,而是默认为 production。尝试运行php artisan –env-=local,如果可行,您将确认这是问题所在。您可以运行hostname 来查找您的本地主机名,然后编辑bootstrap/start.php 以自动将您的本地开发系统映射到local 环境。
  • 不起作用。 Laravel 确实可以识别环境并在服务器上填充 $_ENV 数组。只有在使用 Artisan 时会出现问题。
  • 好吧,如果 Laravel 识别出你本地机器上的环境并且仍然没有加载 .env.local.php 文件,那我也是一头雾水。
  • 如果我不清楚。当我说它在服务器上识别它时,我的意思是在网站上,在浏览器中。与 artisan 的命令行相反。
  • 您的问题是“在我的共享主机上的生产系统上,工匠命令可以正常工作”。我认为它在服务器上工作 - 网站和命令行都 - 但不是在本地命令行上。

标签: php laravel laravel-4


【解决方案1】:

所以我终于想出了如何解决它。 事实证明,该文件没有作为 php 文件处理,因为我在 .env.local.php 文件中使用了一个简短的开始标签。使用正常的开始标签解决了它。不过我不知道为什么,因为短标签在其他地方也能正常工作。

【讨论】:

  • 啊,我从来没听过。很高兴你设法解决它。 :)
  • 找了好几个小时了。谢谢。
猜你喜欢
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 2023-01-08
  • 2021-03-30
  • 2016-12-26
  • 2021-05-05
  • 2018-03-17
  • 2022-01-04
相关资源
最近更新 更多