PHP如何让CLI读取环境变量,有哪些常用方法

来源:安卓APP网作者:南京GEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《PHP如何让CLI读取环境变量,有哪些常用方法》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《PHP如何让CLI读取环境变量,有哪些常用方法》有用,将其分享出去将是对创作者最好的鼓励。

在PHP的CLI模式下开发脚本时,读取环境变量是实现配置动态化的重要手段,能够避免将数据库密码、接口密钥等敏感信息直接写入代码文件,提升项目的安全性和可维护性。环境变量可以来自系统全局配置、当前会话临时设置或者自定义的环境变量文件,PHP提供了多种方式来获取这些变量的值。

PHP如何让CLI读取环境变量,有哪些常用方法

使用getenv函数读取环境变量

getenv是PHP内置的用于获取环境变量值的函数,在CLI模式下可以直接使用,该函数接收一个字符串参数作为环境变量的名称,返回对应的变量值,如果变量不存在则返回false。

<?php
// 读取系统自带的环境变量
$path = getenv('PATH');
if ($path !== false) {
    echo "系统PATH环境变量值:" . $path . PHP_EOL;
} else {
    echo "未找到PATH环境变量" . PHP_EOL;
}

// 读取自定义环境变量
$customVar = getenv('CUSTOM_CONFIG');
if ($customVar !== false) {
    echo "自定义环境变量CUSTOM_CONFIG的值:" . $customVar . PHP_EOL;
} else {
    echo "未找到CUSTOM_CONFIG环境变量" . PHP_EOL;
}
?>

需要注意的是,getenv函数在找不到对应环境变量时返回false,因此在判断变量是否存在时,建议使用严格不等于运算符,避免变量值为"0"或者空字符串时被误判为不存在。

通过$_ENV全局数组读取环境变量

PHP的$_ENV是一个超全局数组,其中存储了当前环境中所有的环境变量,在CLI模式下可以直接通过数组键名访问对应变量的值,如果键名不存在则返回null。

<?php
// 读取$_ENV中的环境变量
if (isset($_ENV['HOME'])) {
    echo "用户家目录路径:" . $_ENV['HOME'] . PHP_EOL;
} else {
    echo "未找到HOME环境变量" . PHP_EOL;
}

// 遍历所有环境变量
echo "当前所有环境变量:" . PHP_EOL;
foreach ($_ENV as $key => $value) {
    echo $key . ":" . $value . PHP_EOL;
}
?>

不过$_ENV数组的可用性取决于php.ini中的variables_order配置,如果该配置项没有包含字母E,那么$_ENV数组可能为空,此时无法通过该数组读取环境变量。

读取自定义环境变量文件中的变量

在实际开发中,我们经常会把环境变量放在自定义的.env文件中,CLI模式下需要先解析该文件,将变量加载到环境中才能读取。可以通过读取文件内容,逐行解析键值对,再使用putenv函数将变量注册到当前环境中。

<?php
// 解析.env文件并加载环境变量
$envFile = __DIR__ . '/.env';
if (file_exists($envFile)) {
    $lines = file($envFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    foreach ($lines as $line) {
        // 跳过注释行
        if (strpos(trim($line), '#') === 0) {
            continue;
        }
        // 分割键值对
        $parts = explode('=', $line, 2);
        if (count($parts) == 2) {
            $key = trim($parts[0]);
            $value = trim($parts[1]);
            // 去掉值两端的引号
            if (preg_match('/^"(.*)"$/', $value, $matches)) {
                $value = $matches[1];
            } elseif (preg_match("/^'(.*)'$/", $value, $matches)) {
                $value = $matches[1];
            }
            // 设置环境变量
            putenv("$key=$value");
        }
    }
    echo "环境变量加载完成" . PHP_EOL;
} else {
    echo ".env文件不存在" . PHP_EOL;
}

// 读取加载后的环境变量
$dbHost = getenv('DB_HOST');
if ($dbHost !== false) {
    echo "数据库主机地址:" . $dbHost . PHP_EOL;
}
?>

对应的.env文件内容示例如下:

# 数据库配置
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=root
DB_PASS=test_password

两种读取方法的对比

getenv函数和$_ENV数组各有适用场景,下面通过表格对比两者的差异:

对比项getenv函数$_ENV数组
依赖配置无依赖,默认可用依赖php.ini的variables_order配置包含E
不存在时的返回值falsenull
是否支持设置变量不支持,仅读取不支持,仅读取
适用场景需要兼容不同配置环境,或者不确定variables_order配置的场景确定服务器配置支持,需要遍历所有环境变量的场景

注意事项

  • 使用putenv函数设置的环境变量仅在当前脚本执行周期内有效,脚本执行结束后变量会自动失效,不会影响系统全局环境变量。
  • 如果环境变量的值包含特殊字符,比如等号、引号等,在解析.env文件时需要进行对应的转义处理,避免解析错误。
  • 在CLI模式下执行脚本时,也可以通过命令行临时传递环境变量,格式为VAR_NAME=value php script.php,此时脚本内可以直接读取该变量。
# 命令行临时传递环境变量并执行脚本
CUSTOM_KEY=test_value php test.php

PHPCLI环境变量getenv_ENV修改时间:2026-07-07 17:57:15

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。