Laravel 5.8 , artisan commands error : Failed to parse dotenv file due to an invalid name

Laravel 5.8 , artisan commands error : Failed to parse dotenv file due to an invalid name

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

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

它在我的本地环境中使用 Laravel 5.8 工作正常。

问题是:

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

The environment file is invalid! Failed to parse dotenv file due to an invalid name.

Failed at [APP_NAME].

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

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

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

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

必须是CRLF而不是LF

我的 .env 文件是 LF

see the screenshot to understand the solution

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

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

The environment file is invalid! Failed to parse dotenv file due to an invalid name. Failed at [//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?

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

这让我抓狂,我在某处读到不再支持 C 风格注释。我的 env 文件不包含任何内容,但无奈之下我在文件顶部添加了以下行:

# getting tiresome.

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

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

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

MAIL_FROM_NAME=账户确认

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

MAIL_FROM_NAME=Account_confirmation(正确)

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

NOM-OPEN="2020/01/24"

在 Laravel 5.7 之前还可以,但到了 5.8 就跌倒了。要解决它,请将连字符更改为下划线。

NOM_OPEN="2020/01/24"

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

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

我可以通过在 .env 文件的顶部添加一个空白的新 line/space 来解决这个问题。

示例 .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}"

我把.env的编码改了一下就解决了

UFT-8 without BOM

谢谢

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

APP_NAME=My Project Name 

至此

APP_NAME="My Project Name"

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

就我而言,我有一条不应该出现的额外行。

Header set X-Frame-Options SAMEORIGIN 删除了这个 它成功了

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

这对我有用。