【发布时间】: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 的命令行相反。
-
您的问题是“在我的共享主机上的生产系统上,工匠命令可以正常工作”。我认为它在服务器上工作 - 网站和命令行都 - 但不是在本地命令行上。