19

这个问题只发生在我的共享主机上的 Laravel 5.8 上。

它在我使用 Laravel 5.7 的共享主机中运行良好。

它在我的本地环境中使用 Laravel 5.8 运行良好。

问题是:

每次我运行 php artisan 命令(仅在我与 Laravel 5.8 的共享主机上)我都会收到此错误

环境文件无效!由于名称无效,无法解析 dotenv 文件。

在 [APP_NAME] 失败。

我的 .env 第一行是:APP_NAME=rased

我的网站在更新到 Laravel 5.8 后也变成了一个白色的空白页面!

4

11 回答 11

29

这是与解析 .env 文件相关的一般错误。您会看到错误中指出了这一点,例如

The environment file is invalid!
Failed to parse dotenv file due to unexpected whitespace. 
Failed at [This will fail].

在此示例中,它是由APP_NAME字段中未转义的空格引起的,即

APP_NAME=This will fail

要修复,请使用引号转义,例如

APP_NAME="This is better"
于 2019-08-14T05:14:32.623 回答
15

这是我们更改应用名称时的一般错误。要消除此错误,只需执行此操作。

APP_NAME=My Project Name 

对此

APP_NAME="My Project Name"

您只需要在名称周围添加“”课程。谢谢

于 2020-04-27T06:06:25.123 回答
7

我找到了这个问题的原因。

这是因为.env 文件中的行分隔符!

它必须是CRLF而不是 LF

我的 .env 文件是 LF

查看屏幕截图以了解解决方案

于 2019-03-16T18:28:43.317 回答
6

从 Laravel 5.5 升级到 Laravel 5.8 时,我收到了类似的错误。

环境文件无效!由于名称无效,无法解析 dotenv 文件。在 [//APP_ENV] 失败。

5.5 将接受对 APP_ENV 的 C 风格注释:

// env file setup for production environment
//APP_ENV = production
//APP_DEBUG = false
// env file setup for local environment
APP_ENV = local
APP_DEBUG = true

而5.8不会。# 适用于评论:

# env file setup for production environment
#APP_ENV = production
#APP_DEBUG = false
# env file setup for local environment
APP_ENV=local
APP_DEBUG=true

我曾尝试在这些定义中没有空格的全新 5.8 应用程序安装时删除空格。那并没有解决它。

奇怪的是我在文件的其他地方还有 C 风格的注释,所以只针对 APP_ENV?

于 2019-09-16T02:54:13.397 回答
3

我更改了 .env 的编码并解决了。

无 BOM 的 UFT-8

谢谢

于 2020-03-24T09:52:40.360 回答
2

我遇到了完全相同的问题,但解决方案不同。CRLF 没有任何区别。

这让我发疯,我在某处读到不再支持 C 风格的注释。我的 env 文件不包含任何内容,但在绝望中我在文件顶部添加了以下行:

# getting tiresome.

我认为措辞并不重要,但关键是有评论。

在那之后,它奏效了。我不知道为什么,但确实如此。

快进几个月,下次我必须升级 Laravel 时问题又回来了。这有点奇怪,因为文件是一样的。这次我必须确保将文件保存为没有 BOM 的 UTF-8。

于 2019-10-19T22:14:56.897 回答
2

我最近在我的 Laravel 6.12.0 应用程序上遇到了同样的问题。

我能够通过在文件顶部添加一个空白的新行/空格来解决此问题.env

.env 文件示例:

    [add a new line here]
    APP_NAME=Laravel
    APP_ENV=local
    APP_KEY=
    APP_DEBUG=true
    APP_URL=http://localhost

    LOG_CHANNEL=stack

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=laravel
    DB_USERNAME=root
    DB_PASSWORD=

    BROADCAST_DRIVER=log
    CACHE_DRIVER=file
    QUEUE_CONNECTION=sync
    SESSION_DRIVER=file
    SESSION_LIFETIME=120

    REDIS_HOST=127.0.0.1
    REDIS_PASSWORD=null
    REDIS_PORT=6379

    MAIL_DRIVER=smtp
    MAIL_HOST=smtp.mailtrap.io
    MAIL_PORT=2525
    MAIL_USERNAME=null
    MAIL_PASSWORD=null
    MAIL_ENCRYPTION=null
    MAIL_FROM_ADDRESS=null
    MAIL_FROM_NAME="${APP_NAME}"

    AWS_ACCESS_KEY_ID=
    AWS_SECRET_ACCESS_KEY=
    AWS_DEFAULT_REGION=us-east-1
    AWS_BUCKET=

    PUSHER_APP_ID=
    PUSHER_APP_KEY=
    PUSHER_APP_SECRET=
    PUSHER_APP_CLUSTER=mt1

    MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
    MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
于 2020-02-09T06:51:21.690 回答
0

MAIL_FROM_NAME=帐户确认

我只是在这两个词之间留出空格,尽量避免这样:Account_confirmation

MAIL_FROM_NAME=Account_confirmation(正确)

于 2020-01-13T22:29:31.897 回答
0

就我而言,我有一条不应该存在的额外线路。

Header set X-Frame-Options SAMEORIGIN删除了这个并且它工作了

于 2020-07-15T13:32:22.207 回答
0

我发现如果您在 .env 文件中用引号声明 APP_NAME,它将允许应用程序名称中有空格,但请确保您使用命令 (php artisan serve) 重新启动服务器, 例如:APP_NAME='Laravel Login'

这对我行得通。

于 2021-02-10T10:37:44.400 回答
-1

以防其他人到达这里并没有解决他们的问题。我遇到了这个问题,发现这是由于使用连字符来分隔环境变量名称。

NOM-OPEN="2020/01/24"

这在 Laravel 5.7 之前还可以,但在 5.8 中失败了。为了解决它,将连字符更改为下划线。

NOM_OPEN="2020/01/24"

不要忘记更新对变量的所有引用!

于 2020-01-22T14:36:35.033 回答