[话题] getenv 函数获取值报 500 错误

使用环境:

  • 电脑系统为 windows
  • 运行环境为phpstudy:php7.1.13;apache2.4.23
  • 配置了 vhosts.conf 文件内容如下

    <VirtualHost *:80>
    ServerName    xiangmu.xin
    DocumentRoot "C:\ruanjian\phpstudy\PHPTutorial\WWW"
    SetEnv RUNTIME_ENVIROMENT DEV
    
    <Directory "C:\ruanjian\phpstudy\PHPTutorial\WWW>
    AllowOverride All
    Order allow,deny
    Allow from all
    </Directory>
    </VirtualHost>

产生的问题如下

1、我在本地有一个文件 in.php,代码如下:

<?php

var_dump(getenv("RUNTIME_ENVIROMENT"));
die;

2、访问 1 的代码(http://xiangmu.xin/in.php)直接报 500 错误。
3、然后将 1 的代码调整为如下,则正常输出 DEV

<?php

var_dump($_SERVER["RUNTIME_ENVIROMENT"]);
die;

存在的疑问?

1、在 Laravel 中 env() 这个函数中也使用 getenv() 这个函数,为什么没有报错?并且正常加载的 .env 配置文件中的值
2、在 .env 配置文件中,声明了 APP_ENV=local 且项目根目录也创建了 .env.local 配置文件。执行代码 dd(env('DB_PASSWORD')) 还是返回的 .env 中的配置信息!这是哪一步出现问题了吗?

还望各位大神不吝赐教[抱拳]

xahy
xahy
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 12

首先,建议你删除多余的帖子,刷屏是无法得到你想要的答案的。

其次,报错 500 请贴出具体的信息,不然没人知道具体发生了什么。

5年前 评论
Shuyi

那个…… Laravel 的 env 在 .env 文件里, 跟你说的 getenv 完全是不同的两个东西啊……

5年前 评论
xahy

@Shuyi Laravel 的 env 函数里面也使用的 getenv

5年前 评论
xahy

@Wi1dcard 好的。首先,我只发了两次帖子,第一次写了一半就给发出去了,然后我就又写了一篇完整的,并将半篇的文章删除了。不清楚为什么会出现您说的刷屏的现象。
然后页面显示错误内容如下:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at admin@php.cn to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

error.log 里面内容如下:
[Thu Jan 31 11:35:31.082749 2019] [core:error] [pid 18248:tid 2120] [client 127.0.0.1:55451] End of script output before headers: index.php

感谢

5年前 评论

@西安很远 先学习一下如何让 PHP 输出错误的相信信息。

5年前 评论
xahy

@Wi1dcard 好的,感恩。
首先如果您知道如何使 php 输出详细的错误信息的话,您可以直接回答如何输出详细错误信息(因为这样也跟您学习了更好的拍错经验)。
然后设置之后再次运行,还是输出的一样的错误信息。
我的设置如下:
ini_set('display_errors','On');
ini_set('display_startup_errors',1);
error_reporting(E_ALL);

5年前 评论

@西安很远 常见问题需要试着自我学习,所谓授人以鱼不如授人以渔,给予你方向比直接丢代码让你拷贝或许更好。

(更何况我也记不住如何打开,一般都是随手 Google 一波 PHP 文档,2333)

这情况还真比较奇怪了。我对 Windows + Apache + PHP 的搭配不太熟悉,已经开启错误信息输出但仍提示 500 的原因未知,另外我在本地 macOS + Nginx + PHP-FPM 以及 Ubuntu 18.04 都没有复现。

5年前 评论
xahy

@Wi1dcard 感恩您的回答。可能我刚才回复的没能让您理解,我想表达的是给出了方向后,如果可以的话也提供下答案能学习到不同的处理方式。
我在 CentOS + Nginx + PHP-FPM 上实验,只有在 nginx 的配置文件内 fastcgi_param 形式设置是 ok 的。像网络中其他文章提到的 在Apache 或 PHP-FPM 配置文件内 以及 /etc/environment 、/etc/profile 设置环境变量 ,都是返回 false 的。

5年前 评论

@西安很远 如果我没记错的话,/etc/environment/etc/profile 是可以的,但需要特殊配置。不知道为何会有这种需求?

至于 PHP-FPM 配置是肯定不行的,凭 Apache 与 PHP 通信原理的一点了解,我猜通过 Apache 配置理论上可以,但具体不了解,已经远离 Apache 很久了。

5年前 评论
xahy

@Wi1dcard 感恩您的回答。需求是没有的,就是自己在学习新的知识。碰到这些问题了,所以发帖出来看看大家有没有遇到过,吸取一些经验。

5年前 评论
xin6841414

遇到同样问题,没找到好的办法, 只能先getenv()获取所有,再从获取的数组中取 RUNTIME_ENVIROMENT, 因为php7.1以后可以省略getenv($varname)中的 varname 来检索所有环境变量的关联数组 array,楼主解决了么?

4年前 评论
xahy

@xin6841414 不好意思,我这边也没有解决,因为只是学习laravel,实际项目中并没有用到这个框架,而且目前在做别的语言开发,所以没有深入解决下去,还是比较抱歉的,后续如果解决了,一定想办法通知你

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!