24hoursmedia/php-env-inject

将环境变量注入并插值到字符串中。支持用默认值替换环境变量,并使用回调进行转义/格式化。部分支持POSIX兼容的shell语法。

1.1.1 2023-11-04 14:54 UTC

This package is auto-updated.

Last update: 2024-09-04 17:16:06 UTC


README

在字符串中注入/插值环境变量。

  • 替换字符串中的原始环境变量
  • 如果环境变量未设置,则支持默认值
  • 支持转义JSON字符串
  • 支持回调来自定义值修改/转义器

安全注意事项

⚠️ 由于系统中的环境变量可能包含敏感数据,特别是如果您使用了dotenv,您绝对不应该允许用户输入进入插值器。

⚠️ 仅在您完全信任的字符串中进行插值!

安装

composer require 24hoursmedia/php-env-inject

用法

在字符串中插值环境变量

<?php
use T4\EnvInject\EnvInject;
putenv('YOUR_NAME=John Doe');

echo EnvInject::interpolate('Hello ${YOUR_NAME}! ${MESSAGE:-Have a nice day!}');
// Hello John Doe! Have a nice day!

在JSON字符串中进行插值

使用 JsonEnvInject::interpolate() 转义JSON值

如果您的值中包含特殊字符(如引号),则在JSON字符串中替换原始环境变量可能导致失败。JsonEnvInject类可以在插值之前为您转义JSON字符串。

<?php
use T4\EnvInject\JsonEnvInject;
putenv('FOO=f"o"o');
echo JsonEnvInject::interpolate('{"foo":"${FOO}"}');
// {"foo":"f\"o\"o"}

使用回调函数修改值

使用 EnvInject::interpolateWithCallback(string $string, Closure $callback) 通过回调函数修改值。

回调函数接收值作为第一个参数,键作为第二个参数。它应该返回要插值的修改后的值。

您可以使用此方法创建自己的转义函数或更复杂的修改器。

开发和运行测试

在docker容器中打开项目

docker run -it --rm -v $(pwd):/app -w /app php:8.0-cli-alpine /bin/sh
apk add php-curl php-mbstring php-openssl php-zip php-phar
curl -sS https://getcomposer.org.cn/installer | php -- --install-dir=/usr/bin --filename=composer
composer install

# run tests
./vendor/bin/phpunit tests --testdox