Laravel 5.8,artisan命令错误:由于无效名称而无法解析dotenv文件。

24

这个问题只会在我使用共享托管的 Laravel 5.8 上出现。

在我的共享托管中,Laravel 5.7 可以正常运行。

在我的本地环境中,Laravel 5.8 也能正常运行。

问题是:

每次我在我的共享托管上运行 php artisan 命令(仅限于 Laravel 5.8),都会出现以下错误:

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

失败于 [APP_NAME]。

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

此外,我将网站更新到 Laravel 5.8 后,变成了一个白色空白页面!

13个回答

38

这是一个与解析.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"

谢谢。我找到了原因和解决方案,你可以在我的第二个答案中找到它。 - Abdulaziz Tayyar
我遇到了相同的错误,并通过删除APP_NAME中的空格来解决。 - Ajith
我的名字没有空格,但还是失败了。该文件采用UTF8格式,并带有LF行结束符(在Linux中运行)。这是什么鬼.. - Valentino

15

更改应用程序名称时,出现一般错误。要消除此错误,请按照以下步骤操作。

APP_NAME=My Project Name 

对于这个

APP_NAME="My Project Name"

你只需要在名称周围添加""课程即可。 谢谢


8

4
这并没有解释任何东西... 请在回答中详细说明,以便像我这样的人能够找到解决方案。 - levi
谢谢 @Kray。我添加了一张屏幕截图。 - Abdulaziz Tayyar
这对我没有用(在Linux服务器上运行PHP)。 - Valentino

6

我在将 Laravel 5.5 升级到 Laravel 5.8 时遇到了类似的错误。

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

5.5 可以接受 C 风格的注释在 APP_ENV 上:

// 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才有问题?


请阅读我发布的回答。@Paul - levi

5

我改变了.env文件的编码格式,问题得以解决。

使用UTF-8无BOM格式

谢谢


2

我有过完全相同的问题,但是有一个不同的解决方案。CRLF没有任何影响。

这让我非常烦恼,我在某个地方读到说不再支持C风格的注释。我的env文件中没有包含任何内容,但是出于绝望,我在文件顶部添加了以下行:

# getting tiresome.

我认为措辞并不重要,但关键是有一个注释。

之后,它就可以工作了。我不知道为什么,但它确实可以。

快进几个月,下一次我升级Laravel时问题又出现了。这有点奇怪,因为文件是相同的。这一次我必须确保将文件保存为UTF-8无BOM格式。


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}"

1
我已经在DB_DATABASE路径周围添加了引号。

enter image description here


0

MAIL_FROM_NAME=帐户确认

我只是在两个单词之间添加空格,尝试避免这样做,例如:Account_confirmation

MAIL_FROM_NAME=Account_confirmation(正确)


0

删除.env文件并重新创建一个内容相同的文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接