原文地址:PHPdotenv通过.env加载环境变量,可以通过getenv()、$_ENV、$_SERVER自动调用。这是Rubydotenv的PHP版本。为什么是.env?您不能在代码/帐户数据中存储任何敏感信息。在环境中存储配置是12因素的规则。部署期间可能发生变化的所有内容——例如数据库身份验证或第三方服务的身份验证都应从代码中剥离。即环境变量的概念。从广义上讲,.env文件是一种加载自定义配置的简单方法,因此您的应用程序不需要修改.htaccess文件或Apache/nginx虚拟主机。这意味着您不需要编辑任何文件,并且所有环境变量都已完全配置,无论您是在Apache、Nginx、CLI上运行还是在PHP5.4上的内置Web服务器上运行。这是已知的设置环境变量的最简单方法,您会喜欢它的。无需在Apache或Nginx上配置额外的虚拟主机配置无需在.htaccess中添加php_value值易于移植和共享ENV环境变量值兼容服务器内置服务器和CLIrunner使用composer安装curl-shttp://getcomposer.org/installer|phpphpcomposer.pharrequirevlucas/phpdotenv如何使用.env文件通常不包含在版本控制中,它可能包含敏感的API密钥或密码。所有需要定义环境变量(insensitivedefinitions)的项目都需要创建一个.env.example文件,里面包含自己定义的环境变量或者联合开发包含的环境变量。项目合作开发者可以独立复制.env.example并重命名为.env,并修改为正确的本地环境配置、存储密钥或提供其必要的值。在此使用方法中,应将.env文件添加到.gitignore文件中,并且不应由项目合作者签入/签出。此方法确保版本控制中不会出现敏感的API密钥或密码,以降低安全风险。并且开发环境中的配置永远不会通知合作开发者。在根目录下的.env文件中添加配置,确保将.env文件添加到.gitignore以便它不会被签入CVSS3_BUCKET=dotenvSECRET_KEY=souper_seekret_key现在创建一个.env.example文件并将其签入项目。这里需要设置的配置和环境变量可以留空或者设置一些不相关的关键数据。这种方法告诉人们需要这个数据,但不提供真实环境中的数据。S3_BUCKET=devbucketSECRET_KEY=abc123可以使用下面这行代码在应用程序中加载.env文件:Dotenv::load(__DIR__);所有定义的变量都可以通过getenv方法访问,也可以使用superglobal访问变量$_ENV和$_SERVER。$s3_bucket=getenv('S3_BUCKET');$s3_bucket=$_ENV['S3_BUCKET'];$s3_bucket=$_SERVER['S3_BUCKET'];您还可以使用框架的Request类来访问这些变量(如果您使用框架)$s3_bucket=$request->env('S3_BUCKET');$s3_bucket=$request->getEnv('S3_BUCKET');$s3_bucket=$request->server->get('S3_BUCKET');嵌入变量可以在变量中嵌入环境变量,这对于减少重复很有用。使用{$...}封装环境变量e.g.BASE_DIR=/var/webroot/project-rootCACHE_DIR={$BASE_DIR}/cacheTMP_DIR={$BASE_DIR}/tmpImmutable默认情况下,Dotenv认为环境变量是不可变的。这意味着一旦设置,它们就无法更改。可以使用下面的函数将环境变量设置为可变的Dotenv::makeMutable();...同样,也可以使用下面的函数使其不再可变Dotenv::makeImmutable();必须设置变量才能使用Dotenv,可以指定必须设置这个ENV变量,不设置会抛出异常。如果程序没有这个变量就无法运行,这对人们来说非常有用。使用以下语法:Dotenv::required('DATABASE_DSN');或定义一个数组:Dotenv::required(array('DB_HOST','DB_NAME','DB_USER','DB_PASS'));如果缺少ENV变量,Dotenv会抛出RuntimeException:Requiredenvironmentvariablemissingorvaluenotallowed:'DB_USER','DB_PASS'allowedvalue你可能已经看到上面的异常信息,你可以设置一个可能的范围值,这样您的环境变量遵循此规则Dotenv::required('SESSION_STORE',array('Filesystem','Memcached'));同样,如果环境变量不在这个列表中,你会收到类似的异常信息:Requiredenvironmentvariablemissingorvaluenotallowed:'SESSION_STORE'注释可以使用#来注释字符。例如#thisisacommentVAR="value"#commentVAR=value#comment当开发人员克隆你的代码库时使用注释。他们将收到一个额外的手动一次性步骤,手动复制.env.example并将其重命名为.env并附加他们自己的值(或从其他开发人员那里获取其他敏感值)。phpdotenv用于设置开发环境,但不应在生产环境中使用。在生产环境中,每次使用请求时,都需要设置真正的变量,而不需要重新加载.env文件。这可以通过自动化部署工具来实现,例如:Vagrant、chef、Puppet,或者通过云主机手动实现,例如:Pagodabox、Heroku。ContributeForkitcreateabranch(gitcheckout-bmy-new-feature)makechangesruntests,ifneeded,addnewconfiguration(phpunit)commit(gitcommit-am'Addedsomefeature')推送到分支(gitpushoriginmy-new-feature)创建一个新的拉取请求
