我在本地计算机上有两个Laravel 5.2应用程序(我们称之为A和B),它们都在我本地Apache 2.4开发服务器上的两个不同的虚拟主机上配置.
这两个应用程序有时通过GuzzleHttp相互调用.
有一次我想使用加密,我开始从Laravel的Encrypter获得"mac is invalid"异常.
在调查问题时,我发现当应用A调用应用B时,应用B突然从应用A获取加密密钥(app.key)!这会导致加密中断,因为应用B上的值使用应用的B加密密钥进行加密.
在调试时,我发现Dotenv库有一些逻辑来保存现有变量(如果已设置).我发现$ _ENV和$ _SERVER都没有泄漏变量,但getenv()有它们!
我有点困惑,因为PHP putenv说:
环境变量仅在当前请求的持续时间内存在.
似乎,如果在当前请求期间我通过GuzzleHttp发出另一个请求,Dotenv在A中使用的变量putenv()突然变得可以在应用B中使用,这是由GuzzleHttp请求的!
我知道在生产服务器上这不会是一个问题,因为将使用配置缓存而不是Dotenv,并且很可能两个应用程序都将在不同的Apache服务器上运行,但这种行为正在破坏我的开发过程.
如何配置Laravel或GuzzleHttp或Apache或PHP以防止putenv()从应用程序A泄漏到应用程序B?