Php Laravel 5-按服务器名称进行环境检测

Php Laravel 5-按服务器名称进行环境检测,php,laravel-5,phpdotenv,Php,Laravel 5,Phpdotenv,我知道Laravel5使用了.env文件,所以我们可以设置特定的enivornment值 我的问题是,在《拉威尔5》中有没有一种方法,比如说 if ($SERVER_NAME == "my_production_server") { $environment = "production" } 因此,它使用生产价值。我的想法是,我希望所有的环境和它们的变量都放在一个文件或目录中,或者其他任何地方,这样我们就可以在不需要任何手动干预的情况下部署整个构建,并且我们可以将这些都签入我们的代码库

我知道Laravel5使用了.env文件,所以我们可以设置特定的enivornment值

我的问题是,在《拉威尔5》中有没有一种方法,比如说

if ($SERVER_NAME == "my_production_server") {
    $environment = "production"
}

因此,它使用生产价值。我的想法是,我希望所有的环境和它们的变量都放在一个文件或目录中,或者其他任何地方,这样我们就可以在不需要任何手动干预的情况下部署整个构建,并且我们可以将这些都签入我们的代码库。

您可能可以将.env设置为:

APP_ENV=local
APP_DEBUG=true
APP_KEY=sjkanljksdnjsnetcetcetcetc..
APP_URL=http://localhost:8000

DB_HOST=qa
DB_DATABASE=admin
DB_USERNAME=home
DB_PASSWORD=root

DB_HOST2=production// I.P address
DB_DATABASE2=admin
DB_USERNAME2=admin
DB_PASSWORD2=admin

然后在config文件夹中的database.php文件中,您可以设置连接主机和主机2以匹配本地主机和生产值。

您可能可以将.env设置为:

APP_ENV=local
APP_DEBUG=true
APP_KEY=sjkanljksdnjsnetcetcetcetc..
APP_URL=http://localhost:8000

DB_HOST=qa
DB_DATABASE=admin
DB_USERNAME=home
DB_PASSWORD=root

DB_HOST2=production// I.P address
DB_DATABASE2=admin
DB_USERNAME2=admin
DB_PASSWORD2=admin

然后,在config文件夹中的database.php文件中,您可以设置连接主机和主机2,以匹配本地主机和生产值。

Laravel 5使这一点比以前稍微困难一些,但下面是实现这一点的方法。 在此之后,您只需更改
.env
文件的值,环境就会发生变化

