如何在 Laravel 中动态更改 .env 文件中的变量?
.env 文件包含以下内容:
APP_NAME=Laravel APP_ENV=local APP_KEY=base64:BUdhVZjOEzjFihHKgt1Cc+gkQKPoA4iH98p5JwcuNho= APP_DEBUG=true APP_URL=https://127.0.0.1 LOG_CHANNEL=stack LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=test DB_USERNAME=root DB_PASSWORD= BROADCAST_DRIVER=log CACHE_DRIVER=file FILESYSTEM_DRIVER=public QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 MEMCACHED_HOST=127.0.0.1 REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 SERVER_ADDR = 127.0.0.1 MAIL_MAILER=smtp MAIL_HOST=mailhog MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=null MAIL_FROM_NAME="${APP_NAME}" AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= AWS_USE_PATH_STYLE_ENDPOINT=false PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET= PUSHER_APP_CLUSTER=mt1 MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
此文件在您进行 Laravel 安装时生成。它包含所有常见的环境变量,例如 APP_NAME、APP_URL、您的数据库连接等。
上述环境变量在 config/ 文件夹内使用,该文件夹包含所有配置文件。config/ 文件夹的结构如下:
当您在本地、暂存环境和生产环境中运行应用程序时,.env 文件中的值将有所不同。由于 .env 源内容因工作环境而异,因此最好不要将该文件提交到您的存储库。
要获取您在应用程序中工作的环境,您可以使用 App** Facade 类:use Illuminate\Support\Facades\App;
示例 1
使用 App::environment() 获取环境类型
use Illuminate\Support\Facades\App; $environment = App::environment(); echo $environment;
输出
输出将是:
local
环境变量 APP_DEBUG 在**config/app.php** 中读取。设置为 true 时,它将在屏幕上显示有关错误消息的信息。该值从 config/app.php 内的 .env 文件中获取。在您本地工作时应将其设置为 true,在生产环境中应将其设置为 false。
现在让我们了解如何动态更改环境变量。没有直接的方法来更改它,您可以使用以下方法之一:
示例 2
动态更改环境变量
$path = base_path('.env'); $test = file_get_contents($path); if (file_exists($path)) { file_put_contents($path, str_replace('APP_ENV=local', 'APP_ENV=production', $test)); }
输出
在上面的示例中,我们获取 .env 文件的文件路径。稍后将变量 APP_ENV=local 替换为 APP_ENV=production。现在,当您检查 .env 文件时,您将获得以下内容:
APP_NAME=Laravel APP_ENV=production APP_KEY=base64:BUdhVZjOEzjFihHKgt1Cc+gkQKPoA4iH98p5JwcuNho= APP_DEBUG=true APP_URL=https://127.0.0.1
示例 3
使用 env() 获取环境变量。
env() 方法可帮助您获取在 .env 文件中设置的环境变量的值。您可以将变量名称传递给 env() 方法,它将返回在 .env 文件中设置的值。
echo env('APP_URL'); echo "<br/>"; echo env('APP_ENV'); echo "<br/>"; echo env('APP_KEY');
输出
以上代码的输出为:
https://127.0.0.1 local base64:BUdhVZjOEzjFihHKgt1Cc+gkQKPoA4iH98p5JwcuNho=
示例 4
您还可以使用 $_ENV 全局变量来获取所有环境变量及其值。
print_r($_ENV);
输出
以上代码的输出为:
Array( [APP_NAME] => Laravel [APP_KEY] => base64:BUdhVZjOEzjFihHKgt1Cc+gkQKPoA4iH98p5JwcuNho= [APP_DEBUG] => true [APP_URL] => https://127.0.0.1 [LOG_CHANNEL] => stack [LOG_DEPRECATIONS_CHANNEL] => null [LOG_LEVEL] => debug [DB_CONNECTION] => mysql [DB_HOST] => 127.0.0.1 [DB_PORT] => 3306 [DB_DATABASE] => test [DB_USERNAME] => root [DB_PASSWORD] => [BROADCAST_DRIVER] => log [CACHE_DRIVER] => file [FILESYSTEM_DRIVER] => public [QUEUE_CONNECTION] => sync [SESSION_DRIVER] => file [SESSION_LIFETIME] => 120 [MEMCACHED_HOST] => 127.0.0.1 [REDIS_HOST] => 127.0.0.1 [REDIS_PASSWORD] => null [REDIS_PORT] => 6379 [SERVER_ADDR] => 127.0.0.1 [MAIL_MAILER] => smtp [MAIL_HOST] => mailhog [MAIL_PORT] => 1025 [MAIL_USERNAME] => null [MAIL_PASSWORD] => null [MAIL_ENCRYPTION] => null [MAIL_FROM_ADDRESS] => null [MAIL_FROM_NAME] => Laravel [AWS_ACCESS_KEY_ID] => [AWS_SECRET_ACCESS_KEY] => [AWS_DEFAULT_REGION] => us-east-1 [AWS_BUCKET] => [AWS_USE_PATH_STYLE_ENDPOINT] => false [PUSHER_APP_ID] => [PUSHER_APP_KEY] => [PUSHER_APP_SECRET] => [PUSHER_APP_CLUSTER] => mt1 [MIX_PUSHER_APP_KEY] => [MIX_PUSHER_APP_CLUSTER] => mt1 )
广告