Php 如何在Ubuntu和Windows中设置环境变量并安全存储?

Php 如何在Ubuntu和Windows中设置环境变量并安全存储?,php,ubuntu,laravel,laravel-4,environment-variables,Php,Ubuntu,Laravel,Laravel 4,Environment Variables,我正在开发一个基于laravel的应用程序。我需要在配置中设置我的数据库密码,以便laravel可以使用它连接到数据库 现在我有两个问题: 1) 我不想为我使用的所有其他本地环境设置密码。 2) 我不想在配置文件中设置密码,因为当我在git上与团队成员共享代码时,他们可以查看我的密码 我可能已经找到了一种解决方法,将密码存储在环境变量中,然后使用getenv()PHP函数在配置文件中检索密码。因此,现在我可以在任意数量的环境中设置环境变量,配置文件中的代码将保持不变,并且其他成员将无法看到我的密

我正在开发一个基于laravel的应用程序。我需要在配置中设置我的数据库密码,以便laravel可以使用它连接到数据库

现在我有两个问题: 1) 我不想为我使用的所有其他本地环境设置密码。 2) 我不想在配置文件中设置密码,因为当我在git上与团队成员共享代码时,他们可以查看我的密码

我可能已经找到了一种解决方法,将密码存储在环境变量中,然后使用getenv()PHP函数在配置文件中检索密码。因此,现在我可以在任意数量的环境中设置环境变量,配置文件中的代码将保持不变,并且其他成员将无法看到我的密码

现在我不知道如何设置环境变量,以及其他东西,比如全局/局部环境变量和临时/持久性变量

如果我将密码存储在环境变量中,我应该散列这些密码吗?登录到我的计算机的其他用户是否可以访问它们? 如果我对它们进行散列并存储,我应该如何在配置文件中使用它们


有没有一种不同的、更理想的方法来解决我的问题?

我无论如何都不是安全方面的专家,但我认为您应该避免尝试做您想做的事情,而只是定义您的环境。如果你真的想设置一个环境变量,这就是你在Ubuntu中设置环境变量的方式:

在您的
vhost
中:

<VirtualHost *:80>
    SetEnv APP_ENV "test"
    ...
</VirtualHost>

SetEnv APP_ENV“测试”
...

我假设Windows是您的客户机?

Laravel Way

Laravel使用
.env.php
文件为您解决此问题:。但是,由于您仍然需要在start.php文件中设置环境,因此我更愿意采用不同的方式:

我的路

我在我的应用程序根文件夹中创建了一个
.environment
文件,其中包含以下内容:

<?php

return [

    'LARAVEL_ENV' => 'development',

    'DOMAIN' => 'myapp.com',

    'DEBUG_MODE' => true,

    'MAIN.DATABASE_HOST' => 'localhost',
    'MAIN.DATABASE_NAME' => 'databasename',
    'MAIN.DATABASE_USER' => 'myusername',
    'MAIN.DATABASE_PASSWORD' => 'basswort',

];
如您所见,闭包将返回存储在my.environment文件中的当前LARAVEL_ENV。但它也将加载PHP环境的所有键,因此,现在,在我的应用程序中,我只需要

<?php

return [

    'fetch' => PDO::FETCH_CLASS,

    'default' => 'main',

    'connections' => [

        'main' => [
            'driver'   => 'pgsql',
            'host'     => getenv('MAIN.DATABASE_HOST'),
            'database' => getenv('MAIN.DATABASE_NAME'),
            'username' => getenv('MAIN.DATABASE_USER'),
            'password' => getenv('MAIN.DATABASE_PASSWORD'),
            'charset'  => 'utf8',
            'prefix'   => '',
            'schema'   => 'public',
        ],

    ],

];

已经有很多很好的答案了,但作为补充说明。您可以将DB配置文件包含在.gitignore中,这样开发团队就不会被git共享。类似于项目文件中的config.php.orig和.gitignore中列出的您自己的副本config.php的东西应该可以做到这一点。

为什么不使用第二个本地配置文件,该文件包含密码并且没有放入源代码控制中?(那么你的合作者必须创建他们自己的这样的文件。)如果你设置了一个环境变量,那么这个变量的代码必须存储在某个文件中,对吗?你打算如何解决这个问题?我同时使用Ubuntu和Windows。我已经在两台机器上克隆了存储库。非常感谢!这正是我要找的!我还应该在.env.php文件中加密密码,然后在配置文件中解密吗?我认为没有必要,但这样做会更安全一些。在我看来,完全不同的密码,对于我们所使用的一切,比我们可能想到的任何其他混淆都要好。
$env = $app->detectEnvironment(
    \App\Environment::getDetectionClosure(__DIR__.'/../.environment')
);
<?php

return [

    'fetch' => PDO::FETCH_CLASS,

    'default' => 'main',

    'connections' => [

        'main' => [
            'driver'   => 'pgsql',
            'host'     => getenv('MAIN.DATABASE_HOST'),
            'database' => getenv('MAIN.DATABASE_NAME'),
            'username' => getenv('MAIN.DATABASE_USER'),
            'password' => getenv('MAIN.DATABASE_PASSWORD'),
            'charset'  => 'utf8',
            'prefix'   => '',
            'schema'   => 'public',
        ],

    ],

];