执行此操作的步骤如下所示

  • 查看由Laravel安装的本地
    .env
    ,并将其内容更改为本地生产或任何您需要的内容

  • 创建两个文件
    .local.env
    .production.env

  • 添加默认环境值:

    • .local.env
      APP\u env=local
    • .production.env
      APP\u env=production
  • 创建新的php文件并将其命名为
    environment.php
    ,将其保存到以下文件夹中:
    app/bootstrap/environment.php

    $env = $app->detectEnvironment(function(){
      $environmentPath = __DIR__.'/../.env';
       $setEnv = trim(file_get_contents($environmentPath));
       if (file_exists($environmentPath)){
              putenv("APP_ENV=$setEnv");
              if (getenv('APP_ENV') && file_exists(__DIR__.'/../.' .getenv('APP_ENV') .'.env')) {
                   Dotenv::load(__DIR__ . '/../', '.' . getenv('APP_ENV') . '.env');
              } 
       }
    });
    
  • 在引导文件中包括
    environment.php
    文件。将其粘贴到
    bootstrap/app.php
    文件中

    require __DIR__.'/environment.php';
    
  • 耶!你完了

    注意:如果Laravel找不到
    .env
    文件,它会自动使用
    .production.env
    ,这使它非常适合部署


    要归功于Laravel 5,这比以前稍微困难了一点,但这里有一个方法。 在此之后,您只需更改
    .env
    文件的值,环境就会发生变化

    执行此操作的步骤如下所示

  • 查看由Laravel安装的本地
    .env
    ,并将其内容更改为本地生产或任何您需要的内容

  • 创建两个文件
    .local.env
    .production.env

  • 添加默认环境值:

    • .local.env
      APP\u env=local
    • .production.env
      APP\u env=production
  • 创建新的php文件并将其命名为
    environment.php
    ,将其保存到以下文件夹中:
    app/bootstrap/environment.php

    $env = $app->detectEnvironment(function(){
      $environmentPath = __DIR__.'/../.env';
       $setEnv = trim(file_get_contents($environmentPath));
       if (file_exists($environmentPath)){
              putenv("APP_ENV=$setEnv");
              if (getenv('APP_ENV') && file_exists(__DIR__.'/../.' .getenv('APP_ENV') .'.env')) {
                   Dotenv::load(__DIR__ . '/../', '.' . getenv('APP_ENV') . '.env');
              } 
       }
    });
    
  • 在引导文件中包括
    environment.php
    文件。将其粘贴到
    bootstrap/app.php
    文件中

    require __DIR__.'/environment.php';
    
  • 耶!你完了

    注意:如果Laravel找不到
    .env
    文件,它会自动使用
    .production.env
    ,这使它非常适合部署


    这要归功于

    我对Laravel 5.0的设计是这样的。我遵循cjds指南,但更改了我的规范代码。它不需要.env文件

    $env = $app->detectEnvironment(function() {
        if (php_sapi_name() === 'cli') {
            if (strpos(getcwd(), 'production') !== false) {
                return 'production';
            } elseif (strpos(getcwd(), 'staging') !== false) {
                return 'staging';
            } elseif ((strpos(getcwd(), 'xampp') !== false) || (strpos(getcwd(), 'lampp') !== false)) {
                return 'development';
            } else {
                return 'production';
            }
        }
    
        $absoluteLink = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
        if (strpos($absoluteLink, 'production') !== false) {
            return 'production';
        } elseif (strpos($absoluteLink, 'staging') !== false) {
            return 'staging';
        } elseif (strpos($absoluteLink, '.dev') !== false || strpos($absoluteLink, 'local') !== false || strpos($absoluteLink, '192.168') !== false) {
            return 'development';
        } else {
            return 'production';
        }
    });
    
    putenv("APP_ENV=" . $env);
    

    我有这样的拉威尔5.0。我遵循cjds指南,但更改了我的规范代码。它不需要.env文件

    $env = $app->detectEnvironment(function() {
        if (php_sapi_name() === 'cli') {
            if (strpos(getcwd(), 'production') !== false) {
                return 'production';
            } elseif (strpos(getcwd(), 'staging') !== false) {
                return 'staging';
            } elseif ((strpos(getcwd(), 'xampp') !== false) || (strpos(getcwd(), 'lampp') !== false)) {
                return 'development';
            } else {
                return 'production';
            }
        }
    
        $absoluteLink = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
        if (strpos($absoluteLink, 'production') !== false) {
            return 'production';
        } elseif (strpos($absoluteLink, 'staging') !== false) {
            return 'staging';
        } elseif (strpos($absoluteLink, '.dev') !== false || strpos($absoluteLink, 'local') !== false || strpos($absoluteLink, '192.168') !== false) {
            return 'development';
        } else {
            return 'production';
        }
    });
    
    putenv("APP_ENV=" . $env);
    

    这是伟大的卡尔。我唯一的问题是,它是如何区分本地和生产的?:-)认为这可能会令人困惑。您可以在
    .env
    文件中指定它。只需添加单词
    local
    ,它将是local,否则将是production或其他任何elseneVerind,我看到您正在.env文件中手动设置它。现在有一种方法可以动态地设置它。你的第一部分很有帮助……这就是我想看看它是否可能的地方。事实上,我可能可以在enivornment.php文件中对其进行编码。例如,如果IP地址为1.2.3.4,则使用本地等。是的。就是这样。您可以使用
    environment.php
    getenv('APP_ENV')
    替换为您从IP设置的变量或用于从本地告诉生产的任何变量,这很好。我唯一的问题是,它是如何区分本地和生产的?:-)认为这可能会令人困惑。您可以在
    .env
    文件中指定它。只需添加单词
    local
    ,它将是local,否则将是production或其他任何elseneVerind,我看到您正在.env文件中手动设置它。现在有一种方法可以动态地设置它。你的第一部分很有帮助……这就是我想看看它是否可能的地方。事实上,我可能可以在enivornment.php文件中对其进行编码。例如,如果IP地址为1.2.3.4,则使用本地等。是的。就是这样。您可以使用
    environment.php
    getenv('APP_ENV')
    替换为您从IP设置的变量,或用于从本地告诉生产的任何变量,对于那些只想查找当前环境值的用户,请使用
    if(APP::environment('local'))
    对于那些只想查找当前环境值的人,只需使用
    if(App::environment('local'))